目录
一、拉取mysql
二、启动两个mysql容器
2.1 主master
2.2 从slave
三、配置master
3.1 进入master内部配置
3.2 安装vim命令
3.3 重启mysql
3.4 创建数据同步用户(可不建,直接用root)
四、配置slave
4.1 编辑slave文件
4.2 重启mysql
五、配置主从复制
5.1 查看master状态
5.2 配置slave
5.3 启动或关闭主从复制
声明:已经实测通过
一、拉取mysql
docker pull mysql:5.7
二、启动两个mysql容器
2.1 主master
docker run -p 3339:3306 --name mysql_master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
2.2 从slave
docker run -p 3340:3306 --name mysql_slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
三、配置master
3.1 进入master内部配置
通过`docker exec -it 627a2368c865 /bin/bash`
命令,进入mysql内部,也可以通过`docker exec -it mysql_master /bin/bash`
进入。
`cd /etc/mysql`
到此目录下,然后编辑`vi my.cnf`
,内容如下
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
3.2 安装vim命令
编辑my.cnf会遇到vi和vim命令不可用(因为容器内部没安装,需要自己手动安装),遇到如下情况就是需要安装vim的
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
3.3 重启mysql
重启mysql `service mysql restart`
,重启时docker容器会关闭,需要重新启动docker容器`docker start mysql-master`
3.4 创建数据同步用户(可不建,直接用root)
进入master容器,执行如下命令
mysql -uroot -p123456
# 创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 授权
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
四、配置slave
4.1 编辑slave文件
参照3.1进入slave容器,`cd /etc/mysql`
进入到此目录下,编辑`vi my.cnf`
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
4.2 重启mysql
重启mysql `service mysql restart`
,重启时docker容器会关闭,需要重新启动docker容器`docker start mysql_slave`
五、配置主从复制
5.1 查看master状态
根据3.1进入master容器
mysql -uroot -p123456
show master status;
查看到如下信息
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 617 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
重点:记住File、Position内容,下文要用到
5.2 配置slave
mysql -u root -p
change master to master_host='129.78.272.8', master_user='slave', master_password='123456', master_port=3339, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;
关键字说明
master_host:实际服务器地址
master_user:master 中 mysql 用户的账号
master_password:master 中 mysql 用户的密码
master_port:对外暴露的端口
master_log_file:5.1提到的file文件
master_log_pos:5.1提到的偏移量
此时查看slave状态Slave_IO_Running和Slave_SQL_Running都是No
show slave status \G
5.3 启动或关闭主从复制
进入slave的mysql容器内部,执行如下指令
mysql -uroot -p123456
# 开启
start slave;
# 关闭
stop slave;
此时再看slave状态,状态如下
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果不是,需要确认网络是否连通等情况