ch3.ng

Mysql主从复制


MySQL 复制是一个允许数据同时从一台服务器复制到另一台服务器的过程。 主要是为了增加数据的可用性。 选择 MySQL 主从复制的主要原因之一是数据恢复。 在发生任何灾难或硬件故障的情况下,MySQL 复制可确保始终存在准确的备份。

本文主要针对一主一从进行配置,我们利用docker-compose快捷进行生成mysql5.7实例。

配置mysql容器

version: "3.9"
services:
  m1:
    image: mysql:5.7.38
    container_name: m1
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dev
    volumes:
      - /home/Cheng/docker/mysql/m1/conf:/etc/mysql/conf.d
    ports:
      - 3306:3306

  s1:
    image: mysql:5.7.38
    container_name: s1
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dev
    volumes:
      - /home/Cheng/docker/mysql/s1/conf:/etc/mysql/conf.d
    ports:
      - 3307:3306
~                                                                                                                       
~                                                                                                                                

master

在*/home/Cheng/docker/mysql/m1/conf创建文件mysql.cnf*内容为:

[mysqld]
#Server ID,一般设置成IP地址的最后一位
server_id=20
#开启log bin,名字最好有意义用来区分
log-bin=dev-bin
#需要进行复制的数据库,可以指定数据库,这里我注释掉不用
binlog-do-db=dev
#不需要备份的数据库,可以设置多个数据库,一般不会同步mysql这个库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1m
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

备注:请根据你的实际情况替换目录

slave

在*/home/Cheng/docker/mysql/s1/conf创建文件mysql.cnf*内容为:

server_id=10
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=dev-relay-bin
read_only=1

备注:请根据你的实际情况替换目录

启动容器

使用下面命令启动两个容器;

sudo docker-compose -f mysql.yaml up -d

查看启动是否正常

配置账户

master

首先我们进入主服务器创建专门用于主从复制的账号;

  1. 进入容器

    sudo docker exec -it m1 bash
    
  2. 进入mysql cansole

    mysql -uroot -proot
    
  3. 创建账号

    grant replication slave, replication client on *.* to 'repl'@'%' identified by 'repl';
    
    flush privileges;
    
  4. 查看主服务运行状态

    show master status \G
    

slave

  1. 进入容器

    sudo docker exec -it s1 bash
    
  2. 进入mysql cansole

    mysql -uroot -proot
    
  3. 配置复制信息并开启服务

    change master to master_host='192.168.1.117',master_user='repl',master_password='repl',master_port=3306,master_log_file='dev-bin.000003',master_log_pos=1435,master_connect_retry=30;
    
    # 开启服务
    start slave
    
    
  4. 查看运行状态

    show slave status;
    

    a

备注:注意图中红色部分

如果有错误可以在下面查看错误信息。

准备数据库和表

在主从服务起中,请创建dev数据库,store表,注意两个库中的表结构要一致。

接下来便可以在主服务中插入数据,在从服务器中进行查看是否完成了复制。