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