【mysql进阶】主从同步原理及实操指南(二)

128 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第32天,点击查看活动详情

1. 主从同步实操

上一篇我们讲解了主从同步的原理,那么今天我们来实际演示下配置流程

1.1 环境准备

首先这里需要准备两台mysql服务器,一台作为主库,一台作为从库,我这里选用mysql8.0。并且创建一些数据库和表,添加一些数据进去作为同步测试

在这里插入图片描述

1.2 实操

1、因为是基于binlog的,需要在主从库都开启binlog,并且开启主库的GTID,修改主库配置文件

sudo vim /etc/my.cnf

修改内容

log-bin=mysql-bin #二进制文件名称
binlog-format=ROW  #二进制日志格式
server-id=1	 #要求各个服务器的id必须不一样

gtid_mode=ON # 开启GTID
enforce_gtid_consistency=ON
log_slave_updates=ON

2、重启主库

service mysqld restart

3、查询binlog是否开启成功,登陆主库执行

show master status;

在这里插入图片描述

4、给连接主库进行数据同步的账号赋权,登陆主mysql执行:

grant replication slave on *.* to 'root'@'%';
# 刷新权限
flush privileges;

5、修改从库mysql配置文件

sudo vim /etc/my.cnf

修改内容

log-bin=mysql-bin # 开启bin log,配置binlog文件名
binlog-format=ROW  #二进制日志格式
server-id=2	 #要求各个服务器的id必须不一样

gtid_mode=ON # 开启GTID
enforce_gtid_consistency=ON
log_slave_updates=ON

slave-parallel-type=LOGICAL_CLOCK # 开启MTS相关配置,设置为LOGICAL_CLOCK实现更小粒度的并行复制
slave-parallel-workers=16 # work线程数
slave_pending_jobs_size_max = 2147483648
slave_preserve_commit_order=1 # 保证事务按照relay log记录的顺序回放,配合LOGICAL_CLOCK使用
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

6、重启从库

service mysqld restart

7、声明主库,登陆从库执行:

# 登陆
mysql -uroot -p123456
#连接主服务器
change master to master_host='192.168.244.23',master_user='root',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=157;
#启动slave
start slave;

8、查看从库状态

# 表格形式输出,适合在数据库连接工具中使用
show slave status;
# 行形式输出,适合在命令行窗口中使用
show slave status\G;

这里发现报错:Authentication plugin 'caching_sha2_password' reported error 在这里插入图片描述 根据报错信息来看是校验模式设置为了caching_sha2_password,我们登陆主库,查看一下

SELECT plugin FROM mysql.`user` where user = 'root';

在这里插入图片描述 果然是,修改其为mysql_native_password即可,执行

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

同时因为我这里从库是根据主库服务器克隆来的,所以会导致两个mysql的uuid一致,因此也需要再更改一下,修改从库auto.cnf配置文件:

# 进入mysql安装目录
cd /var/lib/mysql
vim auto.cnf

将uuid修改得与之前不一致即可 在这里插入图片描述 修改完重启mysql

其次还需要注意,如果你之前没有开启GTID,中间产生了一些事务,而后续又开启了GTID,非GTID事务和GTID事务之间是不能同步的,这时就需要你将binlog的同步位置,调整到开启GTID之后

# 查询当前binlog位置,主库中执行
show master status;
# 从库中修改同步位置
stop slave;
change master to master_log_file='mysql-bin.000003',master_log_pos=197;
start slave;
# 查询slave状态
show slave status\G;

如图所示无报错即可 在这里插入图片描述

9、修改主库数据,任意修改了一条数据 在这里插入图片描述

10、查看从库对应的表数据

在这里插入图片描述 同步成功!!

总结

本期的分享就到此结束了,一定要亲自动手实操试试,只有自己尝试,才会发现更多的问题,才能掌握的更加牢靠

关注公众号 Elasticsearch之家,优先掌握更多内容