本文使用 Sharding-JDBC 实现读写分离,基于 CentOS 7 + MySQL 5.7

一、MySQL 安装及配置

1.1 安装

依次执行命令:

sudo wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

sudo yum -y install mysql57-community-release-el7-10.noarch.rpm

sudo yum -y install mysql-community-server

sudo yum -y remove mysql57-community-release-el7-10.noarch

启动:

sudo systemctl start  mysqld

1.2 修改密码

查看默认密码:

grep "password" /var/log/mysqld.log

进入数据库:

mysql -uroot -p

修改密码:

alter user 'root'@'localhost' identified by 'NEW PASSWORD';

远程访问:

use mysql;
grant all privileges on *.* TO 'root'@'%' identified by 'PASSWORD';
flush privileges;

1.3 主从配置

本文一主 (192.168.30.101) 两从 (192.168.30.102, 192.168.30.103)

1.3.1 主库

sudo vim /etc/my.cnf
# server-id 给数据库服务的唯一标识
server-id=101
# log-bin 设置此参数表示启用 binlog 功能,并指定路径名称
log-bin=/var/lib/mysql/mysql-bin
sync_binlog=0
# 设置日志过期天数
# binlog-ignore-db 表示同步时忽略的数据库
# binlog-do-db 表示需要同步的数据库
expire_logs_days=7
binlog-do-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema

重启数据库,执行 SQL:

grant replication slave on *.* to 'root'@'192.168.30.102' identified by 'YOUR PASSWORD';
flush privileges; grant replication slave on *.* to 'root'@'192.168.30.103' identified by 'YOUR PASSWORD';
flush privileges;

重启数据库,执行 SQL:

show master status;

记录下 File 和 Position

1.3.2 从库配置

以 192.168.30.102 为例:

log-bin=mysql-bin
server-id=102
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

重启数据库,执行 SQL:

stop slave;
change master to master_host='192.168.30.101',master_user='root',master_password='YOUR PASSWORD',master_log_file='mysql-bin.000002', master_log_pos=154;
start slave;

其中 master_log_file 和 master_log_pos 分别为上步记录主库的 File 和 Position

二、使用

2.1 pom.xml

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.18</version>
</dependency>
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>

2.2. application.yml

spring:
main:
allow-bean-definition-overriding: true mybatis:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapping/*.xml sharding:
jdbc:
datasource:
names: db-master-1,db-slave-1,db-slave-2 db-master-1:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.30.101:3306/test
username: root
password: root
maxPoolSize: 20 db-slave-1:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.30.102:3306/test
username: root
password: root
maxPoolSize: 20 db-slave-2:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.30.103:3306/test
username: root
password: root
maxPoolSize: 20 config:
masterslave:
load-balance-algorithm-type: round_robin # random 随机, round_robin 轮询
name: db1s2
master-data-source-name: db-master-1
slave-data-source-names: db-slave-1,db-slave-2 props:
sql:
show: true

完整代码:GitHub

参考:

  1. CentOS7 yum方式安装MySQL5.7
  2. Sharding-JDBC教程:Mysql数据库主从搭建
  3. Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现读写分离

最新文章

  1. win7下装完ubuntu linux后,开机画面怎直接进入linux了,win7怎么启动
  2. MyEclipse生成WAR包并在Tomcat下部署发布(转发)
  3. 去掉DataTable中重复的行
  4. 原创js模型驱动
  5. U盘启动时无USB-HDD选项的解决方案
  6. Item with the same id &quot;98&quot; already exist
  7. centsOS下安装vsftp的配置
  8. css盒模型研究
  9. 用.Net Core控制台模拟一个ASP.Net Core的管道模型
  10. Appium之开发环境搭建
  11. python configparser使用
  12. Install Python on Mac (Anaconda)
  13. OSGI企业应用开发(七)细说Blueprint &amp; Gemini Blueprint(二)
  14. 括弧匹配检验(check.cpp)
  15. 【C#】复制物体后,给副本命名的规则——用正则表达式
  16. TSQL--关联更新和删除
  17. 蓝色的cms企业记账管理后台模板源码——后台
  18. PHP中exit,exit(0),exit(1),exit(&#39;0&#39;),exit(&#39;1&#39;),die,return的区别
  19. 【转】PG数据库高级用法 之 12306 -- 链接
  20. [C++] Fucntions

热门文章

  1. C#中的release和debug模式
  2. Java-GUI基础(二)java.awt
  3. C# Base64解码小工具编写
  4. 2020提高组模拟赛7 StormWind
  5. 21迁移python项目到另一台电脑
  6. 激情的来源 Imagine how much you love it !
  7. MFC的大致讲解
  8. Zabbix实现电话告警通知的配置方法分享
  9. mysql 常用命令和笔记
  10. 小程序&#183;云开发地表最强CI利器来了