Mysql主从同步

以192.168.99.109(主)和192.168.99.110(从)两机测试

一,主服务器

  ① 设置主服务器防火墙

    以win10为列:

      设置->网络和Internet->windows防火墙->高级设置->入站规则&出站规则(分别新建)->新建规则

              ->端口->TCP & 特定本地端口 3306->允许链接->名称mysqlport->完成

  ②配置my.inimy.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日志,进行排错

原文地址:https://www.cnblogs.com/wannian/p/10058699.html