Docker-搭建MySQL主从复制与双主双从

news2025/6/3 0:40:42

Docker -- 搭建MySQL主从复制与双主双从

  • 一、MySQL主从复制
    • 1.1 准备工作
      • 从 Harbor 私有仓库拉取镜像
      • 直接拉取镜像
      • 运行容器
    • 1.2 配置主、从服务器
    • 1.3 创建主、从服务器
    • 1.4 启动主库,创建同步用户
    • 1.5 配置启动从库
    • 1.6 主从复制测试
  • 二、MySQL双主双从
    • 2.1 创建网络
    • 2.2 创建容器
    • 2.3 创建配置文件
    • 2.4 配置主主复制
      • 2.4.1 在 master 上配置
      • 2.4.2 配置 master1 复制 master2
      • 2.4.3 配置 master2 复制 master1
    • 2.5 配置从节点
      • 2.5.1 配置 slave1 复制 master1
      • 2.5.2 配置 slave2 复制 master2
    • 2.6 验证复制状态

主从复制是指 一台服务器充当数据库服务器另一台或多台服务器充当数据库服务器,主服务器中的数据自动复制到从服务器之中。

对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL 主从复制的基础是 主服务器对数据库修改记录二进制日志 ,从服务器通过主服务器的 二进制日志 自动执行更新

  • 主数据库(Master):负责处理写操作和更新数据,是业务操作的主要入口。
  • 从数据库(Slave):复制主数据库的数据,通常用于读操作和数据备份,以减轻主数据库的
    压力。
    在这里插入图片描述
  1. 记录主库更新的操作记录到二进制日志 binlog 中,通过 binlog dump线程发送给从库
    • 当主库发生更新事件(如UPDATE、INSERT、DELETE、CREATE)时,这些操作会被顺序地写入二进制日志(binlog)中
    • 主库会开启一个 binlog dump线程,负责将 binlog 日志中的事件发送给从库。
  2. 从库 IO 线程通过设置的主库的 slave 账号,连接到主库请求 binlog,并接收主库的binlog,写入到中断日志 relay log 中
    • 从库通过 IO 线程连接到主库,并请求 binlog 日志的内容。
    • 主库的 binlog dump 线程将 binlog 日志中的事件发送给从库的 IO 线程。
    • 从库的 IO 线程接收这些事件,并将其写入到从库的中继日志(relay log)中
  3. 从库 SQL 线程实时监控 relay log,读取、解析并执行 relay log 中的SQL语句,实现数据的同步。
    • 从库开启一个 SQL 线程,实时监控 relay log 的内容是否有更新。
    • SQL 线程解析 relay log 中的 SQL 语句,并在从库上执行这些语句,从而实现数据的同步

一、MySQL主从复制

1.1 准备工作

从 Harbor 私有仓库拉取镜像

首先虚拟机打开 harbor 虚拟机,浏览器登录进入到 harbor

在这里插入图片描述

  • 在 Harbor 私有仓库拉取镜像前提:
    1. 需要拉取镜像的虚拟机上配置 /etc/hosts文件,添加:
      harbor 主机 IP 地址 harbor.registry.com harbor
    2. 保证本主机 docker 的安装配置的正确性
    3. 拉取命令:
      docker pull harbor.registry.com/library/仓库内的镜像名称和版本

这里的 harbor.registry.com 来自于/etc/docker/daemon.json文件 “insecure-registries”: [“https://harbor.registry.com”]

[root@docker ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.86.20 harbor.registry.com harbor
[root@docker ~]# cat /etc/docker/daemon.json 
{
        "default-ipc-mode": "shareable",    
        "data-root": "/data/docker",        
        "exec-opts": ["native.cgroupdriver=systemd"],    
        "log-driver": "json-file",    
        "log-opts": {
                "max-size": "100m",
                "max-file": "50"
        },
        "insecure-registries": ["https://harbor.registry.com"],    
        "registry-mirrors":[    
                "https://docker.m.daocloud.io",
                "https://docker.imgdb.de",
                "https://docker-0.unsee.tech",
                "https://docker.hlmirror.com",
                "https://docker.1ms.run",
                "https://func.ink",
                "https://lispy.org",
                "https://docker.xiaogenban1993.com"
        ]
}
[root@docker ~]# systemctl restart docker

[root@docker ~]# systemctl restart docker
在 Harbor 私有仓库查看镜像版本
拉取命令:docker pull harbor.registry.com/library/mysql:9.3.0
在这里插入图片描述

[root@docker ~]# docker pull harbor.registry.com/library/mysql:9.3.0
9.3.0: Pulling from library/mysql
c2eb5d06bfea: Pull complete 
ba361f0ba5e7: Pull complete 
0e83af98b000: Pull complete 
770e931107be: Pull complete 
a2be1b721112: Pull complete 
68c594672ed3: Pull complete 
cfd201189145: Pull complete 
e9f009c5b388: Pull complete 
61a291920391: Pull complete 
c8604ede059a: Pull complete 
Digest: sha256:242c70430703dd27b3a0fcfa628368d165510a5867f20a9beb62f6036879bcf8
Status: Downloaded newer image for harbor.registry.com/library/mysql:9.3.0
harbor.registry.com/library/mysql:9.3.0

直接拉取镜像

[root@docker conf]# docker pull mysql:9.3.0
9.3.0: Pulling from library/mysql
c2eb5d06bfea: Pull complete 
ba361f0ba5e7: Pull complete 
0e83af98b000: Pull complete 
770e931107be: Pull complete 
a2be1b721112: Pull complete 
68c594672ed3: Pull complete 
cfd201189145: Pull complete 
e9f009c5b388: Pull complete 
61a291920391: Pull complete 
c8604ede059a: Pull complete 
Digest: sha256:2247f6d47a59e5fa30a27ddc2e183a3e6b05bc045e3d12f8d429532647f61358
Status: Downloaded newer image for mysql:9.3.0
docker.io/library/mysql:9.3.0

运行容器

[root@docker ~]# docker images
REPOSITORY                          TAG       IMAGE ID       CREATED       SIZE
harbor.registry.com/library/mysql   9.3.0     2c849dee4ca9   5 weeks ago   859MB
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@docker ~]# docker run --name mysql -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD="123456" harbor.registry.com/library/mysql:9.3.0 
f2bed716866881f1bb4cd1db02889d34f8faac25480367e02eb2bc4e55aabf83
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE                                     COMMAND                  CREATED         STATUS         PORTS                                                    NAMES
f2bed7168668   harbor.registry.com/library/mysql:9.3.0   "docker-entrypoint.s…"   3 seconds ago   Up 3 seconds   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   mysql
# 执行此命令可进入 MySQL
[root@docker ~]# docker exec -it mysql /bin/bash

1.2 配置主、从服务器

  1. 创建挂载数据目录
    /data/master/conf
    /data/slave/conf
  2. 创建配置文件
    my.cnf
# 1.创建挂载数据目录
[root@docker ~]# mkdir /data/master/conf -p
[root@docker ~]# mkdir /data/slave/conf -p

# 2.创建配置文件
#主:
[root@docker ~]# cd /data/master/conf/		#
[root@docker conf]# docker cp mysql:/etc/my.cnf .
Successfully copied 2.56kB to /data/master/conf/.
[root@docker conf]# ls
my.cnf

[root@docker conf]# vim my.cnf 
[root@docker conf]# cat my.cnf 
[mysqld]

server-id=1

host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

#从:
[root@docker conf]# cp my.cnf ../../slave/conf/
[root@docker conf]# vim /data/slave/conf/my.cnf 
[root@docker conf]# cat /data/slave/conf/my.cnf 
[mysqld]

server-id=2		#id改变

host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
  • my.cnf 文件内容:
[mysqld]
# mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2的32次方-1,默认为1
server-id=1

# 是否只读,1 代表当前服务器只读(不能做增删改操作), 0代表读写
read-only=0
host-cache-size=0

# 只能用IP地址检查客户端的登录,不用主机名
skip-name-resolve

# mysql数据文件所在位置
datadir=/var/lib/mysql

# 设置socke文件所在目录
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files

# 用户
user=mysql

# pid文件
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock
[root@docker ~]# docker stop mysql
mysql
[root@docker ~]# docker rm mysql 
mysql
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS                  PORTS 

1.3 创建主、从服务器

  1. 运行容器
    docker run -d
  2. 查看容器
    docker ps
# 1.运行容器
#主:
[root@docker ~]# docker run -d \
--name mysql-master \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/master/conf/my.cnf:/etc/my.cnf \
-p 3306:3306 \
harbor.registry.com/library/mysql:9.3.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
981cc5a3123d9db266efd8504d66ee553c29277521dba412437cbace074c5849

# 2.查看容器 
[root@docker ~]# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED         STATUS         PORTS                                                    NAMES
981cc5a3123d   harbor.registry.com/library/mysql:9.3.0   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   mysql-master
# 从:
[root@docker ~]# docker run -d \
--name mysql-slave \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/slave/conf/my.cnf:/etc/my.cnf \
-p 3307:3306 \
harbor.registry.com/library/mysql:9.3.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
895a1d40e66bbb1784cc275c01c30713550cd779340b61e75d7a3152198c1d50
[root@docker ~]# docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED         STATUS         PORTS                                                              NAMES
895a1d40e66b   harbor.registry.com/library/mysql:9.3.0   "docker-entrypoint.s…"   4 seconds ago   Up 4 seconds   3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp, [::]:3307->3307/tcp   mysql-slave
981cc5a3123d   harbor.registry.com/library/mysql:9.3.0   "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp             mysql-master
  • 运行容器命令:
    • –name 名字那里注意修改
    • -v 文件挂载路径注意修改
    • -p 注意端口冲突,后续服务器端口修改第一个端口号
docker run -d \		#daemon缩写,后台运行   \:连接符
--name mysql-master \	#取名字	注意 master
-e MYSQL_ROOT_PASSWORD=123456 \		#-e:指定密码
-v /data/master/conf/my.cnf:/etc/my.cnf \	#指定文件挂载		注意master与slave时文件路径切换
-p 3306:3306 \		#暴露端口	注意端口冲突,slave可改为3307,只改前面不改后面
# 如果是在harbor内拉取的则为:harbor.registry.com/library/mysql:9.3.0
harbor.registry.com/library/mysql:9.3.0 \		#指定容器的镜像
--character-set-server=utf8mb4 \	#指定编码格式
--collation-server=utf8mb4_unicode_ci

1.4 启动主库,创建同步用户

  1. 进入主服务器数据库
    docker exec -it mysql-master /bin/bash
    mysql uroot -p密码
    或者docker exec -it mysql-master mysql -uroot -p123456
  2. 创建专门用于复制的账户
    create user 'backups'@'%' identified by '123456';
  3. 授予此帐户复制所需的权限并刷新权限
    grant replication slave on *.* to 'backups'@'%';
    flush privileges;
  4. 确定当前二进制日志文件的名称和位置
    show binary log status;
    show binary log status\G
# 1.进入主服务器数据库
[root@docker ~]# docker exec -it mysql-master /bin/bash
bash-5.1# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 9.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.005 sec)

[root@docker ~]# docker exec -it mysql-master mysql -uroot -p123456
  1. 创建传门用于复制的账户
# 创建账户
mysql> create user 'backups'@'%' identified by '123456';
Query OK, 0 rows affected (0.013 sec)
  1. 授予此帐户复制所需的权限并刷新权限
mysql> grant replication slave on *.* to 'backups'@'%';
Query OK, 0 rows affected (0.004 sec)

mysql> flush privileges;
Query OK, 0 rows affected, 1 warning (0.003 sec)
  1. 确定当前二进制日志文件的名称和位置
mysql> show binary log status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 |      864 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.001 sec)
# 或者
mysql> show binary log status\G
*************************** 1. row ***************************
             File: binlog.000002
         Position: 864
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.000 sec)

记录一下 File 和 Position,在从库配置同步源的时候需要用到

# 主:
File: binlog.000002
Position: 862

1.5 配置启动从库

  1. 进入从服务器容器数据库
    docker exec -it mysql-slave /bin/bash
    mysql -uroot -p123456
  2. 配置 MySQL 主从复制
    CHANGE REPLICATION SOURCE TO \ SOURCE_HOST='192.168.98.140',SOURCE_USER='backups',SOURCE_PASSWORD='123456', \ SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=864, \ GET_SOURCE_PUBLIC_KEY=1;
    • 注意主服务器的 FILE 和 Position 值
  3. 执行语句开启同步
    start replica;
  4. 查看复制状态
    show replica status\G
    • 注意查看Replica_IO_Running: 、Replica_SQL_Running: 两值为 YES

配置启动从库流程:

  1. 进入从服务器容器数据库
[root@docker conf]# docker exec -it mysql-slave /bin/bash
bash-5.1# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
  1. 配置 MySQL 主从复制
mysql> CHANGE REPLICATION SOURCE TO \	#复制源,从主机'192.168.98.140',以及master主机的用户'backups'.....
    -> SOURCE_HOST='192.168.98.140',SOURCE_USER='backups',SOURCE_PASSWORD='123456', \
    -> SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=864, \	#主服务器的FILE 和Position
    -> GET_SOURCE_PUBLIC_KEY=1;
Query OK, 0 rows affected, 2 warnings (0.015 sec)
  1. 执行语句开启同步
# 开始复制/开始同步
mysql> start replica;
Query OK, 0 rows affected (0.102 sec)
  1. 查看复制状态
mysql> show replica status\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 192.168.98.140
                  Source_User: backups
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: binlog.000002
          Read_Source_Log_Pos: 864
               Relay_Log_File: ba94af67c5cd-relay-bin.000002
                Relay_Log_Pos: 325
        Relay_Source_Log_File: binlog.000002
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 864
              Relay_Log_Space: 543
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File: 
           Source_SSL_CA_Path: 
              Source_SSL_Cert: 
            Source_SSL_Cipher: 
               Source_SSL_Key: 
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Source_Server_Id: 1
                  Source_UUID: 830681c2-36f1-11f0-ac13-424aa25cd880
             Source_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
    Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Source_Retry_Count: 10
                  Source_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Source_SSL_Crl: 
           Source_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Source_TLS_Version: 
       Source_public_key_path: 
        Get_Source_public_key: 1
            Network_Namespace: 
1 row in set (0.000 sec)
  • MySQL 主从复制语句:
CHANGE REPLICATION SOURCE TO \
SOURCE_HOST='192.168.98.140',SOURCE_USER='backups',SOURCE_PASSWORD='123456', \
SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=864, \
GET_SOURCE_PUBLIC_KEY=1;

1.6 主从复制测试

  1. 在主服务器上创建库、表并插入数据
  2. 在从服务器上查看数据
  • 主服务器
# 主
mysql> create database my_db;
Query OK, 1 row affected (0.006 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_db              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.007 sec)

mysql> use my_db;
Database changed
mysql> create table t1(name varchar(5),sex varchar(2));
Query OK, 0 rows affected (0.013 sec)

mysql> desc t1;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| name  | varchar(5) | YES  |     | NULL    |       |
| sex   | varchar(2) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.008 sec)
mysql> insert into t1(name,sex) values('li','m');
Query OK, 1 row affected (0.002 sec)
mysql> select * from t1;
+------+------+
| name | sex  |
+------+------+
| li   | m    |
+------+------+
1 row in set (0.001 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_db              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.001 sec)

mysql> use my_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from t1;
+------+------+
| name | sex  |
+------+------+
| li   | m    |
+------+------+
1 row in set (0.000 sec)

二、MySQL双主双从

  • 直接拉取镜像
[root@docker conf]# docker pull mysql:9.3.0
9.3.0: Pulling from library/mysql
c2eb5d06bfea: Pull complete 
ba361f0ba5e7: Pull complete 
0e83af98b000: Pull complete 
770e931107be: Pull complete 
a2be1b721112: Pull complete 
68c594672ed3: Pull complete 
cfd201189145: Pull complete 
e9f009c5b388: Pull complete 
61a291920391: Pull complete 
c8604ede059a: Pull complete 
Digest: sha256:2247f6d47a59e5fa30a27ddc2e183a3e6b05bc045e3d12f8d429532647f61358
Status: Downloaded newer image for mysql:9.3.0
docker.io/library/mysql:9.3.0

2.1 创建网络

docker network create mysql-replication-net

2.2 创建容器

  • master1:
docker run -d \
--name master1 \
--network mysql-replication-net \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/master1.cnf:/etc/my.cnf \
-p 3306:3306 \
mysql:9.3.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
  • master2:
docker run -d \
--name master2 \
--network mysql-replication-net \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/master2.cnf:/etc/my.cnf \
-p 3307:3306 \
mysql:9.3.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
  • slave1:
docker run -d \
--name slave1 \
--network mysql-replication-net \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/slave1.cnf:/etc/my.cnf \
-p 3308:3306 \
mysql:9.3.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
  • slave2:
docker run -d \
--name slave1 \
--network mysql-replication-net \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/slave2.cnf:/etc/my.cnf \
-p 3309:3306 \
mysql:9.3.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

2.3 创建配置文件

[root@docker ~]# cd /data/master/conf/
[root@docker conf]# cp my.cnf /data/master1.cnf
[root@docker conf]# cp my.cnf /data/master2.cnf
[root@docker conf]# cp my.cnf /data/slave1.cnf
[root@docker conf]# cp my.cnf /data/slave2.cnf
[root@docker conf]# vim /data/master1.cnf 
[root@docker conf]# cat /data/master1.cnf 
[mysqld]
server-id=1

host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
[root@docker conf]# vim /data/master2.cnf 
[root@docker conf]# cat /data/master2.cnf 
[mysqld]
server-id=2

host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
[root@docker conf]# vim /data/slave1.cnf 
[root@docker conf]# cat /data/slave1.cnf 
[mysqld]
server-id=11

host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
[root@docker conf]# vim /data/slave2.cnf 
[root@docker conf]# cat /data/slave2.cnf 
[mysqld]
server-id=22

host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

2.4 配置主主复制

在两个主数据服务中创建用于复制/同步数据的用户

查看两个主数据库服务器中查看要同步的二进制文件及位置

记录这个显示中 file 和 position 的值,以便于从服务器进行复制。

2.4.1 在 master 上配置

  • master1 和 master2 执行下列命令
    1. 进入master容器
      docker exec -it mysql-master1 mysql -uroot -p123456
      docker exec -it mysql-master2 mysql -uroot -p123456
    2. 创建复制用户
      create user 'rep1'@'%' identified by '123456';
    3. 赋权限
      grant replication slave on *.* to 'rep1'@'%';
    4. 刷新
      flush privileges;
    5. 查看 master1 状态并记录 File 和 Position
      show binary log status\G
# 在两个主数据服务中创建用于复制/同步数据的用户
create user 'rep1'@'%' identified by '123456';
grant replication slave on *.* to 'rep1'@'%';
flush privileges;

# 查看两个主数据库服务器中查看要同步的二进制文件及位置
show binary log status\G;
#记录这个显示中 file 和 position 的值,以便于从服务器进行复制


2.4.2 配置 master1 复制 master2

  • 在 master1上执行:
    • 查看复制状态
      show replica status\G
    • 开始复制
      start replica;
# master1主数据库服务器同步master2主数据库:
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='master2',
SOURCE_USER='rep1',
SOURCE_PASSWORD='123456',
SOURCE_LOG_FILE='binlog.000003',	#master2的file
SOURCE_LOG_POS=864,		#master2的Position
GET_SOURCE_PUBLIC_KEY=1;

2.4.3 配置 master2 复制 master1

  • 在 master2上执行:
    • 查看复制状态
      show replica status\G
    • 开始复制
      start replica;
# master2同步master1:
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='master1',
SOURCE_USER='rep1',
SOURCE_PASSWORD='123456'
SOURCE_LOG_FILE='binlog.000003'SOURCE_LOG_POS=864,
GET_SOURCE_PUBLIC_KEY=1;


2.5 配置从节点

2.5.1 配置 slave1 复制 master1

  1. 进入 slave1 容器:
    docker exec -it mysql-slave1 mysql -uroot -p123456

  2. 配置复制

  3. 查看复制状态
    show replica status\G

  4. 开始复制
    start replica;

# slave1同步master1
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='master1',
SOURCE_USER='rep1',
SOURCE_PASSWORD='123456'
SOURCE_LOG_FILE='binlog.000003',
SOURCE_LOG_POS=864,
GET_SOURCE_PUBLIC_KEY=1;


2.5.2 配置 slave2 复制 master2

  1. 进入 slave2 容器:
    docker exec -it mysql-slave2 mysql -uroot -p123456

  2. 配置复制

  3. 查看复制状态
    show replica status\G

  4. 开始复制
    start replica;

# slave2同步master2
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='master2',
SOURCE_USER='rep1',
SOURCE_PASSWORD='123456'SOURCE_LOG_FILE='binlog.000003'
SOURCE_LOG_POS=864,
GET_SOURCE_PUBLIC_KEY=1;

2.6 验证复制状态

# 在每个节点上执行:
show replica status\G
#检查slave_IO_Running和Slave_SQL_Running是否为Yes。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2394959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

canvas 实现全屏倾斜重复水印

​ 参考&#xff1a; html、js、canvas实现水印_html页面使用canvas绘制重复水印-CSDN博客 效果 ​​​​ 不求水印显示完全。 实现代码 <template><div class"watermark" ref"waterMark"></div></template><script lang&q…

vue3项目 前端文件下载的两种工具函数

1、Blob 流下载 Blob 表示不可变的原始数据的类文件对象&#xff0c;通常用于处理文件或大块二进制数据。 注意&#xff1a;js中还有一个二进制数据类型ArrayBuffer&#xff0c;它们的区别如下 Blob 可以位于磁盘、高速缓存内存和其他不可用的位置&#xff1b;ArrayBuffer 是存…

5.31 day33

知识点回顾&#xff1a; PyTorch和cuda的安装 查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09; cuda的检查 简单神经网络的流程 数据预处理&#xff08;归一化、转换成张量&#xff09; 模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 定义损失函数和优…

HTML 计算网页的PPI

HTML 计算网页的PPI vscode上安装live server插件&#xff0c;可以实时看网页预览 有个疑问&#xff1a; 鸿蒙density是按照类别写死的吗&#xff0c;手机520dpi 折叠屏426dpi 平板360dpi <html lang"en" data - overlayscrollbars - initialize><header&…

MMR-Mamba:基于 Mamba 和空间频率信息融合的多模态 MRI 重建|文献速递-深度学习医疗AI最新文献

Title 题目 MMR-Mamba: Multi-modal MRI reconstruction with Mamba and spatial-frequency information fusion MMR-Mamba&#xff1a;基于 Mamba 和空间频率信息融合的多模态 MRI 重建 01 文献速递介绍 磁共振成像&#xff08;MRI&#xff09;因其无创、无辐射特性以及…

2.5/Q2,Charls最新文章解读

文章题目&#xff1a;Trajectories of depressive symptoms and risk of chronic liver disease: evidence from CHARLS DOI&#xff1a;10.1186/s12876-025-03943-7 中文标题&#xff1a;抑郁症状的轨迹和慢性肝病风险&#xff1a;来自 CHARLS 的证据 发表杂志&#xff1a;BM…

Unity QFramework 简介

目录 什么是MVC模式&#xff1f; QFramework 架构提供了 Model 的概念 QFramework 架构引入 Command 的方式 QFramework 架构引入 Event事件机制 四个层&#xff1a;表现层、系统层、数据层、工具层 委托和回调函数的关系 命令和事件的区别 工具篇 QFramework整体基于M…

C++ 日志系统实战第五步:日志器的设计

全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的项目笔记吧~ 本文项目代码编写收尾&#xff01; 日志器类 (Logger) 设计&#xff08;建造者模式&#xff09; 日志器主要用于和前端交互。当我们需要使用日志系统打印 log 时&…

性能测试-jmeter实战1

课程&#xff1a;B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战1 为什么需要性能测试呢&#xff1f;性能测试的作用&#xff1f;性能测试体系性能测试基础性能测试工具性能监控…

杏仁海棠花饼的学习日记第十四天CSS

一&#xff0c;前言 第二天&#xff0c;今天看CSS。 二&#xff0c;CSS简介及导入方式 CSS简介 CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种用于描述 HTML 或 XML&#xff08;包括 SVG、XHTML 等&#xff09;文档呈现效果的样式语言。…

ESP8266远程控制:实现网络通信与设备控制

概述&#xff1a; 最近一直在弄esp8266的网络通信&#xff0c;但是一直都还没搞懂到底esp8266可不可以通过连接一个网络过后&#xff0c;在很远的地方使用网络将其关掉 在网上找了两个教程都有程序&#xff0c;都跑通了 第一个 第二个找不到了&#xff0c;但是程序有 CSDN上放文…

【机器学习基础】机器学习入门核心算法:隐马尔可夫模型 (HMM)

机器学习入门核心算法&#xff1a;隐马尔可夫模型 &#xff08;HMM&#xff09; 一、算法逻辑与核心思想二、算法原理与数学推导核心问题与算法推导 三、模型评估四、应用案例1. 语音识别 (Speech Recognition)2. 自然语言处理 (Natural Language Processing - NLP)3. 手写体识…

Leetcode 2819. 购买巧克力后的最小相对损失

1.题目基本信息 1.1.题目描述 现给定一个整数数组 prices&#xff0c;表示巧克力的价格&#xff1b;以及一个二维整数数组 queries&#xff0c;其中 queries[i] [ki, mi]。 Alice 和 Bob 去买巧克力&#xff0c;Alice 提出了一种付款方式&#xff0c;而 Bob 同意了。 对于…

AI炼丹日志-25 - OpenAI 开源的编码助手 Codex 上手指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇&#xff1a; MyBatis 更新完毕目前开始更新 Spring&#xff0c;一起深入浅出&#xff01; 大数据篇 300&#xff1a; Hadoop&…

C# 类和继承(使用基类的引用)

使用基类的引用 派生类的实例由基类的实例和派生类新增的成员组成。派生类的引用指向整个类对象&#xff0c;包括 基类部分。 如果有一个派生类对象的引用&#xff0c;就可以获取该对象基类部分的引用&#xff08;使用类型转换运算符把 该引用转换为基类类型&#xff09;。类…

进程间通信(消息队列)

目录 一 原理 二 API 1. ftok 2. msgget 3. msgctl 4. msgsnd 5. msgrcv 三 demo代码 四 基于责任链模式和消息队列对数据处理 1. 什么是责任链模式 2. 下面基于责任链模式来对消息队列获取的消息进行处理 前置 其实system v 版本的进程间通信&#xff0c;设计的接…

Nginx--手写脚本压缩和切分日志(也适用于docker)

原文网址&#xff1a;Nginx--手写脚本压缩和切分日志&#xff08;也适用于docker&#xff09;_IT利刃出鞘的博客-CSDN博客 简介 本文介绍nginx如何手写脚本压缩和切分日志。 1.创建切分日志的脚本 创建脚本文件&#xff1a;/work/tmp/nginx-log_sh&#xff08;后边要用run-…

OpenCv高阶(十八)——dlib人脸检测与识别

文章目录 一、dlib库是什么&#xff1f;二、opencv库与dlib库的优缺点对比1、opencv优缺点2、dlib库优缺点 三、dlib库的安装1、在线安装2、本地安装 四、dlib库的人脸检测器1. 基于 HOG 的检测器2. 基于 CNN 的检测器 五、dlib人脸检测的简单使用1、导入必要库2、初始化人脸检…

中山大学无人机具身导航新突破!FlightGPT:迈向通用性和可解释性的无人机视觉语言导航

作者&#xff1a;Hengxing Cai 1 , 2 ^{1,2} 1,2, Jinhan Dong 2 , 3 ^{2,3} 2,3, Jingjun Tan 1 ^{1} 1, Jingcheng Deng 4 ^{4} 4, Sihang Li 2 ^{2} 2, Zhifeng Gao 2 ^{2} 2, Haidong Wang 1 ^{1} 1, Zicheng Su 5 ^{5} 5, Agachai Sumalee 6 ^{6} 6, Renxin Zhong 1 ^{1} …

WIN11+CUDA11.8+VS2019配置BundleFusion

参考&#xff1a; BundleFusion:VS2019 2017 ,CUDA11.5,win11&#xff0c;Realsense D435i离线数据包跑通&#xff0c;环境搭建 - 知乎 Win10VS2017CUDA10.1环境下配置BundleFusion - 知乎 BundleFusionWIN11VS2019 CUDA11.7环境配置-CSDN博客 我的环境&#xff1a;Win 11…