使用Docker部署MySQL 5.7&8.0主从集群的方法步骤

 更新时间:2019年03月21日 14:46:32   作者:Anoyi  
这篇文章主要介绍了使用Docker部署MySQL 5.7&8.0主从集群的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

> 部署 MySQL 5.7 集群 master & slave (仅测试用)

镜像版本 5.7

1、创建 overlay 网络

docker network create --driver overlay common-network --attachable

2、编辑两个配置文件 master.cnf 与 slave.cnf

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
log-bin=mysql-bin
server-id=1
gtid-mode=ON
enforce-gtid-consistency=ON
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
server-id=2
gtid-mode=ON
enforce-gtid-consistency=ON

3、启动 2 个 MYSQL:mysql-master 、mysql-slave

docker run -d \
--name mysql-master \
--network common-network \
-e MYSQL_ROOT_PASSWORD=Passw0rd \
-v `pwd`/master.cnf:/etc/mysql/my.cnf \
-p 3306:3306 \
-d mysql:5.7
docker run -d \
--name mysql-slave \
--network common-network \
-e MYSQL_ROOT_PASSWORD=Passw0rd \
-v `pwd`/slave.cnf:/etc/mysql/my.cnf \
-p 3307:3306 \
-d mysql:5.7

4、添加从库用于复制的用户

docker run -it --rm --network common-network mysql mysql -hmysql-master -uroot -pPassw0rd \
-e "CREATE USER 'repl'@'%' IDENTIFIED BY 'password' REQUIRE SSL; " \
-e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';"

5、连接 master & slave

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -pPassw0rd \
-e "CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1, MASTER_SSL=1;" \
-e "START SLAVE;"

6、验证 slave 状态

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -pPassw0rd -e "show slave status\G"

如下状态为正常:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

> 部署 MySQL 8.0 集群 master & slave(仅测试用)

镜像版本 mysql:8.0

1、创建 overlay 网络

docker network create --driver overlay common-network --attachable

2、启动 2 个 MYSQL:mysql-master 、mysql-slave

docker run -d \
--name mysql-master \
--network common-network \
-e MYSQL_ROOT_PASSWORD=Passw0rd \
-p 3306:3306 \
-d mysql --default-authentication-plugin=mysql_native_password
docker run -d \
--name mysql-slave \
--network common-network \
-e MYSQL_ROOT_PASSWORD=Passw0rd \
-p 3307:3306 \
-d mysql --default-authentication-plugin=mysql_native_password

3、配置 master & slave

docker run -it --rm --network common-network mysql mysql -hmysql-master -uroot -pPassw0rd \
-e "SET PERSIST server_id=1;" \
-e "SET PERSIST_ONLY gtid_mode=ON;" \
-e "SET PERSIST_ONLY enforce_gtid_consistency=true; " \
-e "CREATE USER 'repl'@'%' IDENTIFIED BY 'password' REQUIRE SSL; " \
-e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';"
docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -pPassw0rd \
-e "SET PERSIST server_id=2;" \
-e "SET PERSIST_ONLY gtid_mode=ON;" \
-e "SET PERSIST_ONLY enforce_gtid_consistency=true; "

4、重启 master & slave

docker restart mysql-master mysql-slave

5、连接 master & slave

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -pPassw0rd \
-e "CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1, MASTER_SSL=1;" \
-e "START SLAVE;"

6、验证 slave 状态

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -pPassw0rd -e "show slave status\G"

如下状态为正常:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

> 验证数据同步

在 master 创建数据库 anoyi

docker run -it --rm --network common-network mysql mysql -hmysql-master -uroot -pPassw0rd \
 -e "create database anoyi default character set utf8mb4 collate utf8mb4_general_ci;"

在 slave 查看数据库列表

docker run -it --rm --network common-network mysql mysql -hmysql-slave -uroot -pPassw0rd \
 -e "show databases;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database      |
+--------------------+
| anoyi       |
| information_schema |
| mysql       |
| performance_schema |
| sys        |
+--------------------+

相关资料:

mysql 5.7: https://dev.mysql.com/doc/refman/5.7/en/replication.html
mysql 8.0: https://dev.mysql.com/doc/refman/8.0/en/replication.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Docker容器如何更新打包并上传到阿里云

    Docker容器如何更新打包并上传到阿里云

    这篇文章主要介绍了Docker容器如何更新打包并上传到阿里云,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • docker如何在一个容器内部署多个服务

    docker如何在一个容器内部署多个服务

    这篇文章主要介绍了docker如何在一个容器内部署多个服务,思路是这样的首先拿到你的httpd,以及你的springBoot,合并他们的Dockerfile,然后打包,然后启动的时候启动多个端口(httpd的端口和你服务的端口),需要的朋友可以参考下
    2024-01-01
  • docker配置国内源全过程

    docker配置国内源全过程

    这篇文章主要介绍了docker配置国内源全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • docker目录和本地目录互通的实现

    docker目录和本地目录互通的实现

    本文介绍了如何实现Docker目录和本地目录互通,通过这种方式,可以轻松地在Docker容器和本地文件系统之间共享数据,感兴趣的可以了解一下
    2023-08-08
  • 使用Docker配置redis sentinel哨兵的方法步骤

    使用Docker配置redis sentinel哨兵的方法步骤

    本文主要介绍了Docker配置redis sentinel哨兵的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Docker常见命令介绍

    Docker常见命令介绍

    这篇文章介绍了Docker中的常见命令,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Docker创建本地镜像实现方法解析

    Docker创建本地镜像实现方法解析

    这篇文章主要介绍了Docker创建本地镜像实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • docker镜像仓库常用命令分享

    docker镜像仓库常用命令分享

    这篇文章主要介绍了docker镜像仓库常用命令,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • yum下载docker安装包安装到离线机器的实例代码详解

    yum下载docker安装包安装到离线机器的实例代码详解

    本文通过实例代码给大家介绍了yum下载docker安装包,安装到离线机器,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • Docker中Cgroup资源配置的实现

    Docker中Cgroup资源配置的实现

    Cgroup不仅可以限制被namespace 隔离起来的资源,还可以为资源设置权重、计算使用量、操控进程启停等,本文主要介绍了Docker中Cgroup资源配置的实现,感兴趣的可以了解一下
    2023-09-09

最新评论