前言
系统环境:
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;
复制代码
评论