💧记录一下如何在Docker中启动两个MySQL容器来进行主从复制💧
🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥
之前踩了不少坑,终于弄好了,和我一起来看看整个部署过程吧 !
使用Docker部署MySQL可以看看:Docker中部署MySQL
通常来说,配置好了MySQL主从复制之后,在程序中还要配置读写分离,大家可以看看我的这篇文章,完成一个简单的Java项目案例:【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换&读写分离】—— 案例实战
🐳Docker实现MySQL主从复制
前言
1)、mysql主从复制用途
- 实时灾备,用于故障切换
- 读写分离,提供查询服务
- 备份,避免影响业务
2)、主从部署必要条件:
- 主库开启binlog日志(设置log-bin参数)
- 主从server-id不同
- 从库服务器能连通主库
利用docker实现mysql的主从复制,首先需要在服务器上安装好docker 及拉取相关mysql镜像:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
一、部署主从Mysql服务器
在服务器创建两个目录 master 与 slave 分别对应主从数据库的data和conf ,目录结构如下
然后在master/conf/ 路径下创建 my.cnf 里面内容如下
[mysqld]
## 同一局域网内注意要唯一
server-id=1024
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password #设置密码规则
max_connections=1000 #最大连接数设置 根据实际需要 自行调整
在slave /conf/路径下 创建 my.cnf 内容如下
[mysqld]
## 设置server_id,注意要唯一
server-id=1022
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password #设置密码规则
max_connections=1000 #最大连接数设置 根据实际需要 自行调整
然后利用镜像分别启动两个容器,一个master 一个slave , master端口为3339,slave为3340 对应的root密码为123456,映射配置文件和数据存储目录到mysql
启动 Master
docker run --name master -p 3339:3306 \
-v "$PWD/master/conf/my.cnf":/etc/mysql/my.cnf \
-v "$PWD/master/data":/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql
启动Slave
docker run --name slave -p 3340:3306 \
-v "$PWD/slave/conf/my.cnf":/etc/mysql/my.cnf \
-v "$PWD/slave/data":/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql
启动完成后,分别测试下连接,发现都可以正常连接,接下来开始具体的主从配置
二、主从数据同步配置
使用navicat连接 master数据库,进行slave账户创建及相关授权
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
在Master进入mysql,执行show master status;
show master status;
回到linux服务器,执行命令查看master容器的ip地址
docker inspect --format={{.NetworkSettings.IPAddress}} master
172.17.0.3
然后在slave数据库服务器中根据上面得到的信息执行命令,主要是
master_log_file和 master_log_pos这两个参数需要根据上面语句查出来的结果进行配置,IP分配的内部地址基本就是172.17.0.2,如果不是这个地址改为 上述 查询出来的地址即可。
即:
change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000005', master_log_pos= 1563, master_connect_retry=30;
- master_port: Master的端口号,指的是容器的端口号.
- master_user:用于数据同步的用户
- master_password:用于同步的用户的密码
- master_log_file:指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段的值
- master_log_pos:从哪个Position开始读,即上文中提到的Position字段的值
- master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
查询下当前从服务器的状态
show slave status \G;
show slave status \G;
由于navicat 不支持 \G格式化展示,所以我们进入slave从服务器内查看
docker exec -it slave mysql -uroot -p123456
show slave status \G
可以看到这两个属性都为No
设置从数据库开启主从服务
start slave;
如果中途报错,之类的,可以使用reset slave进行从服务器重置
reset slave;
如果之前的配置没配置好,第一个yes将不会正常显示
再次强调!!!即:下面这段配置一定要对应好!!
change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000005', master_log_pos= 1563, master_connect_retry=30;
执行语句后,可以看到主从服务已经开启了。
三、主从同步测试
利用navicat 在主数据库新建一个TestDB数据库,然后刷新从数据库连接
刷新:
发现在主数据库添加的新库TestDB也被同步到从数据库上了,至此主从同步配置完成。
后续对主数据库做的操作都会基于binlog发送给从数据库的relaylog上进行同步。
🐳总结
使用docker起两个mysql容器进行主从复制的整个过程就是这样子了,希望能够给大家带来帮助
参考博客:Docker实现Mysql 主从复制实战(谢谢这位博主,赞一个!)
下一篇:docker启动redis
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/159723.html