说明:记录搭建MySQL主从结构时遇到的几个问题;
问题一:连接主节点失败
搭建完成后从节点查看状态如下:
错误:error connecting to master 'admin@主机IP' - retry-time: 60 retries: 712 message: Host '主机IP' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
解决:这是因为连接的错误次数过多,被主节点阻止连接了。需在主节点服务器上,执行下面的命令
mysqladmin -u root -p flush-hosts
输入密码,清除主机缓存
问题二:无法同步
主从搭建完成后,查看状态如下:
错误:ERROR No query specified
。说没有查询到内容。
解决:参考下面这篇文章,忘记在主节点配置里增加log-bin=mysql-bin
配置。
- https://blog.51cto.com/u_16213385/7248499
加上后,重启MySQL后就OK了。
问题三:没找到Binlog
查看从节点状态,如下:
错误:Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
解决:binlog文件名写错了,主节点的binlog文件名是mysql-bin.XXXXXX
,上图写的是binlog.XXXXXX
;
问题四:
我在尝试使用docker内的MySQL容器搭建主从从结构时,修改容器内配置文件后(参考:修改Docker容器内文件的三种方式),准备进入容器启动MySQL,报下面的错误;
说无法识别这个配置,我将配置项的横杠(-
)换成下划线(_
)也没用。然后我试下用Windows的CMD连接,如下:
mysql -u用户 -p密码 -h主机IP -P端口
注意上面后面-P
,是大写,表示端口号,和前面的密码区别开。可以看到连接时OK的,敲配置主节点的SQL也没问题;
但是开始同步后,查看状态,出现下面的错误;
错误:Fatal error: The replica I/O thread stops because source and replica have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on replica but this does not always make sense; please check the manual before using it).
说是节点设置了相同的服务ID
我反复确认后,怀疑是配置没有生效,然后对比了其他MySQL服务的配置文件,如下:
解决:server-id配置,要放在[mysqld]下面,我把这两项从节点的配置移到上面,[mysqld]下面后,重启MySQL容器,就没报错了。
然后基于两台服务器,与其中一台服务器的MySQL容器之间的主从从结构就搭建完成了。如下: