前言
系统环境:
window11 企业版
mysql8.0+
docker
vm 虚拟机
一、Mysql 主从复制的搭建
1.拉取镜像
二、MYSQL 主服务的配置
因为本人 3306 已经有本地的 mysql,容器内的 mysql 端口设置 33306
docker run --name mysql_master -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
0ad6b529bfbceda875b4af88788c1b6d4d29916095203755294d60cd922dda7a
复制代码
1.查询容器运行状态
如下图所示代表运行成功
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为容器ID
docker exec -it mysql-master /bin/bash //mysql-master为容器名称
复制代码
切换到 /etc/mysql 目录下
安装 vim
apt-get update
apt-get install vim
复制代码
修改 my.cnf 文件,在[mysqld]加如下两行
# vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
复制代码
添加说明:
配置完成后,需要重启 mysql 服务使其修改的配置文件生效,使用如下命令使 mysql 进行重启
最后重启服务:docker start mysql_master
三、MYSQL 从服务的配置
运行 MySQL 从容器,设置 33307 为 mysql 服务端口
docker run --name mysql_slave -p 33307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
复制代码
和主服务一样的配置:
重启服务: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;
自此 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 names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> 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;
reset master;
复制代码
评论