Windows下的mysql5.7主从复制

实验环境:
主机为测试环境服务器,已有数据,版本为5.7.22
从机为电脑物理本机,版本5.7.26
先将数据同步

主从步骤:
主:mysql>flush table with read locak; #上全局读锁
mysql>unlock tables; #释放全局读锁

C:\ProgramData\MySQL\MySQL Server 5.7\my.ini (修改my.ini,此为默认路径,根据实际情况修改)
[mysqld]
log-bin=mysql-bin #启动binlog日志,只写日志名,日志文件默认在data下
binlog_format=“ROW” #查询过默认为ROW模式,保险起见还是加上
sync-binlog=1 #使binlog在每N次binlog写入后与硬盘同步(未实验)
expire_logs_days=1 #1天时间自动清理二进制日志(未实验)
server-id=1 #重要
binlog_do_db=blockchain_trade #指定要同步的数据库,建议加上,(如果省略,默认操作整个mysql)
#binlog_ignore_db=mysql #指定不要同步的数据库,如果指定了binlog-do-db就不用再指定该项
autocommit=1 #设置提交方式(自动提交)
transaction-isolation = READ-COMMITTED #隔离级别(读已提交)
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
#STRICT_TRANS_TABLES在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制
#NO_ENGINE_SUBSTITUTION如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常。
重启mysql并登陆
mysql>grant replication slave,replication client on . to ‘slave’@’%’ identified by ‘123’;
replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
(经测试有这条权限就可以实现主从复制了,后面那条具体作用暂未知)
replication client :拥有此权限,可以复制客户端数据信息
mysql>flush privileges;
mysql>select user,host from mysql.user; #(查询是否创建成功)
mysql>show master status \G; #(显示主服务器的状态信息,并且找到File 和 Position 的值记录下来;)

从:my.ini文件
[mysqld]
server_id=2 #指定唯一的ID,2至32,必须的,并且不能跟主数据库一样
relay_log=relay-log #需要设置(已测试,如不设置,依旧会生成中继日志,不过日志名为计算机名)
replicate_do_db=blockchain_trade #指定要同步的数据库
#replicate_ignore_db=mysql #指定不要同步的数据库
重启数据库
C:\Windows\system32>mysql -h192.168.1.7 -P3066 -uslave -p123 #检测主机数据库账号是否能够使用
mysql>CHANGE MASTER TO
MASTER_HOST=‘103.134.140.226’,
MASTER_USER=‘slave’,
MASTER_PASSWORD=‘1’,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘mysql-bin.000001’,
MASTER_LOG_POS=610;

mysql>start slave;
mysql>show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes #IO线程和SQL线程均为Yes则成功

Slave_IO_Running: Connecting #IO线程起不来问题
1.网络不通
2.账户密码错误
3.防火墙
4.mysql配置文件问题
5.连接服务器时语法
6.主服务器mysql权限
排了一下午错,网络可PING通,账号密码远程可登陆也就没问题,防火墙均已关闭,
mysql配置文件检查server-id,log-bin,指定要同步的数据库等配置均没问题,
后来发现每次CHANGE MASTER TO以后主机的pos节点都会发生变化(重启Mysql也会产生变化),
所以又重上了全局锁(先前只在导出数据时上了锁,个人觉得应该从导出数据开始一直全局锁,
直到主从成功再解开),依旧未解决问题。
最后发现是CHANGE MASTER TO里的语句IP那行引号里面多了一个空格。。。
个人目前经验,抛开防火墙和网络问题以外IO线程出问题基本都是CHANGE MASTER TO那里写错了,
重点检查那里,而写错并不会报错,只会IO一直为Connecting或为NO。
重写CHANGE MASTER TO前记得stop slave

my.ini文件参数中文注释

猜你喜欢

转载自blog.csdn.net/qq_44697035/article/details/93589537