10. docker方式下的mysql设置主从复制(一主两从)
上一篇 【centos 使用 docker 方式安装 mysql】 笔记中,我们在三个虚拟机中使用 docker 方式新建了三个 mysql 容器服务,那么我们这篇文章来记录下,如何在这三台机器中设置 mysql 的主从复制功能。其中111 服务器作为主节点,112 和 113 两个服务器作为两个从节点,复制 111 服务器 mysql 的数据,进行同步。
章节一:安装篇
一、设置主节点 111 服务器下mysql 的 my.cnf 文件
进入 mysql 的挂载目录 /mnt/mysql/config 文件夹,编辑 my.cnf 文件。vim /mnt/mysql/config/my.cnf,添加如下配置:
- 其中 server-id=111 要保证唯一性,每个节点的该参数都要不同
- binlog-do-db 参数,设置多个复制数据库时需要重复配置该参数,示例如下测代码块中所示
# 主从复制配置区
[mysqld]
server-id=111 # 主服务器唯一ID
log-bin=mysql-bin # 启用二进制日志
binlog-ignore-db=mysql # 设置不要复制的数据库(可设置多个)
binlog-ignore-db=information_schema
binlog-do-db=iotings-cloud # 设置需要复制的数据库
binlog-do-db=iotings-config # 设置需要复制的数据库
binlog-do-db=iotings-seata # 设置需要复制的数据库
binlog_format=STATEMENT # 设置logbin格式
二、设置两个从节点 112、113 服务器下mysql 的 my.cnf 文件
vim /mnt/mysql/config/my.cnf
分别编辑如下参数:
1、112服务器
# 主从复制配置区
[mysqld]
server-id=112 #从服务器唯一ID
relay-log=mysql-relay #启用中继日志
2、113服务器
# 主从复制配置区
[mysqld]
server-id=113 #从服务器唯一ID
relay-log=mysql-relay #启用中继日志
三、设置三个mysql服务的 auto.cnf 文件的 uuid 参数
vim /mnt/mysql/data/auto.cnf
除了 my.cnf 中的 server-id 不能重复外,auto.cnf 文件中的 uuid 参数也不能重复,因为112和113 虚拟机是根据 111 进行克隆的,所以后两个服务器的 mysql 容器的 uuid 参数是一样的,那么修改后两个 uuid 参数,注意,不要再新加字符串,只在原来 uuid 的基础之上修改某个字符串即可,否则 mysql 容器重启会失败,异常为 无法找到该 uuid 等信息
vim /mnt/mysql/data/auto.cnf
[auto]
server-uuid=e777435b-b90d-11ed-90c2-0242ac110002 # 举例:修改0002为0003,不可新增字符串
四、设置 主节点 的 slave 访问权限
# 进入 111服务器的主 mysql 容器内
docker exec -it mysql /bin/bash
# 开启 mysql 命令模式
mysql -uroot -padmin123
# 创建 slave 访问权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'admin123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 查看主 master 状态
mysql> show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000001 | 438 | nacos_db | mysql,information_schema | |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)
注:记住这里的 File 和 Position 两个参数,在从节点的配置中要用到
五、配置 从节点 的 mysql 属性
# 分别进入 112、113服务器的主 mysql 容器内
docker exec -it mysql /bin/bash
# 开启 mysql 命令模式
mysql -uroot -padmin123
# 然后执行如下命令,创建复制的一些配置
CHANGE MASTER TO MASTER_HOST='192.168.0.111',
MASTER_USER='slave',
MASTER_PASSWORD='admin123',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=438;
#启动从服务器复制功能
start slave;
#查看从服务器状态
show slave status \G
注意:如果需要停用slave,命令为:stop slave;
如果没有异常的话,那么主从复制就配置好了,在主节点进行表和数据的增删,那么从节点会根据日志信息进行数据的同步!

六、出现了从节点异常信息后,根据具体的异常进行具体的分析
(1)出现了 【Slave_SQL_Running: No】 的异常信息,那么我们来解决一下
方案一:(已亲测,可行)
1、先停掉 slave
mysql> stop slave;
2、跳过错误步数,后面步数可变
mysql> set global sql_slave_skip_counter=1;
3、再启动 slave
mysql> start slave;
4、查看同步状态
mysql> show slave status\G
解决方法二:(重新做主从,完全同步,未亲测)
1、先进入主库进行锁表,注意窗口不要关闭
mysql> flush table with read lock;
2、把数据进行备份
> mysqldump -uroot -p --opt -R 数据库 > /data/bak.sql
3、再新开个窗口,查看主数据库信息
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 1158 | | | |
+------------------+----------+--------------+------------------+-------------------+
4、在从库上停止slave
mysql> stop slave;
5、导入备份的数据文件
mysql> source /data/bak.sql
6、重置同步
mysql> reset slave;
7、重新设置同步节点
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.0.111',
MASTER_PORT=3306,
MASTER_USER='sync',
MASTER_PASSWORD='admin123',
MASTER_LOG_FILE='mysql-bin.000005', # 按照具体的主节点信息写该配置
MASTER_LOG_POS=1158; # 按照具体的主节点信息写该配置
注:host,port,user,password请根据你的主库设置相应修改,log_file和log_pos根据主库中master status相应修改。
8、开启slave
mysql> start slave;
9、查看slave状态
mysql> show slave status\G;
显示如下信息则表示正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
10、对主数据库解锁
mysql> unlock tables;
(2)出现了 【Slave_IO_Running: No】 的异常信息,在各个从库中执行如下代码,可恢复(已亲测,可用)
stop slave;
reset slave;
start slave;
FAQ:
1、F:当看到数据没有同步时,而且查看从库没有任何异常,是怎么回事呢?
A:可能是没有配置该库进行同步,检查下设置同步的表
参考信息:
https://www.cnblogs.com/NIAN2011/p/16637719.htmlhttps://cloud.tencent.com/developer/article/2145753
http://www.codebaoku.com/it-mysql/it-mysql-180748.html
章节二:运维篇
一、添加新的同步库
场景就是,在三个服务器正常的运行之下,需要新增一个需要同步的数据库,那么正常的流程是什么呢,如下:
- 首先,在主库的服务器中,配置 my.cnf 文件,新增需要同步的数据库,此刻还不能新建库,重启 docker 中的 mysql 容器
- 然后,在主库中新建第一步配置的数据库
- 最后检查其他两个从库的同步状态
- 那么以后的新增表、添加表数据或者删除表、库的动作,三个库都会同步执行
10. docker方式下的mysql设置主从复制(一主两从)的更多相关文章
- Linux 下的mysql+centos7+主从复制
mysql+centos7+主从复制 MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公 ...
- MySQL 主从复制一主两从环境配置实战
MySQL 初始化 MySQL 主从复制是指数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点.MySQL 默认采用异步复制方式;从节点可以复制主数据库中的所有数据库或者特定的数据库 ...
- MySQL的主从复制+双主模式
MySQL的主从复制 部署环境: MySQL master 192.168.40.21 MySQL slave 192.168.40.22 思路: 当主MySQL上进行数据上的操作或者变化时,主My ...
- 2018.10.31 Mac下的Mysql修改字符编码修改的问题总结
今天在弄数据库的时候发现存入中文汉字变成了问号,Mac跟windows处理方式不一样. show variables like '%char%'; 查看当前mysql的编码格式 也就是默认编码格式 + ...
- windows命令行方式下打印和设置PATH变量
点击开始菜单,运行=>cmd打印当前变量:echo %PATH%结果:C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;d:\PRO ...
- MySQL主从复制(一主两从)
主库开启bin-log二进制日志功能,并建立slave账号,并授权从库连接主库,从库通过change master得到主库的相关同步信息, 然后连接主库进行验证,主库产生的新数据会导入到bin- ...
- mysql 设置自增主键id的起始值
修改user表,主键自增从20000开始 alter table user AUTO_INCREMENT=20000;
- 完全分布式hadoop2.5.0安装 VMware下虚拟机centos6.4安装1主两从hadoop
请跟我走,从零开始搭建hadoop2.5.0环境.总览第一步:搭建三台能不用密码shh的虚拟机.第二步,装jdk,解压hadoop文件,配置环境变量和xml文件.第三步,复制克隆两个slave机器.调 ...
- redis 主从复制(一主两从)
一.环境基本信息 系统 centos7 版本 redis 5.0.7 只用了一台机器,ip:192.168.64.123 master端口 6379,从机 端口 6380.6381 二.redis目录 ...
- 在docker下运行mysql
docker pull mysql 从镜像仓库中拉取mysql镜像. 运行镜像 到此mysql在docker容器下运行成功. 使用Navicat连接工具连接到mysql 经过以上步骤就完成了在dock ...
随机推荐
- C++中va_list, va_start, va_arg, va_end的基本用法
关于va_list, va_start, va_arg, va_end 由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦,即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这 ...
- JUC(七)分支合并框架
JUC分支合并框架 简介 Fork/Join可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务的结果合并称为最终的计算结果. Fork:负责将任务拆分 Join:合并拆分任务 ForkJoi ...
- Kubuesphere部署Ruoyi(二):部署kubesphere
先决条件: 更换DNS 更换apt的镜像源 Ubuntu下永久性修改DNS vi /etc/systemd/resolved.conf DNS字段取消注释,并修改DNS为223.5.5.5 223.5 ...
- 天梯赛L1-027 出租
一.问题描述 下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破.其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index ...
- Django框架——静态文件配置、form表单、request对象、连接数据库、ORM简介、ORM基本操作和语句
配置文件介绍 SECRET_KEY = '0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a' # 盐 DEBUG = True # 调试模式 ...
- vue中使用svg并设置大小
1.安装依赖 npm install --save-dev svg-sprite-loader 2. 新建svg资源文件夹 src/assets/svg 将svg资源放入此目录,接下来会在配置 ...
- [Pytorch框架] 2.4 卷积神经网络简介
文章目录 2.4 卷积神经网络简介 2.4.1 为什么要用卷积神经网络 2.4.2结构组成 卷积层 卷积计算 卷积核大小 f 边界填充 (p)adding 步长 (s)tride 计算公式 卷积层 激 ...
- Centos7.x jmeter + ant + jenkins接口自动化框架部署
一.基础环境准备 1.jmeter安装(之前文章有介绍过) 2.ant安装 · 官网下载:https://ant.apache.org/bindownload.cgi · 上传服务器,执行 tar - ...
- 2022-12-02:有a块草莓蛋糕,有b块芝士蛋糕,两人轮流拿蛋糕, 每次不管是谁只能选择在草莓蛋糕和芝士蛋糕中拿一种, 拿的数量在1~m之间随意, 谁先拿完最后的蛋糕谁赢。 返回先手赢还是后手赢。
2022-12-02:有a块草莓蛋糕,有b块芝士蛋糕,两人轮流拿蛋糕, 每次不管是谁只能选择在草莓蛋糕和芝士蛋糕中拿一种, 拿的数量在1~m之间随意, 谁先拿完最后的蛋糕谁赢. 返回先手赢还是后手赢. ...
- 2021-10-27:课程表。你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisi
2021-10-27:课程表.你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 .在选修某些课程之前需要一些先修课程. 先修课程按数组 prerequisi ...