以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的数据写入logfile,并且flush(刷到磁盘)中去
innodb_flush_log_at_trx_commit=1;跳过错误,继续执行复制操作(可选)
slave-skip-errors=1;主服务器最重要的设置是sync_binlog,使每次提交事务时把二进制日志内容同步到磁盘,即使服务器崩溃也会
sync_binlog=1binlog_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=testreplicate-wild-do-table=test.%slave-skip-errors=allslave-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日志,进行排错