mysql8.0设置主从复制
1、确保端口能远程连接
- 修改安全组规则,3306
- 或者直接关闭防火墙(去Linux文档找)原文链接:CentOS 7关闭防火墙命令_centos7关闭防火墙命令-CSDN博客
2、配置 主
1.修改配置
vi /etc/my.cnf
[mysqld]
## 同一局域网内注意要唯一 ,新建数据库默认id是1,主从两个不重复就行
server-id=100
## 开启二进制日志功能,可以随便取(关键),默认就有,名字就是mysql-bin
log-bin=mysql-bin
## 需要同步的数据库
binlog_do_db = 需要同步的数据库
## 不需要同步的数据库,多个用逗号隔开
binlog_ignore_db = mysql
2.重启使配置生效
service mysqld restart
3.创建从服务器连接用户
mysql -uroot -p
# 创建从用户
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave@2024';
# 授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 也可以直接用所有权限,但是是不规范的,只能测试用
grant all on *.* to 'zhenxu'@'%';
4.查看binlog文件
# 查看当前正在写入的binlog文件
show master status;
# 记录File 和 Position 的值,并不要进行update deleted 等操作,以免引起position 的变化
3、配置 从
1.修改配置
vi /etc/my.cnf
[mysqld]
# 同一局域网内注意要唯一 ,新建数据库默认id是1,主从两个不重复就行
server-id=101
# 开启二进制日志功能,以备Slave作为其它Slave的Master时使用,默认就有log-bin,改个名字
log-bin=mysql-slave-bin
# relay_log配置中继日志
relay_log=edu-mysql-relay-bin
2.重启使配置生效
service mysqld restart
3.设置主服务器
change master to master_host='192.168.0.120',master_user='slave',master_password='slave@2024',master_port=3306,master_log_file='mysql-bin.000017',master_log_pos=6259,master_connect_retry=30;
ps:参数说明
参数 | 说明 |
---|---|
master_host | 主 地址 |
master_user | 用于数据同步的用户 |
master_password | 用于同步的用户的密码 |
master_port | 主 端口号 |
master_log_file | 指定 Slave 从哪个日志文件开始复制数据(主show master status命令后的File) |
master_log_pos | 从哪个 Position 开始读(主show master status命令后的Position) |
master_connect_retry | 单位秒,默认60,连接失败重试的时间 |
4.开启主从复制
查看主从复制状态:
show slave status \G;
此时SlaveIORunning 和 SlaveSQLRunning 都是No
开启主从复制:
start slave;
再次查看同步状态SlaveIORunning 和 SlaveSQLRunning 应都是Yes
5.主从复制相关命令:
# 停止主从复制
stop slave;
# 重置从库的复制状态,需先停止
reset slave;
4、失败原因
失败原因执行 show slave status \G; 后会在Slave_SQL_Running_State(应该是,忘了具体那个了)显示。
SlaveIORunning一直是Connecting(我遇到的):
(1)密码输错了(主从复制相关命令执行后再设置主服务器)
(2)网络不通(我是防火墙的原因,由于是虚拟机,直接关闭了防火墙)
其他原因(网络搜索到的):
(1)pos不对,检查Master的Position
(2)mysql8特有的密码规则问题引起