一主二从集群
基于SpringBoot + Mybatis + Sharding JDBC完成读写分离案例
在本案例中,开启了主服务器和从1基于Grid的主从同步,主服务器和从2之间没有开启。
云主机配置
三台云主机分别下载Mysql8, 建表
yum list mysql-server
yum install -y mysql-server.x86_64
- 主服务器创建database learn,从1创建 database slave1,从2创建database slave2(这里主从配置了不同名的database,后续要开启主从同步时从服务器要加个映射)
- 在learn,slave1,slave2中分别执行
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`address` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
配置主服务器
配置文件
/etc/my.cnf.d/mysql-server中添加(Mysql7:/etc/my.cnf):
#binlog刷盘策略
sync_binlog=1
#需要备份的数据库
binlog-do-db=learn
#不需要备份的数据库
binlog-ignore-db=mysql
#启动二进制文件
log-bin=mysql-bin
#服务器ID
server-id=132
gtid_mode=on
enforce_gtid_consistency=on
#强烈建议,其他格式可能造成数据不一致
binlog_format=row
登录Mysql,给从服务器授权
systemctl restart mysqld
mysql -uroot -p
- 从服务器使用主服务器的root用户登录
mysql> GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';
- 或者主服务器新建一个用户,用于从服务器的访问
Mysql8写法
mysql>CREATE USER 'slave'@'%' IDENTIFIED BY '密码';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave' @ '%';
Mysql7写法
mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave' @ '%' identified by ‘密码’;
配置从服务器1
配置文件
/etc/my.cnf.d/mysql-server中添加:
server-id=133
gtid_mode=on
enforce_gtid_consistency=on
replicate-rewrite-db=learn->slave1
(从服务器上的database和主服务器上的database不同名时要配置该映射,一开始没配置,show slave status时有报错,learn是未知的数据库)
登录Mysql,启动slave
systemctl restart mysqld
mysql -uroot -p
mysql>change master to
master_host='主服务器ip‘,
master_port=3306,
master_user='主服务器授权的用户名',
master_password='主服务器授权的密码',
master_auto_position=1;
mysql>start slave;
查看slave状态
show slave status \G
验证主和从1之间的主从同步
主服务器插入两条数据
从1可以查到
应用程序
gitlab下载老师提供demo
修改配置文件中的主从地址
运行程序,查看结果
往主服务器写入一条数据
循环查询了50次,发现有50次可以查到,有50次查不到。推理查询从1服务器50次,从1开启了主从同步,可以查到。从2没有开启,往主服务器写的数据,从2读不到。