mysql主从复制

搭建

准备至少两台mysql 服务

此处使用docker 一个镜像 启动了两个 容器

详见https://www.jianshu.com/p/8a8fc0983b14

配置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插件和设置连接主服务的 配置 不一致
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容