【愚公系列】2022年02月 Docker容器 Mysql主从复制的搭建
【摘要】 前言系统环境:window11 企业版mysql8.0+dockervm虚拟机 一、Mysql主从复制的搭建 1.拉取镜像docker pull mysql 二、MYSQL主服务的配置因为本人3306已经有本地的mysql,容器内的mysql端口设置33306docker run --name mysql_master -p 33306:3306 -e MYSQL_ROOT_PASSWOR...
前言
系统环境:
- 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 mysql
0ad6b529bfbceda875b4af88788c1b6d4d29916095203755294d60cd922dda7a
参数 | 说明 |
---|---|
–name | 为容器指定名称,这里是master |
-p | 将容器的指定端口映射到主机的指定端口,这里是将容器的3306端口映射到主机的3306端口 |
-e | 设置环境变量,这里是指定root账号的密码为root |
-d | 后台运行容器,并返回容器ID |
mysql | 指定运行的mysql版本 |
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为容器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的主从复制有很多方式,此处我们进行一个简单的测试。
1、在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;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)