一步步教你用Docker实现Mysql主从复制

本文作为一个docker与mysql的练习,用docker 实现 mysql 的主从复制
只实现单向复制(master -> slave)
mysql binlog详解 : https://www.cnblogs.com/Presley-lpc/p/9619571.html
如果你对docker是什么还不知道,docker image,container,repository也不清楚的话,建议看一下 菜鸟教程的docker教程 ,简单入门之后就可以使用了。

1. 提前准备:

软件/系统 版本
ubuntu 16.04
Docker laster
Navicat laster

2. 操作流程

首先进入Linux,安装Docker ,本人使用的是阿里云的服务器,本地linux也可以。

# 更新
apt-get update
# 下载docker
apt-get install Docker

安装好docker后

# 先更改 docker 下载源
# 1.创建json文件
/etc/docker/daemon.json
# 2.编辑
{
    "registry-mirrors":[
         "http://hub-mirror.c.163.com",
         "http://registry.docker-cn.com"
    ]
}
# 3.保存

# 拉取 Mysql5.7 镜像文件
docker pull mysql:5.7
# 查看镜像文件
docker images

docker拉取mysql镜像

将 docker 上的 mysql 镜像实例成 2 个不同的容器
一个为 mysql 主机 : master
一个为 mysql 从机 : slave

# 主机 master
docker run -itd --name master -p 33060:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
# 从机 slave
docker run -itd --name slave-p 33061:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
# 查看运行的容器
docker ps

运行的容器
进入 master 容器

# 1.进入 master   # 此处的 f707 改成你自己的 master container id
docker exec -it f707 bash 

# 2.更新 apt-get , 安装 vim
apt-get update
apt-get install vim

# 3.编辑 mysql 的 mysqld.cnf 文件
vim etc/mysql/mysql.conf.d/mysqld.cnf
# 在 [mysqld] 下添加
log-bin = mysql-bin
server-id = 1
# 保存重启mysql 
# !![注意]重启后会退出容器,需要从新进入 master 容器
service mysql restart

# 4.添加复制 master 数据的用户 reader ,供从服务器使用
GRANT REPLICATION SLAVE ON *.* to 'reader'@'%' identified by 'root';
# 刷新权限
flush privileges

# 5.查看当前 master 状态
show master status;

master状态
进入 slave 容器

# 按照从机的 container ID 重复上面的步骤 1 和 2

# 3.编辑 mysql 的 mysqld.cnf 文件
vim etc/mysql/mysql.conf.d/mysqld.cnf
# 在 [mysqld] 下添加
log-bin = mysql-bin
server-id = 2  # [更改的部分]
# 保存重启mysql 
# !![注意]重启后会退出容器,需要从新进入 slave 容器
service mysql restart

# 4.进入 Mysql, 添加 master 
# !![注意] master_host 是 docker 进入到 master 容器后的 ip 地址
# 使用 cat /etc/hosts 查看
change master to master_host='172.18.0.2',master_user='reader',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=154; 

# 5. 在Mysql中输入, 从服务器启动I/O 线程和SQL线程
start slave
show slave status\G

在这里插入图片描述
I/O线程从主库读取bin log,并存储到relay log中继日志文件中。
SQL线程读取中继日志,解析后,在从库重放。

3. 测试

   使用Navicat连接两个数据库, 注意IP是Linux的ip地址,端口是33060或者
33061(本文的例子)
	在master上创建一个数据库

master创建数据库
此时slave上也创建了数据库
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43676025/article/details/108003828