docker Mysql 主从复制安装教程

创建一个桥接网络

docker network create somenetwork	// docker 默认创建的网络模式就是桥接模式  也可以通过 -d 参数指定
例如:
docker network create -d bridge somenetwork2

// 创建完后 运行 docker network ls 查看是否创建成功

拉取 mysql 镜像

docker pull mysql:5.7 // 因为我嫌 8.0 版本配置密码太麻烦,为了省事,我选了 5.7 版本
// 执行后,可以看到 docker 开始查找并拉取镜像,拉取完后,执行如下命令,可以看到已经把镜像拉取到本地了
docker images	

(Ps: 450兆,啧啧啧)

启动 主节点 mysql

docker run -p 3309:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 --network somenetwork -d mysql:5.7
//  然后查看是否启动成功
docker ps

(请忽略 3310 那个 容器,那个是之后咱们要启动的 从库的端口映射)

这个时候,其实已经可以使用 Navicat 连接一下了, IP就是你电脑的 IP,端口,我们映射到你电脑的 3309 端口。

下面需要配置主节点:

进入容器

docker exec -it a9236d6dc2f3 /bin/bash	// 这里的 a9236d6dc2f3 就是上面咱们运行 docker ps 查看到的容器 ID
// 然后会看到进入了一个新的命令窗口,像这样:

 

我们需要编辑 mysql 的配置文件,因为这个镜像是最小安装,所以,没有 vim 命令,我们需要先安装 vim,我们使用 apt-get 命令安装,首先需要更新一下包列表,像下面这样

apt-get update // 回车,注意留意打印,会问你是 Y/n 输入 y 即可
// 更新完后,开始安装 vim 
apt-get install vim	// 时间会比较长
// 安装完后我们退出容器
exit

//这里由于在从节点我们还需要在安装一遍 vim ,所以,这里我才去一个取巧的方式,把镜像导出导入一下,命令如下:
docker export -o master a9236d6dc2f3	// a9236d6dc2f3 是咱们刚才启动的那个镜像的 ID
// 稍等一下,就可以看到在当前目录下生成了一个 master 文件

 

再把这个文件导入到 docker 里

后面我们启动从节点的时候,就用这个镜像 ID,而不是 mysql 5.7 的那个 ID了。

现在我们再回到主节点的容器里:

docker exec -it a9236d6dc2f3 /bin/bash
// 配置 my.cnf
vim /etc/mysql/my.cnf
// 增加如下部分
[mysqld]
## 设置server_id,随便自定义一个数字,主从节点中保持唯一即可
server-id=100  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-bin 
// 完成后 保存文件
// 查看一下

 

现在就可以运行 mysql 命令进行登陆了,像这样

mysql -u root -p	// 回车,然后输入你的密码

 

然后给即将启动的从节点配置用户名和权限

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';	// 用户是 slave ,用户密码是: 123456
// 把从机复制、客户端复制 这两个权限配给 slave
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
// 配置完后,退出 docker 容器,从新启动一下这个容器
exit

docker restart a9236d6dc2f3
// 重启之后,再次进入容器
docker exec -it a9236d6dc2f3 /bin/bash

然后连接上 mysql ,查看一下主节点状态:

看到我框住的 File 和 Position 这两个属性了嘛?一会我们配置从节点要用到这两个值。

启动从节点 mysql

这里从我们导入的那个镜像来启动,避免再次安装 vim 。

docker run -p 3310:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 --network somenetwork -d 8e78ba42be65
//  然后查看是否启动成功
docker ps

 

进入容器,配置 my.cnf

docker exec -it ac7dfccacf6b /bin/bash

vim /etc/mysql/my.cnf
// 增加如下内容
[mysqld]
server-id=101  
log-bin=mysql-slave-bin   
relay_log=edu-mysql-relay-bin

// 保存,查看一下
cat /etc/mysql/my.cnf

 

退出 docker ,重启一下容器

 

重启之后再次进入容器:

docker exec -it ac7dfccacf6b /bin/bash
// 进入 mysql 
mysql -u root -p // 回车,输入 mysql 密码

 

配置从节点信息:

// master_host 主节点 IP  ,master_user 我们上面在 主节点配置的从节点用户,master_password 配置的 slave  用户连接 master 节点的 密码,master_port 主节点端口,master_log_file 主节点的 file ,我们上面查看主节点状态时,看到的那两个属性中的 File 属性值,master_log_pos 两个属性值中的 Position 属性值。
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

查看主节点 mysql IP:

 配置完后,启动从节点,查看一下当前的从节点 mysql 状态:

start slave
show slave status\G;

可以看到 Slave_IO_Running、Slave_SQL_Running 这两个属性都是 Yes,证明我们的从节点已经配置成功,这时就可以在主节点创建一个库,就会自动同步到从节点;如果这两个属性是 No,那么可以在对应的 Last_IO_Error、Last_SQL_Error 看待对应的错误信息,具体情况具体解决吧。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值