前言一、Mysql主从复制的搭建
1.拉取镜像 二、MYSQL主服务的配置
1.查询容器运行状态2.使用Navicat连接测试3.创建主数据库的复制账号
3.1 创建用户3.2 授予用户权限3.3 查看用户权限3.4 修改MySQL配置文件 三、MYSQL从服务的配置四、配置MYSQL主从五、主从复制测试六、主从的其他操作
前言
系统环境:
window11 企业版mysql8.0+dockervm虚拟机 一、Mysql主从复制的搭建 1.拉取镜像
docker pull mysql
因为本人3306已经有本地的mysql,容器内的mysql端口设置33306
docker run --name mysql_master -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql 0ad6b529bfbceda875b4af88788c1b6d4d29916095203755294d60cd922dda7a
| 参数 | 说明 |
|---|---|
| –name | 为容器指定名称,这里是master |
| -p | 将容器的指定端口映射到主机的指定端口,这里是将容器的3306端口映射到主机的3306端口 |
| -e | 设置环境变量,这里是指定root账号的密码为root |
| -d | 后台运行容器,并返回容器ID |
| mysql | 指定运行的mysql版本 |
如下图所示代表运行成功
docker ps -a2.使用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'@'%';
如下代表成功
进入mysql主服务器
docker exec -it 8b71301f25ed /bin/bash //8b71301f25ed为容器ID docker exec -it mysql-master /bin/bash //mysql-master为容器名称
切换到 /etc/mysql 目录下
cd /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
添加说明:
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 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
如何重新配置主从
stop slave; reset master;



