Docker搭建Mysql主从复制

安装Docker

由于我用的是Windows10,所以我打开了Hyper-V,然后在Dcoker官网下载并安装了Docker。

使Docker容器和Windows10建立局域网连接

Docker创建一个局域网

docker network create --subnet=[IP]/[掩码位数] 子网名称

指令示例:

docker network create --subnet=192.168.100.0/24 homenet

在Windows10中将这个子网添加到路由表中

route add -p [局域网ip] mask [子网掩码] [经过网关(使用Docker默认网关)]

指令示例(管理员模式下运行指令):

route add -p 192.168.100.0 mask 255.255.255.0 10.0.75.2

简单Mysql持久化

预先准备

先启动一个mysql,查看需要持久化的文件有哪些。

docker run -itd --net homenet --ip 192.168.100.10 --name mysql000 -e MYSQL_ROOT_PASSWORD=00000000 mysql
docker exec -it mysql000 /bin/bash
# find / -name "mysql"

然后发现了以下需要映射的文件
/etc/mysql/my.cnf
/var/lib/mysql
保存一份my.cnf文件到宿主机,挂载文件时需要用到

然后删除刚才创建的Mysql,删除前顺便测试下局域网有没有用

 mysql -h 192.168.100.10 -u root -p
 [mysql]exit
 docker stop mysql000
 docker rm mysql000

启动3个mysql

其中主数据库配置文件添加:

server-id=1
log-bin=mysql-bin

从数据库配置文件依次添加:

server-id=2
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin
server-id=3
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin

然后创建mysql容器,命令示例(在挂载过程中需要输入Windows10密码授权本地文件操作):

docker run -itd --privileged=true --net homenet --ip 192.168.100.10 --name mysql000 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/varlib:/var/lib/mysql mysql
docker run -itd --privileged=true --net homenet --ip 192.168.100.11 --name mysql001 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL001/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL001/varlib:/var/lib/mysql mysql
docker run -itd --privileged=true --net homenet --ip 192.168.100.12 --name mysql002 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL002/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL002/varlib:/var/lib/mysql mysql

在主数据库中创建专门用于从数据库登录操作的账号,并查看主数据库状态

mysql -h 192.168.100.10 -u root -p
mysql> create user 'slave'@'%' identified by '00300100';
mysql> grant REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
mysql> show master status;

有用信息
这两个字段在从数据库中是有用的,它标识了主数据库当前语句执行状态(执行日志)。

在从数据库中启用同步

对两个从数据库都做如下处理

mysql -h 192.168.100.12 -u root -p
mysql> change master to master_host='192.168.100.11', master_user='slave', master_password='00300100', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 702, master_connect_retry=30;
start slave;
show slave status \G;

开启状态
如果成功了的话,就是这个样子的。

测试

在主数据库中创建一个表
然后查看从数据库是否同步

最后完全同步了

最后完全同步了,而且因为持久化设置,因此在关闭容器重新打开也不会出现数据丢失。
数据未丢失

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值