MySQL主从同步配置

本文详细指导如何配置MySQL主从同步,包括修改主库my.cnf设置log-bin和binlog_format,授权从库,调整server-id,以及处理同步失败的两种策略。重点介绍了如何检查和修复同步问题,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL主从同步配置

1 修改主库配置文件 /etc/my.cnf
vim /etc/my.cnf
#在mysqld模块中添加如下配置信息
log-bin=master-bin #二进制文件名称
binlog-format=ROW #二进制日志格式,有row、statement、mixed三种格式,row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍,statement指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
server-id=1 #要求各个服务器的id必须不一样
binlog-do-db=test #同步的数据库名称

2.配置从服务器登陆主服务器的账号授权
set global validate_password_policy=0;
set global validate_password_length=1;
grant replication slave on . to ‘root’@‘%’ identified by ‘123456’;
–刷新权限
flush privileges;

3 修改从服务器配置文件 /etc/my.cnf
vim /etc/my.cnf
#在mysqld模块中添加如下配置信息
log-bin=master-bin #二进制文件的名称
binlog-format=ROW #二进制文件的格式
server-id=2 #服务器的id
4 重启主服务器的MySQL服务
service mysqld restart
mysql -uroot -p
#查看master的状态
mysql> show master status;
±------------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±------------------±---------±-------------±-----------------±------------------+
| master-bin.000001 | 154 | test | | |
±------------------±---------±-------------±-----------------±------------------+
1 row in set (0.00 sec)
9342

5 重启从服务器的MySQL服务
service mysqld restart

#连接master主服务器

mysql> change master to master_host=‘192.168.47.47’, #master_host对应主服务器的IP地址。
master_port=3306,master_user=‘root’, #master_port对应主服务器的端口。
master_password=‘Nomatter…123456’,
master_log_file=‘master-bin.000001’,
master_log_pos=154;
slave数据同步
mysql> start slave;
mysql> show slave status\G; #Slave_IO_Running和Slave_SQL_Running都为yes,则表示同步成功,可以测试在主服务器上创建表以及添加数据,查看从服务器上是否同步创建了该表以及添加了对应数据。

可能遇到的错误
若在主从同步的过程中,出现其中一条语句同步失败报错了,则后面的语句也肯定不能同步成功了。例如,主库有一条数据,而从库并没有这一条数据,然而,在主库执行了删除这一条数据的操作,那么从库没有这么一条数据就肯定删除不了,从而报错了。在此时的从数据库的数据同步就失败了,因此后面的同步语句就无法继续执行。
有两种解决方法:
(1)在从数据库中,使用SET全局sql_slave_skip_counter来跳过事件,跳过这一个错误,然后执行从下一个事件组开始。
#在从数据库上操作
mysql > stop slave;
mysql > set global sql_slave_skip_counter=1;
mysql > start slave;

2)在从数据库中,重新连上主数据库。这种操作会直接跳过中间的那些同步语句,可能会导致一些数据未同步过去的问题,但这种操作也是最后的绝招。最好就是令从数据库与主数据库的数据结构和数据都一致了之后,再来恢复主从同步的操作。
#在从数据库上操作
mysql > stop slave;
mysql> change master to master_host=‘192.168.17.130’,master_port=3306,master_user=‘root’,master_password=‘Nomatter…123456’,master_log_file=‘master-bin.000001’,master_log_pos=2050;
mysql > start slave;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值