首页 > 数据库 >binlog2sql的安装及使用

binlog2sql的安装及使用

时间:2024-03-18 11:44:24浏览次数:24  
标签:-- binlog2sql start cname 使用 hch 安装 id

binlog2sql的安装及使用

binlog2sql的用途:

1) 数据快速回滚(闪回)
2) 主从切换后数据不一致的修复
3) 从binlog生成标准SQL,带来的衍生功能

yum -y install epel-release 
yum -y install git  python-pip
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt

MySQL的配置要开启以下选项:
[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full

要授权一个用户有以下权限:
SELECT, REPLICATION SLAVE, REPLICATION CLIENT

权限说明:

select:需要读取server端information_schema.COLUMNS表,获取表结构的元信息,拼接成可视化的sql语句
super/replication client:两个权限都可以,需要执行'SHOW MASTER STATUS', 获取server端的binlog列表
replication slave:通过BINLOG_DUMP协议获取binlog内容的权限

binlog2sql的使用参数说明:

mysql连接配置
-h host; -P port; -u user; -p password
解析模式
--stop-never 持续同步binlog。可选。不加则同步至执行命令时最新的binlog位置。
-K, --no-primary-key 对INSERT语句去除主键。可选。
-B, --flashback 生成回滚语句,可解析大文件,不受内存限制,每打印一千行加一句SLEEP SELECT(1)。可选。与stop-never或no-primary-key不能同时添加。
解析范围控制
--start-file 起始解析文件。必须。
--start-position/--start-pos start-file的起始解析位置。可选。默认为start-file的起始位置。
--stop-file/--end-file 末尾解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。
--stop-position/--end-pos stop-file的末尾解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。
--start-datetime 从哪个时间点的binlog开始解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。
--stop-datetime 到哪个时间点的binlog停止解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。
对象过滤
-d, --databases 只输出目标db的sql。可选。默认为空。
-t, --tables 只输出目标tables的sql。可选。默认为空。

练习:
root@localhost:mysql3306.sock [hch]>select * from hch;
+----+-------+
| id | cname |
+----+-------+
|  1 | hch   |
|  2 | tom   |
|  3 | jerry |
+----+-------+
3 rows in set (0.00 sec)

# 删除表里的数据
root@localhost:mysql3306.sock [hch]>delete from hch;
Query OK, 3 rows affected (0.12 sec)

root@localhost:mysql3306.sock [hch]>select * from hch;
Empty set (0.00 sec)

# 查看binlog位置
root@localhost:mysql3306.sock [hch]>show master status;
+------------------+----------+--------------+------------------+--------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                          |
+------------------+----------+--------------+------------------+--------------------------------------------+
| mysql-bin.000010 |      713 |              |                  | 7c91060d-1927-11e8-a036-000c2930f871:1-139 |
+------------------+----------+--------------+------------------+--------------------------------------------+
1 row in set (0.00 sec)

下面我们使用binlog2sql进行格式为ROW的binlog生成hch库hch表的标准SQL

[root@hch binlog2sql]# python binlog2sql.py -h localhost -u root -p mysql123 -d hch -t hch --start-file mysql-bin.000009 > 1.sql
[root@hch binlog2sql]# cat 1.sql
USE hch;
create table hch(id int not null auto_increment, cname varchar(32), primary key(id));
INSERT INTO `hch`.`hch`(`cname`, `id`) VALUES ('hch', 1); #start 480 end 643 time 2018-03-04 17:59:25
INSERT INTO `hch`.`hch`(`cname`, `id`) VALUES ('tom', 2); #start 739 end 902 time 2018-03-04 17:59:29
INSERT INTO `hch`.`hch`(`cname`, `id`) VALUES ('jerry', 3); #start 998 end 1163 time 2018-03-04 17:59:34
DELETE FROM `hch`.`hch` WHERE `cname`='hch' AND `id`=1 LIMIT 1; #start 1259 end 1442 time 2018-03-04 18:02:57
DELETE FROM `hch`.`hch` WHERE `cname`='tom' AND `id`=2 LIMIT 1; #start 1259 end 1442 time 2018-03-04 18:02:57
DELETE FROM `hch`.`hch` WHERE `cname`='jerry' AND `id`=3 LIMIT 1; #start 1259 end 1442 time 2018-03-04 18:02:57

我们可以看到,刚刚执行过的sql都生成出来了。
我们现在对hch这个库的所有操作生成反向SQL,这个时候需要在上面语句的基础上带一个-B参数,就是flashback闪回的意思:

[root@hch binlog2sql]# python binlog2sql.py -h localhost -u root -p mysql123 -d hch -t hch --start-file mysql-bin.000009 -B
INSERT INTO `hch`.`hch`(`cname`, `id`) VALUES ('jerry', 3); #start 1259 end 1442 time 2018-03-04 18:02:57
INSERT INTO `hch`.`hch`(`cname`, `id`) VALUES ('tom', 2); #start 1259 end 1442 time 2018-03-04 18:02:57
INSERT INTO `hch`.`hch`(`cname`, `id`) VALUES ('hch', 1); #start 1259 end 1442 time 2018-03-04 18:02:57
DELETE FROM `hch`.`hch` WHERE `cname`='jerry' AND `id`=3 LIMIT 1; #start 998 end 1163 time 2018-03-04 17:59:34
DELETE FROM `hch`.`hch` WHERE `cname`='tom' AND `id`=2 LIMIT 1; #start 739 end 902 time 2018-03-04 17:59:29
DELETE FROM `hch`.`hch` WHERE `cname`='hch' AND `id`=1 LIMIT 1; #start 480 end 643 time 2018-03-04 17:59:25

可以看到生成了跟上面标准SQL相反的SQL了,通过这些反向SQL可以进行误操的数据恢复。
比如我们想恢复delete命令之前的数据。

[root@hch binlog2sql]# python binlog2sql.py -h localhost -u root -p mysql123 -d hch -t hch --start-file mysql-bin.000009 --start-pos=1259 --stop-pos=1442 -B > roll_1.sql 
[root@hch binlog2sql]# cat roll_1.sql
INSERT INTO `hch`.`hch`(`cname`, `id`) VALUES ('jerry', 3); #start 1259 end 1442 time 2018-03-04 18:02:57
INSERT INTO `hch`.`hch`(`cname`, `id`) VALUES ('tom', 2); #start 1259 end 1442 time 2018-03-04 18:02:57
INSERT INTO `hch`.`hch`(`cname`, `id`) VALUES ('hch', 1); #start 1259 end 1442 time 2018-03-04 18:02:57
[root@hch binlog2sql]# mysql -uroot -pmysql123 <roll_1.sql

查看数据已经恢复

root@localhost:mysql3306.sock [hch]>select * from hch;
+----+-------+
| id | cname |
+----+-------+
|  1 | hch   |
|  2 | tom   |
|  3 | jerry |
+----+-------+
3 rows in set (0.00 sec)

标签:--,binlog2sql,start,cname,使用,hch,安装,id
From: https://www.cnblogs.com/sddll/p/18080020

相关文章

  • C# 的SmartThreadPool线程使用
    1、为什么需要使用线程池(ThreadPool)减少线程间上下文切换。线程执行一定的时间片后,系统会自动把cpu切换给另一个线程使用,这时还需要保存当前的线程上下文状态,并加载新线程的上下文状态。当程序中有大量的线程时,每个线程分得的时间片会越来越少,可能会出现线程未处理多少操作,就需......
  • 【ai学习】 扣子使用,创建自己的AI应用
     扣子介绍扣子是新一代AI大模型智能体开发平台。整合了插件、长短期记忆、工作流、卡片等丰富能力,扣子能帮你低门槛、快速搭建个性化或具备商业价值的智能体,并发布到豆包、飞书等各个平台。说白了: 扣子和GPTs一样可以帮助你创建自己的AI应用。字节扣子国内版:coze.cn......
  • 【附下载】3Ds Max从安装、配置到入门提高和高级用法
    #3DsMax一、安装1.1安装说明地址:链接:https://pan.baidu.com/s/1lwKMbgbE32wCL6PpMv706A?pwd=dll8提取码:dll8–来自百度网盘超级会员V2的分享安装说明:文件夹里有安装说明安装解压即可关键就是将crack文件放到自己的安装目录即可1.2安装小技巧尽量新建一个一个......
  • Tmux使用教程
    1安装及配置安装TmuxUbuntu或Debiansudoapt-getinstalltmuxCentOS或FedorasudoyuminstalltmuxMacbrewinstalltmux配置Tmux设置鼠标在Tmux中可用,在~/.tmux.conf文件中写入如下命令。set-gmouseon在配置完Tmux之后重新加载配置。tmuxsource~/.tmux.co......
  • windows 安装beego
    经常搞忘,记录下 在Windows系统中安装Beego框架,您可以按照以下步骤进行:步骤1:安装Go语言确保您已安装了适用于Windows的Go编程环境。访问Go官方网站下载并安装最新稳定版的Go。步骤2:配置GOPATH和环境变量在安装Go后,设置GOPATH环境变量指向您的工作区目录(例如C:\go_workspace......
  • 多线程系列(二十一) -ForkJoin使用详解
    一、摘要从JDK1.7开始,引入了一种新的Fork/Join线程池框架,它可以把一个大任务拆成多个小任务并行执行,最后汇总执行结果。比如当前要计算一个数组的和,最简单的办法就是用一个循环在一个线程中完成,但是当数组特别大的时候,这种执行效率比较差,例如下面的示例代码。longsum=0......
  • VIM使用教程
    安装ubuntu系统sudoapt-getinstallvim-gtkcentos系统yum-yinstallvim*配置sudovim/etc/vim/vimrc首先取消掉红框中的注释(即如果行开头有引号的话去掉),然后下面有一些推荐的配置命令,可以根据需要去掉引号进行配置,这里我再补充一些。setnu//在......
  • Vue3学习日记 Day3 —— Pinia的介绍及使用
    一、Pinia1、介绍 1、介绍 Pinia是Vue最新的状态管理工具,是Vuex的替代品 2、变化 2.1、去掉了modules和mutation,每一个store都是一个独立的模块 2.2、actions即可提供异步,又可提供同步,且可直接修改state数据 2.3、提供更加符合、组合式风格的API ......
  • git 使用教程
    0写在前面首先需要在电脑下载安装git,具体步骤不再赘述。1配置命令查看密钥cd~/.ssh若显示无法找到该文件则当前电脑没有ssh密钥,需要创建新的sshkey。注:在Windows系统下的位置即为“C:\Users[用户名]”文件夹。生成密钥ssh-keygen-trsa-C"[email protected]......
  • switch使用和购买指南
    switch版本:23款日版OLED机身内存大小:64GSD卡大小:512G一、switch知识点扫盲1、switch版本和购买推荐?Switch有续航版、OLED、Lite版三个,分别如下:1️⃣续航版小白首选,性价比高,但屏幕抗反射性差。......