Mysql主从复制

搭建

准备至少两台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插件和设置连接主服务的 配置 不一致

你可能感兴趣的:(mysql,分布式,mysql,数据库)