环境
两台虚拟机并且都配置了mysql,其中一台做master(192.168.146.100),其余做slave(192.168.146.101)
1.修改master
-
配置master开启二进制日志
-
重启mysql 命令:systemctl restart mysqld
-
对master设置用户并创建密码和授权
-
查看master状态之后不要操作任何东西
2.修改slave
- 修改slave(192.168.146.101)
- 重启mysql 命令:systemctl restart mysqld
- 修改slave,记住master_host,master_user,master_password,master_log_file名字。master_position
- 用show slave status\G查看slave状态
重点关注以上四个内容,都满足说明主从复制成功,若Slave_IO_Running=no,且两台虚拟机是clone出来的,记住改一下clone的UUID。
3.异常修改uuid
- 获取uuid
# uuidgen
- 替换uuid
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
4.程序中使用读写分离
- 引入依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
最好使用这个版本
- application.yml配置
spring:
shardingsphere:
datasource:
names:
master,slave
# 主数据源
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.146.100:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root
# 从数据源
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.146.101:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root
masterslave:
# 读写分离配置
load-balance-algorithm-type: round_robin
# 最终的数据源名称
name: dataSource
# 主库数据源名称
master-data-source-name: master
# 从库数据源名称列表,多个逗号分隔
slave-data-source-names: slave
props:
sql:
show: true #开启SQL显示,默认false
main:
allow-bean-definition-overriding: true