前言
系统环境:
- 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 mysql0ad6b529bfbceda875b4af88788c1b6d4d29916095203755294d60cd922dda7a
   复制代码
 
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为容器IDdocker exec -it mysql-master /bin/bash     //mysql-master为容器名称
   复制代码
 
切换到 /etc/mysql 目录下
安装 vim
 apt-get updateapt-get install vim
   复制代码
 
修改 my.cnf 文件,在[mysqld]加如下两行
 # vim /etc/my.cnf[mysqld]log-bin=mysql-binserver-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 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; reset master;
   复制代码
 
评论