docker实现mysql主从复制(巨详细!!!)
- 新建主机服务容器实例3307
- 进入/mydata/mysql-master/conf目录下新建my.cnf
- 修改完配置后重启master实例
- 进入mysql-master容器
- master容器实例内创建数据同步用户
- 新建 服务器容器实例3308
- 进入/mydata/mysql-slave/conf目录新建my.cnf
- 修改完配置后重启slave实例
- 在主数据库中查看同步状态
- 进入mysql-slave容器
- 在从数据库中配置主从
- 在从数据库中查看主从同步状态
- 在从数据库中开启主从同步
- 查看从数据库状态发现已经同步
- 主从复制测试
新建主机服务容器实例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’ 的用户,并授予该用户复制从库和复制客户端的权限。具体命令含义如下:
-
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
-
CREATE USER
: 创建一个新用户。 -
'slave'@'%'
: 用户名和允许连接的主机。在这里,用户名为 ‘slave’,‘%’ 表示允许从任何主机连接。 -
IDENTIFIED BY '123456'
: 设置用户的密码为 ‘123456’。
-
-
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文章来源:https://uudwc.com/A/pjay8
文章来源地址https://uudwc.com/A/pjay8