Docker 的安装可参考这篇文章:Linux 安装 Docker;这里的主从复制是基于 GTID(Glbal Transation Identifier)全局事务标识符的。GTID 是 MySQL 5.6 新加入的一项技术,GTID 是完全基于事务的,不支持 MYISAM 存储引擎

Step 1:拉取镜像

docker pull mysql:5.7.40

Step 2:创建主 MySQL 容器

  • 创建挂载挂载目录以及 MySQL 配置文件
mkdir -p /usr/local/mysql/data /usr/local/mysql/logs /usr/local/mysql/conf
touch /usr/local/mysql/conf/my.cnf
  • 主 my.cnf 配置内容
[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
character-set-server=utf8mb4
default-time-zone='+08:00'
max_connections=1024
max_connect_errors=10
default-storage-engine=INNODB
lower_case_table_names = 1
server-id=10
log-bin=/var/log/mysql/binlog
explicit_defaults_for_timestamp=true
# GTID 全局事务配置
gtid-mode=on
log-slave-updates=1
enforce-gtid-consistency

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4
  • 启动
docker run -p 3306:3306 \
    --name mysql \
    --restart=always \
    -e MYSQL_ROOT_PASSWORD=Hwtech8888 \
    -v /usr/local/mysql/conf:/etc/mysql/conf.d \
    -v /usr/local/mysql/logs:/var/log/mysql \
    -v /usr/local/mysql/data:/var/lib/mysql \
    -e TZ=Asia/Shanghai \
    -d mysql:5.7.40

Step 3:主 MySQL 配置

  • 进入容器内部
docker exec -it mysql bash

mysql -p
# 输入密码
  • 创建同步账号
create user 'slave'@'%' identified by 'Hwtech8888';
grant replication slave on *.* to 'slave'@'%';
flush privileges;
  • 设置只读模式
# 避免在此期间有数据变化
set @@global.read_only=ON;

Step 4:创建从 MySQL 容器

我这里用了两台服务器,如果是同一台服务器,主要更改文件夹以及端口号

步骤同上,从 my.cnf 配置内容

[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
character-set-server=utf8mb4
default-time-zone='+08:00'
max_connections=1024
max_connect_errors=100
default-storage-engine=INNODB
lower_case_table_names = 1
server-id=100
log-bin=/var/log/mysql/binlog
relay-log=/var/log/mysql/relay-log
explicit_defaults_for_timestamp=true
# GTID 全局事务配置
gtid-mode=on
log-slave-updates=1
enforce-gtid-consistency
skip-slave-start

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4
  • 启动
docker run -p 3306:3306 \
    --name mysql \
    --restart=always \
    -e MYSQL_ROOT_PASSWORD=Hwtech8888 \
    -v /usr/local/mysql/conf:/etc/mysql/conf.d \
    -v /usr/local/mysql/logs:/var/log/mysql \
    -v /usr/local/mysql/data:/var/lib/mysql \
    -e TZ=Asia/Shanghai \
    -d mysql:5.7.40

Step 5:从 MySQL 配置

  • 进入容器内部
docker exec -it mysql bash

mysql -p
# 输入密码
  • 配置主服务监听
change master to 
    master_host='101.201.233.67',
    master_user='slave',
    master_password='Hwtech8888',
    master_port=10000,
    master_auto_position=1
  • 启动数据同步
start slave;

show slave status\G;

原文地址:http://www.cnblogs.com/chaosmoor/p/16910273.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性