写点什么

【愚公系列】2022 年 03 月 Docker 容器 Mysql 主从复制的搭建

作者:愚公搬代码
  • 2022 年 3 月 18 日
  • 本文字数:1805 字

    阅读完需:约 6 分钟

前言

系统环境:


  • window11 企业版

  • mysql8.0+

  • docker

  • vm 虚拟机

一、Mysql 主从复制的搭建

1.拉取镜像

docker pull mysql
复制代码



二、MYSQL 主服务的配置

因为本人 3306 已经有本地的 mysql,容器内的 mysql 端口设置 33306


docker run --name mysql_master -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql0ad6b529bfbceda875b4af88788c1b6d4d29916095203755294d60cd922dda7a
复制代码




1.查询容器运行状态

如下图所示代表运行成功


docker ps -a
复制代码


2.使用 Navicat 连接测试

3.创建主数据库的复制账号

3.1 创建用户

//创建用户create user 'slave'@'%' identified with mysql_native_password by 'Mslave#q818';
复制代码

3.2 授予用户权限

grant replication slave on *.* to 'slave'@'%';//授权后刷下授权表flush privileges;
复制代码

3.3 查看用户权限

show grants for 'slave'@'%';
复制代码


如下代表成功


3.4 修改 MySQL 配置文件

进入 mysql 主服务器


docker exec -it 8b71301f25ed /bin/bash     //8b71301f25ed为容器IDdocker exec -it mysql-master /bin/bash     //mysql-master为容器名称
复制代码


切换到 /etc/mysql 目录下


cd /etc/mysql
复制代码


安装 vim


apt-get updateapt-get install vim
复制代码


修改 my.cnf 文件,在[mysqld]加如下两行


# vim /etc/my.cnf[mysqld]log-bin=mysql-binserver-id=1
复制代码


添加说明:


  • log-bin=mysql-bin 使用 binary logging,mysql-bin 是 log 文件名的前缀

  • server-id=1 唯一服务器 ID,非 0 整数,不能和其他服务器的 server-id 重复


配置完成后,需要重启 mysql 服务使其修改的配置文件生效,使用如下命令使 mysql 进行重启


service mysql restart
复制代码


最后重启服务:docker start mysql_master

三、MYSQL 从服务的配置

运行 MySQL 从容器,设置 33307 为 mysql 服务端口


docker run --name mysql_slave -p 33307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
复制代码


和主服务一样的配置:


server-id=2
复制代码


重启服务:docker restart mysql_slave

四、配置 MYSQL 主从

使用 Navicat 连接 slave 后新建查询,执行以下 SQL


CHANGE MASTER TO MASTER_HOST='192.168.3.38',MASTER_PORT=33306,MASTER_USER='slave',MASTER_PASSWORD='Mslave#q818';
复制代码


START SLAVE;


  • MASTER_HOST: 填 Navicat 连接配置中的 ip 应该就可以

  • MASTER_PORT: 主容器的端口

  • MASTER_USER: 同步账号的用户名

  • MASTER_PASSWORD: 同步账号的密码


自此 MYSQL 主从配置完成,重启所有 docker 容器

五、主从复制测试

进行 mysql 的主从复制有很多方式,此处我们进行一个简单的测试。


在 Master 中创建一个新库


mysql> create database test;Query OK, 1 row affected (0.01 sec)
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys || test |+--------------------+5 rows in set (0.00 sec)
复制代码


此时 Slave 中会有该 test 库:


mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || sys                || test               |+--------------------+5 rows in set (0.00 sec)
复制代码


在 Master 中创建表并插入数据:


mysql> create table mytbl (id varchar(16),name varchar(32));mysql> show tables;+----------------+| Tables_in_test |+----------------+| mytbl          |+----------------+mysql> insert into mytbl values (1,'zhangsan');Query OK, 1 row affected (0.01 sec)
mysql> select * from mytbl;+------+----------+| id | name |+------+----------+| 1 | zhangsan |+------+----------+1 row in set (0.00 sec)
复制代码


在 Slave 中查看是否有数据进行同步:


mysql> use test;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A
Database changedmysql> show tables;+----------------+| Tables_in_test |+----------------+| mytbl |+----------------+1 row in set (0.00 sec)
mysql> select * from mytbl;+------+----------+| id | name |+------+----------+| 1 | zhangsan |+------+----------+1 row in set (0.00 sec)
复制代码


六、主从的其他操作

如何停止从服务复制功能


stop slave
复制代码


如何重新配置主从


stop slave; reset master;
复制代码


发布于: 刚刚阅读数: 2
用户头像

还未添加个人签名 2022.03.01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年03月 Docker容器 Mysql主从复制的搭建_Docker_愚公搬代码_InfoQ写作平台