Docker搭建Mysql主从复制

缺乏、安全感 2024-04-17 05:29 172阅读 0赞

文章目录

  • 安装Docker
  • 使Docker容器和Windows10建立局域网连接
    • Docker创建一个局域网
    • 在Windows10中将这个子网添加到路由表中
  • 简单Mysql持久化
    • 预先准备
    • 启动3个mysql
    • 在主数据库中创建专门用于从数据库登录操作的账号,并查看主数据库状态
    • 在从数据库中启用同步
    • 测试

安装Docker

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

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

Docker创建一个局域网

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

指令示例:

  1. docker network create --subnet=192.168.100.0/24 homenet

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

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

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

  1. route add -p 192.168.100.0 mask 255.255.255.0 10.0.75.2

简单Mysql持久化

预先准备

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

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

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

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

  1. mysql -h 192.168.100.10 -u root -p
  2. [mysql]exit
  3. docker stop mysql000
  4. docker rm mysql000

启动3个mysql

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

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

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

  1. server-id=2
  2. log-bin=mysql-slave-bin
  3. relay_log=mysql-relay-bin
  4. server-id=3
  5. log-bin=mysql-slave-bin
  6. relay_log=mysql-relay-bin

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

  1. 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
  2. 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
  3. 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

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

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

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

在从数据库中启用同步

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

  1. mysql -h 192.168.100.12 -u root -p
  2. 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;
  3. start slave;
  4. show slave status \G;

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

测试

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

最后完全同步了

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

发表评论

表情:
评论列表 (有 0 条评论,172人围观)

还没有评论,来说两句吧...

相关阅读