准备环境
- 准备两台相同的mysql服务器,确保防火墙关闭或二者3306端口打开
(可以先创建一台虚拟机,部署好mysql后,再复制一份虚拟机)
配置主节点
- 创建一个同步用账号,并赋予相应权限
(为了方便,先设置密码复杂度限制为low)
用户名:info2soft 密码:info2soft
- 配置mysql
习惯上在修改配置文件的时候一般不能让数据在写入数据库中,目的是为了在启动的时候主从两个数据库数据一致,故将主数据库表上锁
mysql数据库中执行
mysql> flush tables with read lock;
锁好后,root用户执行
vi /etc/my.cnf
在文本最后插入以下两行内容
server-id=1
log-bin=mysql-bin
重新启动数据库
systemctl restart mysqld
再次进入数据库,检查是否配置成功
mysql-bin.000001日志文件,等会配置从数据库的时候需要这个名字,154是开始复制的位置(不同的服务器154可不同)
配置从节点
vi /etc/my.cnf
在文本最后插入以下一行内容
server-id=2
配置好后,重新启动数据库
systemctl restart mysqld
再次进入数据库,执行命令
192.168.31.98为主库ip
mysql> CHANGE MASTER TO master_host='192.168.2.98',master_port=3306,master_user="info2soft",master_password="info2soft",master_log_file='mysql-bin.000001',master_log_pos=154;
配置好后,重新启动数据库
systemctl restart mysqld
检查是否配置成功
show slave status\G
到此配置成功,释放主库的锁
如果是克隆的mysql服务器,此处会不成功,因为两个mysql库的uuid相同
解决方法看最后
unlock tables;
验证测试
主库新建数据库,看备库是否有数据
主库新建表,插入数据,备库查询
问题处理
如果是克隆的mysql服务器,此处会不成功,因为两个mysql库的uuid相同
解决问题思路:
- 找到mysql配置的这个文件/etc/my.cnf
- 在文件中找到mysql错误异常日志文件的路径,我配置的是log-error=/var/log/mysqld.log
- 编辑/var/log/mysqld.log文件
- 查看具体异常信息
由此看出,是由于两个库uuid相同导致
通过修改auto.cnf可解决
find -name auto.cnf
修改此文件的uuid号,随便改一个字符就行,保存,重启数据库即可,再进入数据库查询,正常
参考文章:
基于centos7下的MySQL主从复制(Master-Slave)实践,以及搭建
https://blog.csdn.net/zhaogangyyxf/article/details/79826550
mysql主从复制之异常解决--- Slave_IO_Running: NO
https://blog.csdn.net/weixin_40816738/article/details/100054450
Centos7下Mysql设置密码的验证强度等级及密码长度
https://blog.csdn.net/weixin_44110998/article/details/98106014