使用mysqlbinlog
來讀取日誌。
mysqlbinlog --verbose --base64-output=decode-rows mysql-bin-changelog.206572 \
| awk '/end_log_pos/{flag=0}/end_log_pos\ 12627388\ /{flag=1}flag'
從錯誤信息,這看起來就像是在行格式記錄的事件,所以mysqlbinlog
將其解碼爲僞SQL,顯示了它的順序位置,這樣的事情每一列:
### UPDATE `my_db_name`.`my_table_name`
### WHERE
### @1=70
### @2=1476602910
### @3=NULL
### @4=NULL
### @5=NULL
### @6=NULL
### @7=NULL
### SET
### @1=70
### @2=1476602910
### @3=1476602926
### @4=000000016.283000000
### @5=NULL
### @6='0'
### @7=NULL
的@1
,@2
等,在輸出爲第1列,第2列,等。二進制日誌不包含的列的實際名稱,因爲它們被認爲是在主機和從機並且它們相同因此是多餘的...所以mysqlbinlog
創建這個僞sql來說明它是如何解釋記錄的更改事件。 WHERE
是更新之前在主服務器上顯示的行的版本(這將成爲從服務器上未找到的行),SET
是主服務器上更新後的行的值(什麼是奴隸應該改變行看起來像,如果它存在)。
這不會標識您的原始查詢,但會顯示出現在主服務器上的實際行,但在從服務器上缺失。
如果您還沒有日誌,你可以從主取水的時候,首先,與此:
mysqlbinlog --host=xxxx.rds.aws-regi-on.amazonaws.com --user 'rds-master-user' \
--password='rds-master-password' --read-from-remote-server \
--raw mysql-bin-changelog.206572
日誌必須從主進賬。在這種情況下,它不能從從站讀取。 (如果這不是RDS,可以通過SSH登錄到外殼並直接讀取中繼日誌,但這些外部訪問是不可訪問的,這就是爲什麼您必須到主服務器進行日誌訪問的原因, )
除非您已經配置RDS以使您的二進制日誌保留的時間長於技術上需要的時間,否則該日誌可能不再在主服務器上可用,因此您下次可能會有些失態。您可以在RDS上配置二進制日誌記錄保留,包括MySQL 5.6和更高版本的所有RDS實例上的自定義過程。要將日誌保留設置爲24小時,例如:
CALL mysql.rds_set_configuration('binlog retention hours', 24);
又見http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html
信用的靈感source使用awk
找到兩個模式之間的線路。
請注意,在上述命令匹配並打印出發生錯誤的事件後,它可能會掛起,因爲awk
會繼續掃描到文件末尾。 Control-C終止。