当前位置:   article > 正文

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

docker compose mysql 双主配置

前言

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

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

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

一、运行mysql容器

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

  1. mkdir -p /docker/mysql-mm
  2. cd /docker/mysql-mm

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

  1. version: '2.2.2'
  2. services:
  3. mysql-mm-1:
  4. image: mysql:8.0
  5. container_name: mysql-mm-1
  6. 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
  7. restart: always
  8. environment:
  9. - MYSQL_ROOT_PASSWORD=123456.
  10. networks:
  11. - dbnet
  12. mysql-mm-2:
  13. image: mysql:8.0
  14. container_name: mysql-mm-2
  15. 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
  16. restart: always
  17. environment:
  18. - MYSQL_ROOT_PASSWORD=123456.
  19. networks:
  20. - dbnet
  21. networks:
  22. dbnet:
  23. name: dbnet
  24. driver: bridge

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

docker-compose up -d

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

docker-compose ps -a

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

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

二、配置mysql

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

  1. # 进入主机1容器
  2. docker exec -ti mysql-mm-1 bash
  3. # 进入主机2容器
  4. docker exec -ti mysql-mm-2 bash

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

mysql -uroot -p

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

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

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

SHOW MASTER STATUS;

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

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

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

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

  1. CHANGE MASTER TO
  2. MASTER_HOST='mysql-mm-2',
  3. MASTER_USER='repl_ayzen',
  4. MASTER_PASSWORD='repl_123456.',
  5. MASTER_LOG_FILE='mysql-bin.000003',
  6. 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的二进制日志信息

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

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

  1. start slave;
  2. 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上检查是否有同步。

  1. CREATE TABLE IF NOT EXISTS users (
  2. id INT AUTO_INCREMENT PRIMARY KEY,
  3. name VARCHAR(255) NOT NULL,
  4. age INT NOT NULL
  5. );

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、双主数据库的测试验证;

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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号