-
Mysql主从复制是MySql数据库自带的功能,是多台Mysql数据库(salve, 从库 )从另一台MySql数据库(master,主库)进行日志复制再解析并应用到自身,最终实现从库的数据和主库的数据保持一致。
-
. 配置主库(master)
- 修改Mysql数据库配置文件/etc/my.cnf
[mysqld]
log-bin=mysql-bin #启用二进制日志
server-id=101 #服务器唯一ID
- 重启mysql服务
systemctl restart mysqld
- 登录mysql创建一个用户,并授予该用户 REPLICATION SLAVE 权限,用于建立复制时所用,slave必须被master授权具有该权限的用户,才能通过该用户复制。
grant replication slave on *.* to '用户名'@'%' identified by '密码';
flush privileges;
如果报错,密码强度低,不符合安全策略
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
修改mysql密码安全策略之后再创建用户
set global validate_password_policy=0;
set global validate_password_length=1;
- 查看mysql(master)的状态,记录File 和 Position的值,配置从库需要用。执行此操作后不要执行任何操作!!!
show master status;
- 配置从库(slave)
- 修改/etc/my.cnf配置文件
[mysqld]
server-id=102 #服务器唯一ID
- 重启mysql服务
systemctl restart mysqld
- 登录mysql执行
change master to master_host='主机master的IP',master_user='创建的账户',master_password='密码',master_log_file='主库的Filed字段值',master_log_pos=主库的Position字段值;
4. 启动slave
start slave;
注意:如果是克隆的mysql可能会报错
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
因为主从mysql的uuid相同,需要修改从库uuid,与主库不一样即可。
查看mysql的位置
show variables like 'datadir';
修改uuid
vi /var/lib/mysql/auto.cnf
- 之后重启mysql服务,一切正常!
systemctl restart mysqld
- 测试主从复制
- 在主库master中新建一个数据库,从库slave也会出现同样的数据库。
建表插入数据也ok