1. 程式人生 > >mysql如何使用延遲複製拯救你的誤操作(及sql_slave_skip_counter的含義)

mysql如何使用延遲複製拯救你的誤操作(及sql_slave_skip_counter的含義)

說明:本文所述內容都是是基於mysql 5.5.x及mairadb 10.0.x 版本

如果是mysql5.6 及其以上版本可使用:CHANGE MASTER TO MASTER_DELAY = N;N為多少秒,該語句設定從資料庫延時N秒後,再與主資料庫進行資料同步複製。具體介紹詳見 :MySql 5.6 CHANGE MASTER語法 。

       為了資料庫安全,作為dba很多時候都絞盡腦汁進行各種控制權限,各種操作限制,但無論如何不管怎麼控制,如果是dba自己操作特別是drop table ,truncate,delete等難免會出現失誤的時候。也許你說你有備份,但是停機恢復不是什麼公司都能承受的而且恢復起來也很不方便。所以,這裡簡單介紹通過mysql“延遲複製”來為你資料庫實現平滑的邏輯恢復。

1,mysql5.5.x 版本如何實現“延遲複製“

這裡使用的是percona-toolkit-2.2.5-1 工具,如果你還不清楚它,請點選:percona-toolkits 介紹

用例:

/usr/bin/pt-slave-delay --user=${USER_NAME} --password=${PASS_WORD} --port=${PORT} --daemonize --interval=5m --delay=8h --use-master  123.111.222.110(備庫ip)

上述表示每個5分鐘檢查slave是否需要啟動或停止,slave設定比master延遲8小時,binlog點是以master為標準,指令碼以守護程序的方式在後臺執行

延遲效果如圖(1):


                                                        圖 1

當指令碼檢查複製延遲操過了設定的時間那麼就會啟動sql執行緒進行追趕知道延遲8小時則停止。

注:因為指令碼每隔5分鐘才檢查一次複製情況所以實際延遲其實是8小時5分

追趕主庫期間效果如圖(2)


2,如何使用”延遲複製“進行恢復

a),主庫操作如下(啟用自動提交模式):

insert into t values(111);

insert into t values(222);

insert into t values(333);

start transaction;   --開啟一個事務   假如該事務是誤操作 ###

insert into t values(444);   

insert into t values(555);

commit;                --提交事務

insert into t values(666);

檢視binlog日誌:


b),備庫操作如下

 start slave until master_log_file='mysql-bin.0000012' ,MASTER_LOG_POS = 872;  

告訴mysql複製執行到master binlog 0000012 中end_log_pos為872的位置然後停止

然後檢視:

MariaDB [test]> select * from t;
+------+
| id   |
+------+
|  111 |
|  222 |
|  333 |
+------+

發現按照預期的結果複製

現在需要跳過 444,555兩條記錄 故執行  stop slave ; set global sql_slave_skip_counter=1; start slave;

最後show slave status \G 


說明已經執行到了最後的一個end_log_pos 1294。最後查看錶裡的資料

MariaDB [test]> SELECT * FROM T;
+------+
| id   |
+------+
|  111 |
|  222 |
|  333 |
|  666 |
+------+

ok,成功跳過了記錄為444,555的插入操作。

PS:

關於這裡set global sql_slave_skip_counter=1;需要多解釋一下 很多小夥伴都會想當然的認為該語句是跳過一條語句,這裡其實是的分情況的: 一般來說(自動提交模式)每次執行一條插入或更新或刪除操作,那麼執行上述跳過語句你可以認為是一次跳過一條語句,但是如果是使用start transaction(非自動提交模式)那麼情況就不大一樣了,這個時候的跳過是按照事物進行跳躍的。

參考:

相關推薦

mysql如何使用延遲複製拯救操作sql_slave_skip_counter含義

說明:本文所述內容都是是基於mysql 5.5.x及mairadb 10.0.x 版本 如果是mysql5.6 及其以上版本可使用:CHANGE MASTER TO MASTER_DELAY = N;N為多少秒,該語句設定從資料庫延時N秒後,再與主資料庫進行資料同步複製

lua 連線mysql資料庫實現增刪改查操作linux下示例

(1)linux下連線資料庫: mysql -u root -p,-u 指定登入使用者,-p 指定密碼。 [[email protected]18 develop]$ mysql -u root -p Enter password: Welcome to the MySQ

MYSQL中常用的強制性操作例如強制索引

結果 HERE 推薦 pda 排序 copy int 提交數據 date mysql常用的hint 對於經常使用oracle的朋友可能知道,oracle的hint功能種類很多,對於優化sql語句提供了很多方法。同樣,在mysql裏,也有類似的hint功能。下面介紹一些常用

Mysql的基本操作增刪改查

it行業 delet HERE zha 不重復 incr sch table watermark 以下是MySQL最基本的增刪改查語句,創建索引,刪除索引,查看索引。數據庫裏表的關聯。很多IT工作者都必須要會的命令,也是IT行業面試最常考的知識點,由於是入門級基礎命令

mysql-資料記錄相關操作增刪改查許可權管理

一、介紹 在MySQL管理軟體中,可以通過SQL語句中的DML語言來實現資料的操作,包括 使用INSERT實現資料的插入 UPDATE實現資料的更新 使用DELETE實現資料的刪除 使用SELECT查詢資料以及。 二、插入資料 1. 插入完整資料(順序插入) 語法一:

SpringBoot微服務 +tomcat叢集+Ngnix負載均衡+Mysql主從複製,讀寫分離4

四:mysql主從複製,讀寫分離 1.首先把mysql原始碼包檔案拷到兩臺linux伺服器上,然後在兩臺伺服器上安裝Mysql資料庫 安裝 MySQL 1 安裝 ncurses Ncurses 提供字元終端處理庫,包括面板和選單。它提供了

[MySQL複製] SQL_ERROR 1032解決辦法non-gtid env

一、緣由:   在主主同步的測試環境,由於業務側沒有遵循同一時間只寫一個點的原則,造成A庫上刪除了一條資料,B庫上在同時更新這條資料。 由於非同步和網路延時,B的更新event先到達A端執行,造成A端找不到這條記錄,故SQL_THREAD報錯1032,主從同步停止。   二、錯誤說明:  

MYSQL資料庫,資料表簡單操作

資料型別 整形 TINTINT 1bt SMALLINT 2bt MEDIUMINT 3bt INT 4bt BIGINT 8bt 浮點型 FLOAT(8,2) 總共8位2位小數 4bt DOUBLE 8bt 字元型 CHAR固定位數空格

windows下 mysql 主從複製 2臺伺服器操作

為什麼要主從同步? 在Web應用系統中,資料庫效能是導致系統性能瓶頸最主要的原因之一。尤其是在大規模系統中,資料庫叢集已經成為必備的配置之一。叢集的好處主要有:查詢負載、資料庫複製備份等。其中Ma

MySQL新增觸發器簡單例項全程操作包含建立表部分

~~語法~~ CREATE TRIGGER <觸發器名稱>  --觸發器必須有名字,最多64個字元,可能後面會附有分隔符.它和MySQL中其他物件的命名方式基本相象.{ BEFORE | AFTER }  --觸發器有執行的時間設定:可以設定為事件發生前或後。{ INSERT | UPDATE 

MySQL之——如何防止人為操作MySQL資料庫

今天,一位原公司的同事,打電話來問我說誤操作了資料庫資料,如何恢復。他原本的想法是登入資料庫update一個記錄,結果忘了加where,於是悲劇發生了。今天,我們不講如何恢復誤操作的資料,我們講講如

Python的mysql操作事務、遊標

1、mysql事務 MySQL事務主要用於處理操作量大,複雜度高的資料。 比如,你操作一個數據庫,公司的一個員工離職了,你要在資料庫中刪除他的資料,也要刪除該人員相關的,比如郵箱,個人資產等。這些資料庫操作語言就構成了一個事務。 在MySQL中只有使用了Innodb資料

mysql處理多表更新數據1000萬級別

多表 upd sql 更新數據 更新 數據 mysql bsp where 1、 表A(id,code,name,sex)表B(id,Aid,code,name,sex)B表中字段Aid為A表中的id.用一條語句將A表中code更新到B表中code中。 UPDATE A

3.2 re--正則表達式操作Regular expression operations

rac code trac ont 性能 font reg 解決 字符串查找 本模塊提供了正則表達式的匹配操作,它的功能跟Perl語言裏的功能一樣。 不管是Unicode字符串還是單字節8位組成的字符串,都能夠使用模式匹配和字符串查找的功能。只是要註意的是Unicode字

day1作業二:多級菜單操作函數實現

數據庫 語句 會有 是否 臺灣 inpu return .com {} 作業二:多級菜單 (1)三級菜單 (2)可以次選擇進入各子菜單 (3)所需新知識點:列表、字典 要求:輸入back返回上一層,輸入quit退出整個程序 本示例的三級菜單是一個yaml文件格式,格式如下:

MySQL 高可用:mysql+mycat實現數據庫分片分庫分表

native 分布 for 成功 img 問題 represent apache 新一代 本文引用於http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat實現數據庫分片(

內核運行時數據結構的操作啟用路由功能,sysctl內核設置命令

etc class 方式 con ipv4 lin spa 系統 ont LINUX系統運行時,內核數據結構數據的修改,系統提供了統一抽象的文件操作接口(命名空間操作接口)比如啟用路由功能echo 1 > proc/sys/net/ipv4/ip-forward/

mongodb 集合操作 增刪改查

有變 添加 port strong ner 速度 遊標 基礎 ror 1、插入: 使用insert或save方法想目標集合插入一個文檔: db.person.insert({"name":"ryan","age":30}); 使用batchInser

Java中Dao模式中Dao的數據庫操作BaseDao的寫法

nec roo sql rac 127.0.0.1 關閉 ron [] cnblogs Dao模式是Java面向設計時的一種模式。而Dao中的BaseDao無非是對數據進行CURD(增刪改查),下面是最常用的連接,增刪改查的方法。 1 package dao;

laravel中的數據庫操作增刪改查方法一

-s delet 增刪 insert 修改 name tro des 命名空間 導入命名空間和DBnamespace App\Http\Controllers;use Illuminate\Support\Facades\DB; public function index