mysql如何实现双主复制?我们用docker来个做实践。

本文详细介绍了如何使用Docker和docker-compose搭建并配置MySQL的主主复制环境,包括创建容器、设置复制关系、测试验证等步骤。
摘要由CSDN通过智能技术生成

前言

昨天写了一篇关于mysql主从复制的文章,今天我们来讲讲主主复制。

前期准备,需要安装好docker、docker-compose的运行环境。

docker运行mysql容器,如何实现主从复制?-CSDN博客

一、运行mysql容器

1、创建mysql目录,执行如下命令。

mkdir -p /docker/mysql-mm
cd /docker/mysql-mm

2、编写yaml文件,执行如下命令。version替换成自己的compose版本;数据库密码重新设定新密码。如果需要多台从机则自行添加相应内容。

version: '2.2.2'
services:
  mysql-mm-1:
    image: mysql:8.0
    container_name: mysql-mm-1
    command: --server-id=1 --log-bin=mysql-bin --binlog-do-db=mydb --binlog-ignore-db=mysql --sync-binlog=1 --log-slave-updates=1 --auto-increment-increment=2 --auto-increment-offset=1
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=123456.
    networks:
      - dbnet

  mysql-mm-2:
    image: mysql:8.0
    container_name: mysql-mm-2
    command: --server-id=2 --log-bin=mysql-bin --binlog-do-db=mydb --binlog-ignore-db=mysql --sync-binlog=1 --log-slave-updates=1 --auto-increment-increment=2 --auto-increment-offset=2
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=123456.
    networks:
      - dbnet

networks:
  dbnet:
    name: dbnet
    driver: bridge

 3、启动服务,执行如下命令。

docker-compose up -d

4、检查服务是否正常启动,执行如下命令。

docker-compose ps -a

正常启动会返回如下内容。

5、至此mysql容器已正常运行,接下来进行mysql主机配置。

二、配置mysql

1、新开两个窗口,分别进入mysql容器,执行如下命令。

# 进入主机1容器
docker exec -ti mysql-mm-1 bash

# 进入主机2容器
docker exec -ti mysql-mm-2 bash

2、登录mysql,两个容器都需要执行如下命令,输入第一步的时候配置的密码。

mysql -uroot -p

3、给两个mysql服务器创建账号用于复制,执行如下SQL,需要替换成自己的账号密码。

# 创建账号&密码
CREATE USER 'repl_ayzen'@'%' IDENTIFIED BY 'repl_123456.';
# 给用户授权
GRANT REPLICATION SLAVE ON *.* TO 'repl_ayzen'@'%';
# 刷新权限
FLUSH PRIVILEGES;

4、分别在主机1、主机2查看服务器的二进制日志状态,执行如下SQL。

SHOW MASTER STATUS;

正常会返回如下内容,需要记住File、Position,用于配置从机的时候使用。

上图为mysql-mm-1的二进制日志状态。

上图为mysql-mm-2的二进制日志状态。

5、配置主机1复制,执行如下SQL,填写的是主机2的二进制日志信息

CHANGE MASTER TO  
MASTER_HOST='mysql-mm-2',  
MASTER_USER='repl_ayzen',  
MASTER_PASSWORD='repl_123456.',  
MASTER_LOG_FILE='mysql-bin.000003',  
MASTER_LOG_POS=2010;

6、启动主机1的复制,执行如下SQL。

start slave;

7、检查主机1的复制状态,执行如下SQL。

show slave status\G;

正常会返回如下内容。

查看 Master_Log_File 和 Read_Master_Log_Pos 的值是否为刚刚配置的值。

查看 Slave_IO_Running 和 Slave_SQL_Running 的值是否都为 Yes。如果是,那么主机1正在正常地从主机2复制数据。

8、同样的方式配置主机2复制,执行如下SQL,填写的是主机1的二进制日志信息

CHANGE MASTER TO  
MASTER_HOST='mysql-mm-1',  
MASTER_USER='repl_ayzen',  
MASTER_PASSWORD='repl_123456.',  
MASTER_LOG_FILE='mysql-bin.000003',  
MASTER_LOG_POS=2000;

9、同样的方式开启复制,查看状态,执行如下SQL。

start slave;
show slave status\G;

正常会返回如下内容。

查看 Master_Log_File 和 Read_Master_Log_Pos 的值是否为刚刚配置的值。

查看 Slave_IO_Running 和 Slave_SQL_Running 的值是否都为 Yes。如果是,那么主机2正在正常地从主机1复制数据。

10、至此,双主机的配置也已经完成,接下来就是进行测试验证。

三、测试验证

1、在主机1上创建数据库,执行如下SQL,然后在主机2上检查是否有同步。

create database mydb;

 2、在主机2上创建用户表users,执行如下SQL,然后在主机1上检查是否有同步。

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL
);

3、在主机1上给users表插入数据,执行如下SQL,然后在主机2上检查是否有同步。

insert into users(name,age) values('ayzen',18);

4、在主机2上修改users表数据,执行如下SQL,然后在主机1上检查是否有同步。

update users set age=20 where id=1 limit 1;

5、在主机1上删除users表数据,执行如下SQL,然后在主机2上检查是否有同步。

delete from users where id=1 limit 1;

6、小结,mysql双主复制的配置已完成并且验证OK。

总结

使用docker运行mysql容器并且配置双主复制,简单来说就三个步骤。

1、安装运行mysql容器;

2、配置两台mysql主机,创建账号,获取状态,启动服务器复制;

3、双主数据库的测试验证;

本人能力有限,还有许多不足之处还望多多指教,谢谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ayzen1988

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值