搭建
准备至少两台mysql 服务
此处使用docker 一个镜像 启动了两个 容器
配置mysql配置文件
- 主:
添加
# 服务的唯一编号
server-id = 1
# 开启mysql binlog功能
log-bin = mysql-bin
- 从:
添加
# 服务的唯一编号
server-id = 2
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
- 配置完成后 重启服务
在主服务器执行sql
# 创建一个专门为复制服务的用户。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 分配权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
> 8.0以后必须 分开执行
flush privileges;
查看主服务状态
FLUSH TABLES WITH READ LOCK;
show master status;
FILE POSITION
mysql-bin.000003 908 "" "" ""
设置连接主服务器的信息(从服务器中)
如果使用默认的插件:caching_sha2_password
change master to
master_host ='172.17.0.2',
master_user ='slave',
master_password ='123456',
master_port =3306,
master_log_file ='mysql-bin.000003',
master_log_pos = 908,
MASTER_SSL=1,
master_connect_retry =30;
如果使用MySQL5.7 的插件:mysql_native_password
CHANGE MASTER TO
MASTER_HOST='172.17.0.2',
MASTER_USER='slave',
MASTER_PASSWORD='12345678',
MASTER_LOG_FILE='mysql-log-bin.000009',
MASTER_LOG_POS=1302;
》 master_port 为 主服务 position
》 master_log_file 对应主服务 file
如果使用(8.0+)默认的插件:caching_sha2_password
必须有 MASTER_SSL=1;
我们也可以使用MySQL5.7 的默认身份认证插件:mysql_native_password
指定插件即可:
CREATE USER 'my_slave'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';
ALTER USER 'my_slave'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';
命令说明:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
启动slave线程
mysql> start slave;
检查
mysql> show slave status
以下两项都为yes 即为成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
FAQ
Q:
Slave_IO_Running: connecting
或
Slave_IO_Running: no
A:
1. 首先查看 错误日志
show slave status 中有错误日志
2. 常见出问题可能
检查防火墙
查看主从服务器 server_id 是否一致
检查position 和 file 是否一致
使用的password插件和设置连接主服务的 配置 不一致
网友评论