mysql主从同步配置(windows)

环境和目标

本机(windows)上已经安装了一个MySQL(5.7), 安装过程略。
目标:实现MySQL主从同步,原MySQL为主,创建一个新的MySQL实例为从。

新增mysql实例

复制原有mysql如:D:\mysql-5.7.25(作为主库) -> D:\mysql-5.7.25-s1(作为从库),并修改以下从库的my.ini:

[mysqld]
#设置3307端口
port = 3307
# 设置mysql的安装目录
basedir=D:\mysql-5.7-s2
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql-5.7-s2\data

然后将从库安装为windows服务,注意配置文件位置:

D:\mysql-5.7.25-s1\bin>mysqld install mysqls1 --defaults-file="D:\mysql-5.7.25-s1\my.ini"

由于从库是从主库复制过来的,因此里面的数据完全一致,可使用原来的账号、密码登录。

修改主、从库的配置文件(my.ini)

在主、从库的my.ini 新增内容如下:

主库:

[mysqld]
#开启日志
log-bin = mysql-bin
#设置服务id,主从不能一致
server-id = 1
#设置需要同步的数据库,这里设置user_db数据库
binlog-do-db=user_db
#屏蔽系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema 
binlog-ignore-db=performance_schema

从库:

[mysqld]
#开启日志
log-bin = mysql-bin
#设置服务id,主从不能一致
server-id = 2
#设置需要同步的数据库
replicate_wild_do_table=user_db.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%

重启主库和从库:

net start [主库服务名]
net start [从库服务名mysqls1]

请注意,主从MySQL下的数据(data)目录下有个文件auto.cnf,文件中定义了uuid,要保证主从数据库实例的uuid不一样,建议直接删除掉,重启服务后将会重新生成。
(建议搜索MySQL目标把搜索到的auto.cnf删除)

授权主从复制专用账号

主从库之间的复制使用专用的MySQL账号,步骤如下:

#切换至主库bin目录,登录主库
mysql -h localhost -uroot -p
#授权主备复制专用账号
GRANT REPLICATION SLAVE ON . TO ‘db_sync’@’%’ IDENTIFIED BY ‘db_sync’;
#刷新权限
FLUSH PRIVILEGES;
#确认位点 记录下文件名以及位点
show master status;

在这里插入图片描述
注意:记住File、Position的值。

设置从库向主库同步数据、并检查链路

注意下边配置中 master_log_file 和 master_log_pos要分别和File、Position的值一致。

#切换至从库bin目录,登录从库
mysql -h localhost -P3307 -uroot -p
#先停止同步
 STOP SLAVE; 
#修改从库指向到主库,使用上一步记录的文件名以及位点
CHANGE MASTER TO 
 master_host = 'localhost',
 master_user = 'db_sync',
 master_password = 'db_sync',
 master_log_file = 'mysql-bin.000002',
 master_log_pos = 154;
#启动同步
START SLAVE;

上述配置完成查看同步状态:
打开从库的控制台,也可以用MySQL客户端工具登录从库MySQL实例。
运行:show slave status

在这里插入图片描述
Slave_IO_Runing和Slave_SQL_Runing都为Yes说明同步成功,如果不为Yes,请检查error_log,然后排查相关异常。

注意 如果之前此备库已有主库指向 需要先执行以下命令清空
STOP SLAVE IO_THREAD FOR CHANNEL ‘’;
reset slave all;

测试

最后测试在主库修改数据库,看从库是否能够同步成功。
在主库的user_db数据库创建表、添加、删除数据,看从库数据是否同步成功。

同步异常的处理方法

出现不同步一定要查看mysql的error日志。
error日志默认在data目录
本教程中MySQL的error日志路径 如下
在这里插入图片描述

方法一:忽略错误后,继续同步

该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况。
操作如下:
登录从库MySQL控制台
stop slave;
#表示跳过一步错误,即当salve执行同步出错时跳过一定的错误数量继续同步后边的数据,后面的数字可以设置跳过的错误数量
set global sql_slave_skip_counter =1;
start slave;
执行 show slave status\G 查看同步状态,如果Slave_IO_Running和Slave_SQL_Running:都为Yes则表示同步成功。
如果还不同步可能同步错误操作不止1步,此时可以挑过多步。

方式二:重新做主从,完全同步

该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
解决步骤如下:
1.先进入主库,进行锁表,防止数据写入
使用命令:
mysql> flush tables with read lock;
注意:该处是锁定为只读状态,语句不区分大小写
2.进行数据备份
#把数据备份到mysql.bak.sql文件
[root@server01 mysql]#mysqldump -uroot -p -hlocalhost > mysql.bak.sql
3.把mysql备份文件传到从库机器,进行数据恢复
停止从库的状态
mysql> stop slave;
然后到从库执行mysql命令,导入数据备份
mysql> source mysql.bak.sql
4.重新设置主从同步
参考前边的步骤。

常见异常

The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593

主从MySQL下的数据(data)目录下有个文件auto.cnf,文件中定义了uuid,要保证主从数据库实例的uuid不一样,建议直接删除掉auto.cnf,重启服务后将会重新生成。
注意:主从的my.ini下的server_id配置必须不能一样。

找不到auto.cnf的位置就去mysql目录 搜索,搜索到auto.cnf则删除。
重启主、从数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值