---
title: 配置从库
description: "1. 创建同步用户（为主从切换做准备）。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysqlmasterslave_03_0020.html
sourcePath: /source/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysqlmasterslave_03_0020.html
indexId: 37528b6645f582912e1f9f617f55a68f6404762a4ace128428287d204e177a7c80
---
# 配置从库

1. 创建同步用户（为主从切换做准备）。

  a. 登录从库。
    1 /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock

  b. 建立一个连接账号（用户名是replicate，密码是123456），为该连接账号授予replication slave权限，刷新权限。
    1 2 3 create user 'replicate'@'%' identified by '123456'; grant replication slave on *.* to 'replicate'@'%'; flush privileges;

  c. 查看用户。
    1 select user,host from mysql.user;

  d. 退出从库。
    1 exit

2. 修改从库的配置文件。

  - 场景一：全库复制。

    a. 修改从库1的配置文件。

      1. 打开“/etc/my.cnf”文件。
        1 vim /etc/my.cnf

      2. 按“i”进入编辑模式，在[mysqld]下添加如下内容，参数server-id、log-bin和relay_log的含义参见        表1
。

```
[mysqld]
server-id=2
log-bin=/data/mysql/data/mysql-bin
relay_log=/data/mysql/relaylog/relay-bin
```


      3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
    b. 修改从库2的配置文件。

      1. 打开“/etc/my.cnf”文件。
        1 vim /etc/my.cnf

      2. 按“i”进入编辑模式，在[mysqld]下添加如下内容，参数server-id、log-bin和relay_log的含义参见        表1
。

```
[mysqld]
server-id=3
log-bin=/data/mysql/data/mysql-bin
relay_log=/data/mysql/relaylog/relay-bin
```


      3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  - 场景二：部分复制。
例如同步test库，不同步mysql库、information_schema库和performance_schema库。

    a. 修改从库1的配置文件。

      1. 打开“/etc/my.cnf”文件。
        1 vim /etc/my.cnf

      2. 按“i”进入编辑模式，在[mysqld]下添加如下内容，参数server-id、log-bin和relay_log的含义参见        表1
。

```
[mysqld]
server-id=2
log-bin=/data/mysql/data/mysql-bin
relay_log=/data/mysql/relaylog/relay-bin
replicate-do-db=test
replicate-ignore-db=mysql,information_schema,performance_schema
```


      3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
    b. 修改从库2的配置文件。

      1. 打开“/etc/my.cnf”文件。
        1 vim /etc/my.cnf

      2. 按“i”进入编辑模式，在[mysqld]下添加如下内容，参数server-id、log-bin和relay_log的含义参见        表1
。

```
[mysqld]
server-id=3
log-bin=/data/mysql/data/mysql-bin
relay_log=/data/mysql/relaylog/relay-bin
replicate-do-db=test
replicate-ignore-db=mysql,information_schema,performance_schema
```


      3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
- 在不考虑主从切换的情况下，主库的配置文件中添加log-bin参数，从库的配置文件中添加relay_log参数。
- 在考虑主从切换的情况下，主库的配置文件中添加log-bin和relay_log参数，从库的配置文件中添加log-bin和relay_log参数。


3. 重启MySQL服务。

  a. 重启MySQL服务。
    1 service mysql restart

    或者

    1 2 /usr/local/mysql/bin/mysqladmin -uroot -p123456 shutdown -S /data/mysql/run/mysql.sock /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

  b. 查看数据库进程和端口号。
    1 2 ps -ef | grep mysql netstat -anpt | grep mysql

4. 启动半同步复制。

  a. 登录从库。
    1 /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock

  b. 安装半同步复制插件rpl。
    1 install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

    查看插件rpl。

    1 show plugins;

  c. 启动半同步复制。
    1 set global rpl_semi_sync_slave_enabled=1;

  d. 查看半同步复制是否启动成功。
    1 show variables like '%rpl_semi_sync_slave_enabled%';

    值为ON说明启动成功。

    关闭半同步复制（先关主库，再关从库），则变成异步复制。 主库执行如下命令，关闭半同步复制。 1 2 set global rpl_semi_sync_master_enabled=0; show variables like '%rpl_semi_sync_master_enabled%'; 从库执行如下命令，关闭半同步复制。 1 2 set global rpl_semi_sync_slave_enabled=0; show variables like '%rpl_semi_sync_slave_enabled%';

5. 配置同步方式。

  a. 登录从库。
    1 /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock

  b. 配置同步。
同步方式有两种方式：传统方式和GTID方式。MySQL版本在5.7及以上时推荐使用GTID方式。

    - 传统方式配置如下，主库与从库配置保持一致：
      1 2 3 4 5 set global enforce_gtid_consistency='off'; set global gtid_mode='on_permissive'; set global gtid_mode='off_permissive'; set global gtid_mode='off'; show variables like '%gtid_mode%';


    - GTID方式配置如下，主库与从库配置保持一致：
      1 2 3 4 5 set global enforce_gtid_consistency='on'; set global gtid_mode='off_permissive'; set global gtid_mode='on_permissive'; set global gtid_mode='on'; show variables like '%gtid_mode%';

6. 建立主从关系（根据5的同步方式选择）。
  - 传统方式配置如下，需要指定binlog文件和位置：
    1 change master to master_host='192.168.220.58',master_port=3306,master_user='replicate',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=155;


  - GTID方式配置如下：
    1 change master to master_host='192.168.220.58',master_port=3306,master_user='replicate',master_password='123456',master_auto_position=1;

第一次部署主从复制的时候需要执行change master命令指定主库以及同步方式，以后在不改变主库的情况下不用执行change master命令。而且主从复制建立成功后，重启主从数据库后（主库和从库重启无先后顺序）会自动建立主从复制，分别登录主库和从库查看状态是否正常即可。


7. 启动从库。
  1 start slave;

  停止从库。 1 stop slave;

8. 查看从库状态。

  a. 执行以下命令。
    1 show slave status\G;

    下面两项值均为Yes，表示从库启动成功。

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    如果Last_IO_Error报错“The slave I/O thread stops because master and slave have equal MySQL server UUIDs......”，参考查看MySQL主从复制状态时提示The slave I/O thread stops的解决方法解决后，重新查看从库状态。

  b. 退出从库。
    1 exit

9. 登录主库查看从库信息。
  1 2 /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock show slave hosts;

  如果Host列为空，请参见校验MySQL主从数据一致性时提示no slaves were found的解决方法解决。
