MySQL主从复制配置

MySQL主从复制配置

本文主要介绍MySQL的主从复制配置,准备环境如下:

  • CentOS 7.0
  • Docker 1.18
  • MySQL 5.7.21官方镜像

注:以上环境非必须,可以使用windows或linux下已有mysql均可


下载镜像

  • 搜索官方镜像
    docker search mysql
    MySQL主从复制配置_第1张图片
  • 下载镜像
    docker pull mysql:5.7.21
    MySQL主从复制配置_第2张图片

启动mysql容器

  • 启动master(主库)
    docker run -d -p 3307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=root mysql:5.7.21
    其中mysql服务端口映射至主机3307,容器名称为mysql-master,密码设为root
    这里写图片描述
  • 启动slave(从库)
    docker run -d -p 3308:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=root mysql:5.7.21

开启远程连接权限(非必须)

mysql镜像默认是开启了远程登录权限的,若存在例外则需要进行此步骤。此处以mysql-mater为例,mysql-slave同此设置即可
- 进入mysql-master容器
docker exec -it mysql-master /bin/bash
或者
docker exec -it mysql-master mysql -uroot -p
这里我们采用第一种,因为下一步还需要修改配置文件
- 开启远程连接权限
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;

修改mysql配置文件

mysql镜像中的默认的配置文件为/etc/mysql/mysql.conf.d/mysqld.cnf,根据需要配置其参数即可。这里我们主要配置主从复制相关参数

配置主库

  • 修改配置,在配置文件的[mysqld]下添加如下内容
server-id=1 #采用自然数,保持唯一即可
read-only=0 #0代表读写均可
binlog-do-db=test-copy #代表需要进行同步的数据库
binlog-ignore-db=mysql #不同步的数据库
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
log-bin=mysql-bin #二进制日志
  • 配置同步的从库,并查看主库状态
    grant replication slave on *.* to [email protected] identified by 'root';
    show master status;
    MySQL主从复制配置_第3张图片
    注:需记住FilePosition,配置从库时会用到

配置从库

  • 修改配置,在配置文件的[mysqld]下添加如下内容
server-id=2
read-only=1
replicate-do-db=test-copy
replicate-do-db=test-copy 
replicate-ignore-db=mysql 
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
  • 设置主库信息
    change master to master_host='10.10.12.223',master_port=3307,master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=448;
    其中master_log_file='mysql-bin.000001',master_log_pos=448为主库状态中的FilePosition字段值
  • 启动并查看从库状态
    start slave;
    show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.10.12.223
                  Master_User: root
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 448
               Relay_Log_File: bdd71ee99899-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: test-copy,test-copy
          Replicate_Ignore_DB: mysql,sys,information_schema,performance_schema
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 448
              Relay_Log_Space: 534
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 62b09d15-3eba-11e8-b91d-0242ac110003
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

其中Slave_IO_RunningSlave_SQL_Running均为Yes代表配置成功

测试主从复制

主库新建test-copy(与前面配置文件中要同步的数据库名一致)数据库
MySQL主从复制配置_第4张图片
新建完成后,刷新从库,从库也会存在test-copy数据库,代表主从复制配置成功,之后主库的读写操作均会同步至从库
MySQL主从复制配置_第5张图片

注意事项

  • 如果需要进行同步的数据库A已经存在且有一定数据量,则配置完成主从复制后,需要将数据库A完全备份至从库中,才能完成之后的同步操作
  • Slave_IO_RunningSlave_SQL_Running出现字段值为no的情况,则需要先stop slave;后重新执行change master命令
  • Slave_IO_RunningSlave_SQL_Running出现字段值为Connecting,则需要检查change master命令中的master_log_posmaster_password是否正确,以及网络是否正常

你可能感兴趣的:(MySQL,Linux,Docker)