docker实现mysql主从复制(巨详细!!!)

新建主机服务容器实例3307

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

这段代码是用于在 Docker 中启动一个名为 mysql-master 的 MySQL 5.7 数据库容器的命令,并将其映射到主机的 3307 端口。具体参数含义如下:

  • docker run: Docker 命令,用于创建并启动 Docker 容器。
  • -p 3307:3306: 将 Docker 容器的 3306 端口映射到主机的 3307 端口。
  • --name mysql-master: 为 Docker 容器指定一个名称。
  • -v /mydata/mysql-master/log:/var/log/mysql: 将主机上的目录 /mydata/mysql-master/log 挂载到 Docker 容器的 /var/log/mysql 目录,用于容器中数据库日志文件的存放。
  • -v /mydata/mysql-master/data:/var/lib/mysql: 将主机上的目录 /mydata/mysql-master/data 挂载到 Docker 容器的 /var/lib/mysql 目录,用于容器中数据库文件的存放。
  • -v /mydata/mysql-master/conf:/etc/mysql: 将主机上的目录 /mydata/mysql-master/conf 挂载到 Docker 容器的 /etc/mysql 目录,用于容器中 MySQL 配置文件的存放。
  • `-e MYSQL_ROOT_PASSWORD=root: 设置容器中 MySQL 数据库的 root 用户密码为 root。
  • -d mysql:5.7: 使用 Docker Hub 中的 mysql:5.7 镜像创建容器,并以后台方式运行。

综合上述参数,该命令会创建一个名为 mysql-master 的 MySQL 5.7 数据库容器,并将其映射到主机的 3307 端口,同时将容器中数据库的日志文件、数据文件和配置文件挂载到主机上指定的目录。容器中的 MySQL 数据库的 root 用户密码将被设置为 ROOT。该命令在后台运行,并返回容器的 ID。

进入/mydata/mysql-master/conf目录下新建my.cnf

cd /mydata/mysql-master/conf
vim my.cnf

[mysqld]
##同一局域网中需要唯一
server_id=101
##指定不需要同步的数据库每个in成
binlogn-ignore-db=mysql
##开启二进制日志功能
log_bin=mall-mysql-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
##二进制过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或之慈宁宫类型的错误,避免slave端复制中断
##如:1062错误是指一些主键重复,1032是指因为主从数据库数据不一致
slave_skip_errors=1062

修改完配置后重启master实例

docker restart mysql_master

进入mysql-master容器

docker exec -it mysql_master /bin/bash
mysql-uroot-proot
  • mysql:启动 MySQL 客户端程序。
  • -uroot:指定连接的用户名为 root。
  • -proot:指定连接的密码为 root。

master容器实例内创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*TO 'slave'@'%';

这是两个 MySQL 数据库命令用于创建一个名为 ‘slave’ 的用户,并授予该用户复制从库和复制客户端的权限。具体命令含义如下:

  1. CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    • CREATE USER: 创建一个新用户。
    • 'slave'@'%': 用户名和允许连接的主机。在这里,用户名为 ‘slave’,‘%’ 表示允许从任何主机连接。
    • IDENTIFIED BY '123456': 设置用户的密码为 ‘123456’。
  2. GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    • GRANT: 授予权限给指定用户。
    • REPLICATION SLAVE, REPLICATION CLIENT: 授予复制从库和复制客户端的权限。
    • *.*: 要授权的数据库和表。在这里,*.* 表示所有数据库和表。
    • TO 'slave'@'%': 授予权限的用户和允许连接的主机。

综合上述命令,第一个命令创建了一个名为 ‘slave’ 的用户,并设置其密码为 ‘123456’,允许从任何主机连接。第二个命令给该用户授予了复制从库和复制客户端的权限,并对所有数据库和表进行授权。这样,用户 ‘slave’ 就可以作为一个复制从库连接到 MySQL 主服务器,并进行数据复制操作。

新建 服务器容器实例3308

docker run -p 3308:3306 --name mysql_slave \
-v /mydata/mysql_slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

进入/mydata/mysql-slave/conf目录新建my.cnf

cd /mydata/mysql-slave/conf
vim my.cnf

[mysqld]
##设置server_id,同一局域网需要唯一
server_id=102
##指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能,以备slave作为其他数据库实例的master时使用
log-bin=mall-mysql-slave1-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志模式(mixed,statement,row)
binlog_format=mixed
##二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或制动类型的错误,避免slave端复制中断
##如:1062错误是指一下主键重复,1032错误是因为主从数据不一致
slave_skip_errors=1062
##relay_log配置中继日志
relay_log=mall-mysql-relay-bin
##log_slave_updates表示slave将表示复制事件写进自己的二进制日志
log_slave_updates=1
##slave设置为只读(具有super权限的用户除外)
read_only-1

修改完配置后重启slave实例

docker restart mysql-slave

在主数据库中查看同步状态

show master status;

进入mysql-slave容器

docker exec -it mysql-slave /bin/bsh
mysql -uroot -proot

在从数据库中配置主从

change master to master_host='宿主机ip',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin,000001',master_log_pos=617,master_connect_retry=30;
  • CHANGE MASTER TO`:指定要修改主从复制配置。
  • MASTER_HOST='宿主机ip':设置主服务器的 IP 地址(或主机名)。
  • MASTER_USER='slave':设置主服务器的用户名。
  • MASTER_PASSWORD='123456':设置主服务器的密码。
  • MASTER_PORT=3307:设置主服务器的端口号。
  • MASTER_LOG_FILE='mall-mysql-bin.000001':设置主服务器的二进制日志文件名。
  • MASTER_LOG_POS=617:设置主服务器的二进制日志位置。
  • MASTER_CONNECT_RETRY=30:设置从服务器重试连接主服务器的间隔时间(单位:秒)。

通过执行这个命令,可以将从服务器配置为连接到指定的主服务器,并使用指定的凭据进行认证和复制操作。请确保替换 '宿主机ip''slave''123456''mall-mysql-bin.000001'617 为正确的主服务器信息。

在从数据库中查看主从同步状态

show slave status \G;

在这里插入图片描述

在从数据库中开启主从同步

start slave;

查看从数据库状态发现已经同步

在这里插入图片描述

主从复制测试

主机新建库-使用库-新建表-插入数据,ok
在这里插入图片描述

从机使用库-查看记录,ok

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49750432/article/details/133252679