概述:Mysql主从复制是一个异步的复制过程,底层基于自带的二进制功能(DDL和DML语句共同操作).
原理:
1.Mysql master将数据变更写入二进制日志(binlog).
2.salve将master中的binary log拷贝到他的中继日志(relay log)
3.salve重做中继日志的事件,将数据变更反应自己的事件
准备工作
1.需要准备两台linux服务器
2.防火墙开放3306端口,执行如下语句:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --list-ports
3.并将两台服务器启动起来:
登录mysql并验证是否正常启动,执行如下命令
systemctl start mysqld
主库的配置
1.修改mysql的配置文件: vim /etc/my.cnf
2.在[mysql]下方添加配置
log-bin=mysql-bin #[必须]启用二进制日志
server-id=200 #[必须]服务器唯一ID(唯一即可)
3.重启mysql服务,执行如下命令
systemctl restart mysqld
4.登录mysql并执行如下命令,创建用户并授权
GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
5.登录mysql并查看master同步状态
show master status;
最重要的是执行次语句就不要在对次数据库有任何操作
从库的配置
1.修改mysql的配置文件: vim /etc/my.cnf
2.重启mysql服务: systemctl restart mysqld
3.登录mysql并复制下方设置主库地址及同步位置(!!!注意根据实际的ip addr来配置)
change master to master_host='192.168.93.144',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=441;
start slave;
# 当主从同步出现问题后,可以在从库中执行下方命令,然后重新通过上方语句开启主从复制
stop slave; # 停止从库主从复制
reset slave; # 清理之前的主从同步信息
参数说明:
A. master_host : 主库的IP地址
B. master_user : 访问主库进行主从复制的用户名(上面在主库创建的)
C. master_password : 访问主库进行主从复制的用户名对应的密码
D. master_log_file : 从哪个日志文件开始同步(上述查询master状态中展示的有)
E. master_log_pos : 从指定日志文件的哪个位置开始同步(上述查询master状态中展示的有)
4.查看数据库的状态: show slave status;
ShardingJDBC
1. 适用于任何基于JDBC的ORM框架
2.支持任何第三方数据库连接池如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
3.支持任意实现JDBC规范数据库
依赖:
sharding-jdbc-spring-boot-starter
读写分离
pom.xml配置
sharding-jdbc-spring-boot-starter
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.200.200:3306/rw?characterEncoding=utf-8
username: root
password: root
# 从数据源
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.200.201:3306/rw?characterEncoding=utf-8
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
在application.yml文件中增加配置
spring:
main:
allow-bean-definition-overriding: true



