Mysql主从同步
以192.168.99.109(主)和192.168.99.110(从)两机测试
一,主服务器
① 设置主服务器防火墙
以win10为列:
设置->网络和Internet->windows防火墙->高级设置->入站规则&出站规则(分别新建)->新建规则
->端口->TCP & 特定本地端口 3306->允许链接->名称mysqlport->完成
②配置my.ini或my.conf --- 既mysql配置文件
;实时同步配置 log-bin=C:/mysql/loges
;本机id(通常以本机ip尾数命名,所有主从不能存在相同) server-id=109 ;需要备份的数据库名,如果备份多个数据库,重复设置这个选项 即可(此次以test数据库为例) binlog-do-db = test ;以下参数虽然不知道是什么,但是参考了很多资料有填写的 ;这个参数一定要加上,否则不会给更新的记录些到二进制文件 里 log-slave-updates=1 ;每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去 innodb_flush_log_at_trx_commit=1 ;跳过错误,继续执行复制操作(可选) slave-skip-errors=1 ;主服务器最重要的设置是sync_binlog,使每次提交事务时把二进制日志内容同步到磁盘,即使服务器崩溃也会 sync_binlog= 1 binlog_checksum=crc32 ;混合模式复制 binlog_format=MIXED ;binlog过期清理时间 expire_logs_days=7 ;binlog每个日志文件大小 max_binlog_size=20M ;禁止域名解析,根据日志错误决定是否打开此项,本人报错因此打开了 ;skip-name-resolve
③ 重启sql server
④ mysql命令行
1.创建slave等级用户( grant replication slave ,replication client on *.* to '用户名'@'slave从ip,%为通配符表示任意' identified by "密码"; )
mysql> grant replication slave ,replication client on *.* to 'rep'@'192.168.99.%' identified by "111";
2. 清空日志索引文件
mysql> reset slave;
1. 锁表,锁定数据库为只读,确保数据一致性
mysql>flush tables with read lock;
2. 查看主机状态
mysql> show master status;
记录下file字段,和position字段(我的值为:file->loges.000004 pos->154)
4.前去配置从服务器
5.最后开锁
mysql> unlock tables;
二,从服务器
①按照之前一样设置防火墙
②配置配置my.ini或my.conf
server-id=110 log-bin="C:/mysql/loges" sync_binlog=1 replicate-do-db=test replicate-wild-do-table=test.% slave-skip-errors=all slave-net-timeout=60 ;混合模式复制 binlog_format=MIXED ;binlog过期清理时间 xpire_logs_days=7 ;binlog每个日志文件大小 max_binlog_size=20M ;skip-name-resolve
③重启sql server
④ mysql命令行
mysql> reset slave;
mysql> stop slave;
以下分别为:主机ip,用户,密码,之前查询的master status->file & position
mysql> CHANGE MASTER TO
->MASTER_HOST='192.168.99.109',
->MASTER_USER='rep',
->MASTER_PASSWORD='111',
->MASTER_LOG_FILE='loges.000004',
->MASTER_LOG_POS=154;
mysql>start slave;
mysql> show slave status;
打印slave状态
其中Slave_IO_Runing和Slave_SQL_Runing状态均为YES则开启同步成功
* Slave_IO_Runing:connecting 可能情况主从服务器ping不通,可能是change master to参数有误(其他未遇到过)
三 ,如果不能同步,则分别查看主从服务器sql日志,进行排错