1、配置MySQL主库
在Linux环境下安装好MySQL后(安装请参考原创:Linux环境下,安装jdk、tomcat、mysql、redis以及项目部署),
修改MySQL主库的配置文件 /etc/my.cnf
vim /etc/my.conf
在my.conf中添加如下配置:
[mysqld]
log-bin=mysql-bin #必须启用二进制日志
server-id=100 # MySQL服务器的唯一id
注:服务器的id随意配置,但一定要能唯一地标识一个MySQL服务
修改配置后,需要重启MySQL服务并登录:
systemctl restart mysqld
mysql -uroot -p123456
主库授予从库可以访问的配置信息,用户名为cloneRoot
,密码为Root@123456
grant replication slave on *.* to 'cloneRoot'@'%' identified by 'Root@123456';
# 主库执行该命令后,一定不要再执行其他命令,避免后续从库 从主库获取授权时出现参数不一致的情况
show master status;
注意:给从库授权的密码不能太简单,不然会报错:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
,或者执行如下两个设置参数的命令:
# 设置密码的安全等级和密码的最短有效长度
set global validate_password_policy=LOW
set global validate_password_length=4;
2、配置从库
同对主库的操作,来修改MySQL从库的配置文件 /etc/my.cnf,
[mysqld]
server-id=101 # MySQL服务器的唯一id
重启从库的mysql服务,并登录mysql(我配置的密码为123456):
systemctl restart mysqld
mysql -uroot -p123456
change master to master_host='192.168.40.144',master_user='cloneRoot',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=442;
注意:master_user、master_password是前面主库执行grant replication slave on *.* to 'cloneRoot'@'%' identified by 'Root@123456';
命令来授予从库的,master_log_file、master_log_pos是主库执行show master status;
命令得到。
如上,从库的配置就已完成,可以在从库通过show slave status;
命令来查看从库信息。
显示的从库信息看起来比较凌乱,可以复制粘贴到Navicat或Sqlyog等工具中查看。
3、排错说明
从库所在虚拟机 我是直接由 主库所在的虚拟机克隆而来的,因此,会出现从库和主库的mysql服务UUID相同的错误情况。
也还可以分别在从库和主库输入show variables like '%server_uuid%';
命令来查看。
4、解决办法
退出mysql的命令行,修改mysql从库服务器的uuuid的值,需要保证本主库和主库及其他从库的uuid不一样。
# 查看auto.cnf文件的位置,找到并编辑auto.cnf
find -name auto.cnf
vim ./var/lib/mysql/auto.cnf
再重启MySQL服务,mysql -uroot -p123456
登录查看server_uuid
,
如果主从库的server_uuid
还是一样,可以考虑下面的方案:
分别在从库和主库所在的虚拟机中,删除/var/lib/mysql/auto.cnf
,命令如下:
rm -rf /var/lib/mysql/auto.cnf
如此,server_uuid
就不一样了,
并且可以通过show slave status\G
可以看到
Slave_IO_Running
和Slave_SQL_Running
的值 都是yes,如此,就可以进行主从复制有关操作了(即修改主库,从库也会跟着修改,保持和主库数据一致)。
解决方案参考:主从复制报错Fatal error:The slave I/O thread stops because master and slave have equal MySQL server UUIDs;
,