当前位置:   article > 正文

Docker搭建Mysql主从复制_键入命令“mysql-h 192.168.100.10 -u root -p”后,执行什么功能?

键入命令“mysql-h 192.168.100.10 -u root -p”后,执行什么功能?

安装Docker

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

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

Docker创建一个局域网

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

指令示例:

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

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

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

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

route add -p 192.168.100.0 mask 255.255.255.0 10.0.75.2
  • 1

简单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"
  • 1
  • 2
  • 3

然后发现了以下需要映射的文件
/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
  • 1
  • 2
  • 3
  • 4

启动3个mysql

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

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

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

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

然后创建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
  • 1
  • 2
  • 3

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

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;
  • 1
  • 2
  • 3
  • 4

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

在从数据库中启用同步

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

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;
  • 1
  • 2
  • 3
  • 4

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

测试

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

最后完全同步了

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/191961
推荐阅读
相关标签
  

闽ICP备14008679号