日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql闪回工具之binlog2sql的原理及其使用

發(fā)布時間:2025/3/8 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql闪回工具之binlog2sql的原理及其使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

生產(chǎn)上誤刪數(shù)據(jù)、誤改數(shù)據(jù)的現(xiàn)象也是時常發(fā)生的現(xiàn)象,作為運(yùn)維這時候就需要出來補(bǔ)鍋了,最開始的做法是恢復(fù)備份,然后從中找到需要的數(shù)據(jù)再進(jìn)行修復(fù),但是這個時間太長了,對于大表少數(shù)數(shù)據(jù)的修復(fù)來講,動作太大,成本也大。

當(dāng)然還有其他的一些操作方法,我們今天有主角。

?

MySQL 閃回工具 --?? binlog2sql

用途

  • 數(shù)據(jù)回滾
  • 主從切換后數(shù)據(jù)不一致的修復(fù)
  • 從 binlog 生成標(biāo)準(zhǔn) SQL,帶來的衍生功能

?

閃回原理簡析

開始之前,先說說閃回。我們都知道 MySQL binlog 以 event 為單位,記錄數(shù)據(jù)庫的變更信息,這些信息能夠幫助我們重現(xiàn)這之間的所有變化,也就是所謂的閃回。

binlog 有三種可選的格式:

  • statement:基于 SQL 語句的模式,binlog 數(shù)據(jù)量小,但是某些語句和函數(shù)在復(fù)制過程可能導(dǎo)致數(shù)據(jù)不一致甚至出錯;
  • mixed:混合模式,根據(jù)語句來選用是 statement 還是 row 模式;
  • row:基于行的模式,記錄的是行的完整變化。安全,但 binlog 會比其他兩種模式大很多;

利用 binlog 做閃回,需要將 binlog 格式設(shè)置為 row,因為我們需要最詳盡的信息來確定操作之后數(shù)據(jù)不會出錯。

既然 binlog 以 event 形式記錄了所有的變更信息,那么我們把需要回滾的 event,從后往前回滾回去即可。

回滾操作:對于 delete 操作,我們從 binlog 提取出 delete 信息,反向生成 insert 回滾語句; 對于 insert 操作,反向生成 delete 回滾語句; 對于 update 操作,根據(jù)信息生成反向的 update 語句;

?

竟然這么厲害??

?

來實(shí)例演習(xí)下

主要測試 DML,也就是 delete、update、insert 等操作的閃回效果。

但是,DDL 語句,比如drop,truncate 在整個使用中都是無法被回滾的,這種情況,只能用最近的備份數(shù)據(jù)+二進(jìn)制日志恢復(fù)

本次實(shí)驗,更改一條數(shù)據(jù),并刪除一條數(shù)據(jù),然后從解析 binlog 信息,到使用 binlog2sql 工具來生成標(biāo)準(zhǔn)和回滾 SQL,來剖析整個運(yùn)行過程。

?

一、準(zhǔn)備工作

1.確定版本信息和binlog格式

? mysql版本:5.7.12

?

? ?查看binlog格式的命令

mysql> show variables like 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+

?

2.安裝binlog2sql工具? ? ?#(隨便安裝在合適的服務(wù)器即可,比如我在內(nèi)網(wǎng)15安裝了一個)

? ?安裝參考鏈接:http://note.youdao.com/noteshare?id=85a90269a21d877962bfce0dfa40a90b&sub=71CD3E637F534AA1AFF129563F6A064E

?

3.在mysql的主服務(wù)器上,創(chuàng)建閃回操作賬號的權(quán)限?

mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'glon'@'%' identified by '123456';
mysql
> show grants for 'glon'@'%'; +--------------------------------------------------------------------------+ | Grants for glon@% | +--------------------------------------------------------------------------+ | GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'glon'@'%' | +--------------------------------------------------------------------------+ 1 row in set (0.00 sec)

?

?

4.初始化數(shù)據(jù)? ??

CREATE TABLE `edai_binlog2sql` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `create_time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8insert into edai_binlog2sql (name,create_time) values ('Glon Ho','2012-10-1'),('Eason Chan', '2016-05-02'),('Jacky Cheung', '2015-05-02');mysql> select * from edai_binlog2sql; +----+--------------+---------------------+ | id | name | create_time | +----+--------------+---------------------+ | 4 | Glon Ho | 2012-10-01 00:00:00 | | 5 | Eason Chan | 2016-05-02 00:00:00 | | 6 | Jacky Cheung | 2015-05-02 00:00:00 | +----+--------------+---------------------+ 3 rows in set (0.00 sec)

?

  • 進(jìn)行 update 和 delete 操作
mysql> update edai_binlog2sql set create_time = '2017-05-12' where name = 'Glon Ho'; Query OK, 1 row affected (0.05 sec) Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from edai_binlog2sql; +----+--------------+---------------------+ | id | name | create_time | +----+--------------+---------------------+ | 4 | Glon Ho | 2017-05-12 00:00:00 | | 5 | Eason Chan | 2016-05-02 00:00:00 | | 6 | Jacky Cheung | 2015-05-02 00:00:00 | +----+--------------+---------------------+ 3 rows in set (0.00 sec)mysql> delete from edai_binlog2sql where name = 'Jacky Cheung'; Query OK, 1 row affected (0.09 sec)mysql> select * from edai_binlog2sql; +----+------------+---------------------+ | id | name | create_time | +----+------------+---------------------+ | 4 | Glon Ho | 2017-05-12 00:00:00 | | 5 | Eason Chan | 2016-05-02 00:00:00 | +----+------------+---------------------+ 2 rows in set (0.00 sec)


操作時候,Glon Ho 的時間改變了,而 Jacky Cheung 也被刪除了。

我們來看下mysql的binlog文件位置

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 6159854 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

?

?

好的,接下來使用binlog2sql工具? ?#這個工具我們安裝在15服務(wù)器上的,我們?nèi)?5上操作

1)解析出標(biāo)準(zhǔn)的SQL

python binlog2sql.py -h192.168.1.21 -P30136 -uglon -p'123456' -d xcrm -t edai_binlog2sql? --start-file=mysql-bin.000001 > edai_binlog2sql.sql

參數(shù)解釋:
-h:數(shù)據(jù)庫服務(wù)地址
-u:連接用戶名 -p:密碼
-P:端口
-d:數(shù)據(jù)庫名 -t:表名
?--start-file: 通俗的來講就是,要解析sql的所在的binglog文件
--flashback: 閃回,逆向解析sql語句

?

cat?edai_binlog2sql.sql

?

?

可以看到,幾乎完美重現(xiàn)了我們上面執(zhí)行過的 SQL,而且生成的每個 SQL 后面都帶有該語句在 binlog 中的 position 信息和該語句的執(zhí)行時間

?

2)解析想要回滾的SQL

比如,我想回滾剛剛操作的,edai_binlog2sql 后面兩個update和DELETE操作

找到的時間節(jié)點(diǎn)就是:start 6159262? ?end 6159823? ? #分析最好用pos分析,這個可以更準(zhǔn)確的定位到想要的

?python binlog2sql.py? --flashback? -h192.168.1.21 -P30136 -uglon -p'123456' -dxcrm -tedai_binlog2sql --start-file=mysql-bin.000001 --start-position=6159262? ? --stop-pos=6159823 > edai_binlog2sql-new.sql?

?

[root@soft binlog2sql]# cat edai_binlog2sql-new.sql INSERT INTO `xcrm`.`edai_binlog2sql`(`create_time`, `id`, `name`) VALUES ('2015-05-02 00:00:00', 6, 'Jacky Cheung'); #start 6159565 end 6159823 time 2018-11-22 15:16:30 UPDATE `xcrm`.`edai_binlog2sql` SET `create_time`='2012-10-01 00:00:00', `id`=4, `name`='Glon Ho' WHERE `create_time`='2017-05-12 00:00:00' AND `id`=4 AND `name`='Glon Ho' LIMIT 1; #start 6159262 end 6159534 time 2018-11-22 15:15:46

?

可以看到,我們剛剛的delete語句,被反轉(zhuǎn)為insert語句,update 修改為原來的時間

拿到了具體的恢復(fù)語句

那我們拿去數(shù)據(jù)庫執(zhí)行吧

?

好了,完美搞定?

?

轉(zhuǎn)載于:https://www.cnblogs.com/tianfen/p/10001807.html

總結(jié)

以上是生活随笔為你收集整理的Mysql闪回工具之binlog2sql的原理及其使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色av影院| 黄色a区| 精品美女一区二区 | 婷婷激情影院 | 午夜av中文字幕 | 深夜在线视频 | 影音先锋在线视频观看 | 久久免费资源 | 57pao成人国产永久免费视频 | 在线免费福利 | 日日碰狠狠添天天爽无码av | 黑人巨大国产9丨视频 | 东方av在线免费观看 | 国产成人一区二区三区视频 | 一级免费a | melody在线高清免费观看 | 精品国产一区在线观看 | 素人一区 | 在线视频亚洲色图 | 潘金莲一级淫片aaaaa | 黄色中文字幕在线观看 | 欧美色图亚洲自拍 | 人人爽在线 | 手机av在线播放 | 国产91免费在线观看 | 在线观看亚洲视频 | 性生交大全免费看 | www.浪潮av.com| 秋霞午夜视频 | 波多野结衣福利 | 97精品国产97久久久久久春色 | 三年中文免费观看大全动漫 | 粉嫩aⅴ一区二区三区四区五区 | 欧美激情免费观看 | 国产精品自拍av | 红桃视频隐藏入口 | 日本中文字幕免费观看 | 奇米av在线 | 国产精品日韩一区二区三区 | 操少妇视频 | 网友自拍一区 | 不卡影院| 视频一区三区 | 91aaaa| 日本三级视频网站 | 超碰2022| 亚洲精品视频在线观看免费 | 国产精彩视频在线 | 仙踪林久久久久久久999 | 91久久人澡人人添人人爽欧美 | 色哥网| 男女国产视频 | 四季av国产一区二区三区 | 国内成人免费视频 | 黄色av毛片 | 宅男噜噜噜66一区二区 | 五月激情五月婷婷 | www.日本黄 | 免费精品视频在线观看 | 99久久精品久久久久久清纯 | 亚洲论理 | 日韩精品一区二区亚洲av | 动漫女被黄漫免费视频 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 男人和女人日批视频 | 另类少妇人与禽zozz0性伦 | 久久久综合av | 91av在线看 | 91丝袜| 打屁股调教视频 | 亚洲欧美日韩国产一区二区 | 91在线精品秘密一区二区 | 全黄一级片| 欧美黄色短视频 | 日韩欧美中字 | 狠狠操一区二区 | 久草手机在线 | 亚洲午夜精品一区二区三区 | 精品熟妇视频一区二区三区 | 涩涩网站入口 | 欧美在线一级视频 | 影音先锋亚洲成aⅴ人在 | 美女的诞生免费观看在线高清 | 成人免费无码大片a毛片 | 日韩在线观看你懂的 | 国产免费无码一区二区视频 | 91成人短视频 | 波多野结衣在线免费视频 | 日本特级黄色片 | 影音先锋伦理片 | 国产成人自拍偷拍 | 在线播放第一页 | 亚洲精品免费视频 | 亚洲欧美日韩在线一区 | 精品视频亚洲 | 黄色在线a| 一级黄色视 | 欧美三级黄| 免费黄av|