基于docker实现MySQL数据库主从

本文详细介绍了如何在Docker环境下设置MySQL主从复制。通过使用Docker简化了部署过程,包括拉取镜像、启动容器、配置主从服务器、授权同步用户、故障排查等关键步骤。

基于Docker的Mysql主从复制搭建

为什么基于Docker搭建?

  • 资源有限

  • 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐

  • 一台机器上可以运行多个Docker容器

  • Docker容器之间相互独立,有独立ip,互不冲突

  • Docker使用步骤简便,启动容器在秒级别

利用Docker搭建主从服务器

首先拉取docker镜像,我们这里使用5.7版本的mysql:

docker pull mysql:5.7

然后使用此镜像启动容器,这里需要分别启动主从两个容器

Master(主):

docker run -p 3339:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Slave(从):

docker run -p 3340:3306 --name mymysql1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Master对外映射的端口是3339,Slave对外映射的端口是3340。因为docker容器是相互独立的,每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。

使用docker ps命令查看正在运行的容器:

docker ps

此时可以使用Navicat等工具测试连接mysql(显示连接成功)

 

 或者使用直接连接测试

# 测试连接
mysql -h172.20.10.2 -P3339 -uroot -p123456或./mysql -h172.20.10.2 -P3339 -uroot -p123456

配置Master(主)

通过docker exec -it 627a2368c865 /bin/bash命令进入到Mast

### 配置 MySQL 8.0.42 主从复制的 Docker 实现实现 MySQL 8.0.42 的主从复制,可以通过 Docker 启动两个容器分别作为主和从,并进行相应的配置。 #### 1. 创建主容器 首先创建一个用于主数据库的容器。需要设置必要的环境变量并挂载自定义配置文件,以启用二进制日志(binlog)以及 GTID 模式等关键功能: ```yaml version: '3' services: mysql-master: image: mysql:8.0.42 container_name: mysql-master environment: - MYSQL_ROOT_PASSWORD=master_password - MYSQL_REPLICATION_USER=replica_user - MYSQL_REPLICATION_PASSWORD=replica_password volumes: - ./master/data:/var/lib/mysql - ./master/conf.d:/etc/mysql/conf.d ports: - "3306:3306" restart: always ``` 在 `./master/conf.d` 中创建一个名为 `mysqld.cnf` 的配置文件,内容如下: ```ini [mysqld] server-id=1 log-bin=mysql-bin gtid_mode=ON enforce-gtid-consistency=true bind-address = 0.0.0.0 ``` #### 2. 创建从容器 接着创建从数据库容器,其结构与主类似,但需指定不同的 server-id 并开启只读模式: ```yaml mysql-slave: image: mysql:8.0.42 container_name: mysql-slave environment: - MYSQL_ROOT_PASSWORD=slave_password volumes: - ./slave/data:/var/lib/mysql - ./slave/conf.d:/etc/mysql/conf.d ports: - "3307:3306" restart: always ``` 同样,在 `./slave/conf.d` 中创建一个 `mysqld.cnf` 文件,内容为: ```ini [mysqld] server-id=2 read_only=1 gtid_mode=ON enforce-gtid-consistency=true bind-address = 0.0.0.0 ``` #### 3. 初始化主从同步 启动所有服务后,进入主容器执行以下命令来创建复制用户: ```bash docker exec -it mysql-master mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "CREATE USER '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD'; GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPLICATION_USER'@'%'; FLUSH PRIVILEGES;" ``` 然后切换到从容器,设置主连接信息并启动复制进程: ```bash docker exec -it mysql-slave mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_PORT=3306, MASTER_USER='$MYSQL_REPLICATION_USER', MASTER_PASSWORD='$MYSQL_REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1; START SLAVE;" ``` 确认主从复制状态是否正常运行: ```sql SHOW SLAVE STATUS\G ``` 确保输出中的 `Slave_IO_Running` 和 `Slave_SQL_Running` 字段值均为 Yes。 以上步骤基于提供的引用内容进行了整合[^3]。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值