GreatSQL通过伪装从库回放Binlog文件
GreatSQL通过伪装从库回放Binlog文件
一、适用场景说明
1、主库误操作恢复
利用 Binlog 在其他实例解析、回放,根据gtid只回放到指定位点。
2、网络隔离环境同步
备份恢复后可以拉去主库Binlog文件至新实例同步增量数据。
3、备份恢复遇到Binlog文件过大处理
恢复实例时有可能主库的 Binlog 超过限定大小,无法用mysqlbinlog工具恢复。
以上只是列举部分场景,而且恢复的方式也并非一种,本文讲解通过伪装从库的方式去回放所需的binlog。
二、测试环境实例信息
| 实例1 | 192.168.138.239:3301 | | ----- | -------------------- | | 实例2 | 192.168.135.196:3302 |
三、实例1生成测试数据
在实例1创建4个新库,用sysbench生成测试数据,每执行一次sysbench就刷新一下Binlog,生成多个Binlog文件。
192.168.138.239:3301 create database wl_greatsql1; create database wl_greatsql2; create database wl_greatsql3; create database wl_greatsql4; sysbench ./src/lua/oltp_read_write.lua --mysql-db=wl_greatsql1-4 --mysql-host=192.168.138.239 --mysql-port=3301 --mysql-user=greatsql --mysql-password='QW12er#$' --mysql-ignore-errors=all --tables=5 --table_size=10000 --threads=10 --report-interval=2 --time=1800 prepare
通过flush logs;
命令生成多个Binlog文件。
-rw-r-----. 1 greatsql greatsql 9545477 Jun 4 17:53 binlog.000001 -rw-r-----. 1 greatsql greatsql 9544713 Jun 4 17:54 binlog.000002 -rw-r-----. 1 greatsql greatsql 9544713 Jun 4 17:54 binlog.000003 -rw-r-----. 1 greatsql greatsql 9544713 Jun 4 17:54 binlog.000004
四、查看实例2状态
实例2的状态确保没有重复数据记录,做了reset master
以及slave
。
greatsql> SHOW MASTER STATUS\G *************************** 1. row *************************** File: binlog.000001 Position: 153 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec) greatsql> SHOW SLAVE STATUS\G Empty set, 1 warning (0.00 sec)
五、实例2伪装从库应用实例1binlog数据
1、处理实例2的slave信息
# reset slave;之后relaylog就被全清了变成以下样子 -rw-r----- 1 greatsql greatsql 177 Apr 4 02:32 relaylog.000001 -rw-r----- 1 greatsql greatsql 51 Apr 4 02:32 relaylog.index
关于 RESET SLAVE [ALL]
的操作说明:
RESET SLAVE 会移除当前从库的复制状态信息。 会删除所有和该从库关联的 relay log(中继日志)文件。 会将与复制位点(例如 Master_Log_File、Read_Master_Log_Pos 等)相关的信息重置为空。 不会清除通过 CHANGE MASTER TO 设置的复制连接参数(如主库地址、用户、密码等),在较新的 GreatSQL 版本中这些连接参数会保留。 RESET SLAVE ALL 会执行与 RESET SLAVE 相同的操作(删除 relay log、重置复制状态)。 此外,还会清空通过 CHANGE MASTER TO 配置的所有主库连接信息(主库地址、端口、用户、密码等),相当于是把复制相关的所有设置都恢复到初始默认状态。
2、将实例1生成的binlog文件传输到实例2主机并修改名称
#拷贝到实例2。 binlog.000001 binlog.000002 binlog.000003 binlog.000004 #修改名称 mv binlog.000001 relaylog.000002 mv binlog.000002 relaylog.000003 mv binlog.000003 relaylog.000004 mv binlog.000004 relaylog.000005 #修改权限 chown -R greatsql:greatsql /greatsql/dbdata/log/
3、修改实例2 relay-bin.index文件
# 修改实例2 index文件内容同上。 vi relaylog.index # 新增 /greatsql/dbdata/log/relaylog.000002 /greatsql/dbdata/log/relaylog.000003 /greatsql/dbdata/log/relaylog.000004 /greatsql/dbdata/log/relaylog.000005
4、实例2建立复制通道
说明:
只需要sql_thread即可应用relay log,io_thread并不用配置实际的信息。关键是在执行 CHANGE MASTER TO
操作时要指定 RELAY_LOG_FILE
和 RELAY_LOG_POS
的详细信息。
# 建立slave通道 CHANGE MASTER TO MASTER_HOST='source2.example.com', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_PORT=3301, Relay_Log_File='relaylog.000001', Relay_Log_POS=4;
5、启动sql_thread
# 只启动sql线程 START SLAVE sql_thread; # 如果想指定位点恢复可执行下面的命令,加上 SQL_AFTER_GTIDS 参数 START SLAVE sql_thread UNTIL SQL_AFTER_GTIDS = 'AAAAAAAA-0000-0000-0000-000000000000:XXX';
6、查看实例2的复制通道
# 查看master信息 greatsql> SHOW MASTER STATUS\G *************************** 1. row *************************** File: binlog.000001 Position: 38179345 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 32ab2502-3492-11f0-891f-00163e7e5561:1-124 1 row in set (0.00 sec) # 查看slave信息 greatsql> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Master_Host: source2.example.com Master_User: repl Master_Port: 3301 Connect_Retry: 60 Master_Log_File: Read_Master_Log_Pos: 4 Relay_Log_File: relaylog.000006 Relay_Log_Pos: 4 Relay_Master_Log_File: binlog.000005 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 4 Relay_Log_Space: 153 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 0 Master_UUID: Master_Info_File: /greatsql/dbdata/data/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: 32ab2502-3492-11f0-891f-00163e7e5561:1-124 Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row in set, 1 warning (0.00 sec)
6、数据验证
greatsql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | wl_greatsql1 | | wl_greatsql2 | | wl_greatsql3 | | wl_greatsql4 | +--------------------+ 8 rows in set (0.01 sec) greatsql> USE wl_greatsql1 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed greatsql> SHOW TABLES; +------------------------+ | Tables_in_wl_greatsql1 | +------------------------+ | sbtest1 | | sbtest2 | | sbtest3 | | sbtest4 | | sbtest5 | +------------------------+ 5 rows in set (0.00 sec) greatsql> SELECT COUNT(*) FROM sbtest1; +----------+ | count(*) | +----------+ | 10000 | +----------+ 1 row in set (0.01 sec)
六、操作风险
1、确认伪从库已有数据是否安全兼容回放操作
- 如果伪从库中本身已存在部分数据,必须提前核实与 Binlog 中即将回放的数据是否存在冲突,避免出现主键冲突、重复插入、逻辑错误等情况。
- 建议在回放前执行一次结构与关键数据校验,确保数据状态与预期一致。
2、主库误操作场景需精准识别回放的事务范围
- 若回放 Binlog 是为了修复主库误操作 (如误删、误更新等),必须提前通过
mysqlbinlog
工具明确要回放的具体事务,避免出现"多执行"或"漏执行"。 - 回放应尽量以事务为单位分批控制,必要时使用
START SLAVE UNTIL
或mysqlbinlog --stop-position
等方式精准切点。
3、严控伪从库的主从配置,避免误接入真实主库
- 伪装从库的核心在于模拟中继日志环境,不应真实接入主库。
- 配置
CHANGE MASTER TO
时,务必使用虚假地址或,防止误连主库造成非预期的主从同步或写入操作。
Enjoy GreatSQL :)
关于 GreatSQL
GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。
相关链接: GreatSQL社区 Gitee GitHub Bilibili
GreatSQL社区:
社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html
社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html
(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)
技术交流群:
微信&QQ群:
QQ群:533341697
微信群:添加GreatSQL社区助手(微信号:wanlidbc
)好友,待社区助手拉您进群。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Bytebase 3.8.0 - 显著优化 schema 同步/回滚兼容性
🔔 重大变更 显著优化多数据库(MySQL/PostgreSQL/TiDB/SQL Server/Oracle)的 schema 同步/回滚兼容性,支持绝大多数常见数据库对象。 文档地址 下线工单订阅功能。 将 SQL 审核中心更名为变更计划。 🎄 改进 新增查询结果行数限制功能。 新增多域名配置支持。 简化默认值输入:不再区分表达式和值,统一通过文本输入框填写。 在审批流程处展示全部审批人,且可悬停显示细节。 🐞 Bug 修复 修复了 ClickHouse 查询中的 JSON 数据类型显示问题。 在 Terraform SSL 配置中新增 use_ssl 字段。 📕 安装及升级 新安装 https://docs.bytebase.com/get-started/self-host 升级 https://docs.bytebase.com/get-started/upgrade 升级前请备份元数据库,升级后无法回退版本。 💡 更多资讯,请关注 Bytebase 公号:Bytebase
- 下一篇
vec2text 技术已开源!一定条件下,文本嵌入向量可“近乎完美地”还原
编者按: 我们今天为大家带来的这篇文章,作者的观点是文本嵌入向量并非我们想象中的安全载体,在某些条件下,通过适当的技术手段可以高精度地还原出原始文本内容。 作者在本文介绍了其开发的 vec2text 方法 ------ 一种基于迭代优化的文本反演技术,能够以 92% 的精确率还原 32 个词元的文本序列,BLEU 分数高达 97 分。这一技术为企业在部署 AI 系统时的数据安全策略敲响了警钟。 本文系原作者观点,Baihai IDP 仅进行编译分享 作者 | Jack Morris 编译 | 岳扬 01 向量数据库的崛起 近年来,随着生成式 AI 的迅猛发展,众多企业正争相将 AI 技术融入其业务中。其中一个最普遍的做法,是构建能够基于文档数据库中的信息来回答问题的 AI 系统。解决此类问题的主流方案大多基于一项关键技术:检索增强生成(Retrieval Augmented Generation, RAG)。 RAG 系统概览。来源:"Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks"[1] 这正是当下许...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS8编译安装MySQL8.0.19