真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql誤刪除數(shù)據(jù)-數(shù)據(jù)回滾

MySQL 誤刪除

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、網(wǎng)站建設(shè)與策劃設(shè)計(jì),青云譜網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:青云譜等地區(qū)。青云譜做網(wǎng)站價(jià)格咨詢:13518219792

本次使用的原美團(tuán)開源Mysql 數(shù)據(jù)閃回工具

傳送門:https://github.com/Meituan-Dianping/MyFlash

一,簡介

MyFlash的前身是binlong2,后續(xù)是由美團(tuán)點(diǎn)評公司技術(shù)工程部開發(fā)維護(hù)的一個(gè)回滾DML操作的工具。該工具通過解析V4版本的二進(jìn)制日志,完成回滾操作。相對已有的回滾工具,其增加了更多的過濾選項(xiàng),讓回滾更加容易。 該工具已經(jīng)在美團(tuán)點(diǎn)評內(nèi)部使用

二,限制

  1. 二進(jìn)制日志格式必須為【row】行級模式 ,且binlog_row_image =full
  2. 僅支持5.6與5.7 (如果是低版本的mysql 二種方案 1,升級mysql 2,使用binlog2)
    binlog2sql工具的下載地址:
  3. 只能回滾DML(增,刪,改)

    三,詳細(xì)說明

    3.1 安裝部署

    git clone https://github.com/Meituan-Dianping/MyFlash.git
    cd MyFlash/
    [root@gitlab MyFlash]# yum install glib2*
    [root@gitlab MyFlash]# gcc -w  `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c  -o binary/flashback
    #動(dòng)態(tài)編譯

    mysql 誤刪除數(shù)據(jù)-數(shù)據(jù)回滾

3.2 開啟mysql-binlog

[root@gitlab mysql]# cat /etc/my.cnf|grep "log_bin*"
# log_bin
log-bin=mysql-bin  #名字前綴
log_bin=/var/lib/mysql/mysql-bin  #路徑
log_bin_index=/var/lib/mysql/mysql-bin.index  #索引
binlog_format=row   #binlog模式 (行、混合、sql語句)
max_binlog_size = 512M #單個(gè)文件大小
expire_logs_day = 30 #保留最近30天
server-id = 1 #ID編號

[root@gitlab mysql]# /etc/init.d/mysqld restart
Restarting mysqld (via systemctl):                         [  OK  ]
登陸mysql 查看binlog開啟情況
mysql> show variables like '%log_bin%'

mysql 誤刪除數(shù)據(jù)-數(shù)據(jù)回滾
注意:此工具必須使用row 行級模式

show variables like  'binlog%'; 
##行級模式缺點(diǎn),binlog日志會增大 原來的3倍  優(yōu)點(diǎn):相對安全

mysql 誤刪除數(shù)據(jù)-數(shù)據(jù)回滾

3.3 使用方法

cd binary
./flashback --help

Usage:
  flashback [OPTION...]

Help Options:
  -?, --help                  Show help options

Application Options:
  --databaseNames            指定需要回滾的數(shù)據(jù)庫名。多個(gè)數(shù)據(jù)庫可以用“,”隔開。如果不指定該參數(shù),相當(dāng)于指定了所有數(shù)據(jù)庫。
  --tableNames                指定需要回滾的表名。多個(gè)表可以用“,”隔開。如果不指定該參數(shù),相當(dāng)于指定了所有表。
  --start-position            指定回滾開始的位置。如不指定,從文件的開始處回滾。請指定正確的有效的位置,否則無法回滾

  --stop-position          指定回滾結(jié)束的位置。如不指定,回滾到文件結(jié)尾。請指定正確的有效的位置,否則無法回滾
  --start-datetime           指定回滾的開始時(shí)間。注意格式必須是 “2016-11-17 14:40:00。 如不指定,則不限定時(shí)間
  --stop-datetime          指定回滾的結(jié)束時(shí)間。注意格式必須是 %Y-%m-%d %H:%M:%S。 如不指定,則不限定時(shí)間
  --sqlTypes                 指定需要回滾的sql類型。目前支持的過濾類型是INSERT, UPDATE ,DELETE。多個(gè)類型可以用“,”隔開。
  --maxSplitSize              一旦指定該參數(shù),對文件進(jìn)行固定尺寸的分割(單位為M),過濾條件有效,但不進(jìn)行回滾操作。該參數(shù)主要用來將大的binlog文件切割,防止單次應(yīng)用的binlog尺寸過大,對線上造成壓力
  --binlogFileNames          指定需要回滾的binlog文件,目前只支持單個(gè)文件,后續(xù)會增加多個(gè)文件支持
  --outBinlogFileNameBase   指定輸出的binlog文件前綴,如不指定,則默認(rèn)為binlog_output_base.flashback
  --logLevel                  僅供開發(fā)者使用,默認(rèn)級別為error級別。在生產(chǎn)環(huán)境中不要修改這個(gè)級別,否則輸出過多
  --include-gtids            指定需要回滾的gtid,支持gtid的單個(gè)和范圍兩種形式。
  --exclude-gtids            指定不需要回滾的gtid,用法同include-gtids(跳過)

3.4 測試用例

1) 測試環(huán)境介紹:

[root@gitlab binary]# cat /etc/redhat-release   #系統(tǒng)版本7.4
CentOS Linux release 7.4.1708 (Core) 
[root@gitlab binary]# uname -a   #系統(tǒng)內(nèi)核3.10 64位
Linux gitlab.example.com 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@gitlab binary]# mysql -V      #mysql 版本
mysql  Ver 14.14 Distrib 5.6.39, for Linux (x86_64) using  EditLine wrapper

2)模擬數(shù)據(jù)
我這里把測試庫的一些數(shù)據(jù)拿啦,直接導(dǎo)入sql作為案例使用

 SELECT * FROM `sys_member_msg` WHERE id <=666

mysql 誤刪除數(shù)據(jù)-數(shù)據(jù)回滾
3) 模擬誤刪除

    delete from `sys_member_msg` where id<=666  #在查看id小于666的就顯示空了

mysql 誤刪除數(shù)據(jù)-數(shù)據(jù)回滾
4)回滾指定文件中的所有【插入、刪除、修改】語句
row行級模式 查看binlong,需要添加參數(shù)(--base64-output=decode-rows -v)對輸出結(jié)果解碼。

4.1 查看開啟binlong

mysql> show variables like 'log_%'; 
+----------------------------------------+--------------------------------+
| Variable_name                          | Value                          |
+----------------------------------------+--------------------------------+
| log_bin                                | ON                             |
| log_bin_basename                       | /var/lib/mysql/mysql_bin       |
| log_bin_index                          | /var/lib/mysql/mysql-bin.index |

13 rows in set (0.00 sec)

4.2 查看最新binlog位置

mysql> show master status;  #查看最新binlog位置
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000007 | 16696881 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4.3 生成回滾數(shù)據(jù)文件

[root@gitlab binary]# time ./flashback  --sqlTypes='DELETE' --binlogFileNames=/var/lib/mysql/mysql_bin.000007

real    0m0.053s
user    0m0.015s
sys 0m0.035s
#參數(shù)意思 看上面用法介紹
#比如:開始時(shí)間  -結(jié)束時(shí)間 --DML語句類型(增刪改)、post點(diǎn)、大數(shù)據(jù)要拆分
#默認(rèn)產(chǎn)生一個(gè)binlog_output_base.flashback文件

mysql 誤刪除數(shù)據(jù)-數(shù)據(jù)回滾
4.4 恢復(fù)到數(shù)據(jù)庫

[root@gitlab binary]# mysqlbinlog binlog_output_base.flashback |mysql -uroot -p
Enter password:  #輸入mysql密碼
#沒有反饋,應(yīng)該OK了

3.5查看數(shù)據(jù)回滾情況

SELECT * FROM `sys_member_msg` WHERE id <=666

mysql 誤刪除數(shù)據(jù)-數(shù)據(jù)回滾

四 總結(jié):

1,myflash 只支持 row 模式,如果你現(xiàn)在的binlog是其它模式,切換的時(shí)候,會影響主從同步
2,row模式很安全,但是binlog數(shù)據(jù)量會增加 3-5倍
3,查看row模式下的binlog 需要添加參數(shù)(--base64-output=decode-rows -v)對輸出結(jié)果解碼
4,必要給開發(fā)生產(chǎn)數(shù)據(jù)庫開放權(quán)限,讓他們select去吧
5,篩選恢復(fù)數(shù)據(jù)有很多比如:開始時(shí)間 -結(jié)束時(shí)間 --DML語句類型(增刪改)、post點(diǎn)、大數(shù)據(jù)要拆分后逐去恢復(fù) 等等
mysql 誤刪除數(shù)據(jù)-數(shù)據(jù)回滾

最后希望所有運(yùn)維的同志們,不在背鍋,遠(yuǎn)離背鍋。。。。

mysql 誤刪除數(shù)據(jù)-數(shù)據(jù)回滾


名稱欄目:mysql誤刪除數(shù)據(jù)-數(shù)據(jù)回滾
標(biāo)題來源:http://weahome.cn/article/geoidi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部