阿里雲DBS備份檢查binlog和server_id
發表於 2018-10-30 08:14:52 by月小升
本來想買個ECS伺服器來作 ofollow,noindex">備份 機,結果發現 阿里雲 有個資料庫 備份 服務叫DBS,很便宜一個月30元。 買 備份 伺服器的預算是2000一年,DBS備份只需要360一年,顯然很划算。
阿里的OSS伺服器也不錯,很便宜,可以備份網站的其他檔案
阿里雲 DBS備份服務的檢查
月小升 估計 阿里雲 的 DBS備份和資料庫主從備份原理很相似。都是在利用資料庫底層的日誌檔案做增量備份。因為資料庫主從備份也設計兩個及其重要的因素
1.binlog
2.server_id
java-er.com的伺服器的binlog檢查和server_id檢查結果
binlog模式檢查
檢測項:源庫binlog模式檢查
檢測內容:檢查源資料庫的binlog模式是否合法
檢測結果:失敗
失敗原因:源庫binlog format 不是row
解決方案:在源庫執行:set global binlog_format=ROW,然後kill源Mysql庫當前的所有連線,否則連線中的session可能以非ROW模式繼續寫入,會導致增量資料不一致
binlog 基本認識
SQL/">MySQL的二進位制日誌可以說是MySQL最重要的日誌了,它記錄了所有的DDL和DML(除了資料查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進位制日誌是事務安全型的。
一般來說開啟二進位制日誌大概會有1%的效能損耗(參見MySQL官方中文手冊 5.1.24版)。二進位制有兩個最重要的使用場景:
其一:MySQL Replication在Master端開啟binlog,Mster把它的二進位制日誌傳遞給slaves來達到master-slave資料一致的目的。
其二:自然就是資料恢復了,通過使用
binlog工具來使恢復資料。
二進位制日誌包括兩類檔案:二進位制日誌索引檔案(檔名字尾為.index)用於記錄所有的二進位制檔案,二進位制日誌檔案(檔名字尾為.00000*)記錄資料庫所有的DDL和DML(除了資料查詢語句)語句事件。
binlog
1、Statement Level模式(早期預設)
簡介:每一條會修改資料的sql都會記錄到master的bin-log中。Slave在複製的時候sql執行緒會解析成和原來master端執行過的相同語句來執行。
優點:不需要記錄每一行資料的變化,減少bin-log的日誌量,節約IO,提高效能。因為他只記錄在master上所執行語句的細節,以及執行語句時候的上下文的資訊。
缺點:很多新功能的加入在複製的時候容易導致出現問題。
2、Row Level 模式:
簡介:日誌中會記錄成每一行資料被修改的模式,然後再slave 端在對相同的資料進行修改.
優點:在row level模式下,bin-log中可以不記錄執行的sql語句的上下文相關的資訊。僅僅只需要記錄那一條記錄被修改了。所以row level的日誌內容會非常清楚記錄下每一行資料修改的細節,非常容易理解。而且不會出現某些特點情況下的儲存過程,或function 以及triggeer的呼叫和觸發無法被正確複製的問題.
缺點:所有執行的語句當記錄到日誌中的時候,都將以每行記錄的修改來記錄,可能會產生大量的日誌呢。
3、Mixed (前兩種的混合模式):根據執行的每一條具體的sql語句來區分對待記錄日誌的形式;
4、調整模式的方法:
檢視當前:show variables like ‘$binlog_format%’;
在配置檔案修改:
[mysqld] binlog_format=mixed binlog_format=Row binlog_format=Statement
線上修改立即生效方法:
登入 mysql 後:
set session binlog_format = 'statement'; set session binlog_format ='row'; set session binlog_format ='mixed';
全域性修改:set global binlog_format = “ROW” ;
退出登入後檢視:
show variables like "%binlog_format%";
全域性修改:
set global binlog_format = "ROW" ; set global binlog_format = 'statement'; set global binlog_format = 'mixed';
範例:
全域性修改:
set global binlog_format = "ROW" ;
注意是row 模式,檢視區別
重新整理binlog: mysql admin -uroot -p123456 flush-logs
檢視binlog: mysqlbinlog –base64-output=decode-rows -v mysql-bin.000005
檢視本地機器的server_id
show variables like '%server_id%';
檢測內容
檢測項:源庫server_id檢查
檢測內容:檢查源資料庫是否設定server_id大於1
檢測結果
檢測結果:失敗
失敗原因:源庫serverid沒有設定,增量備份不能成功拉取binlog
解決方案:在源例項執行:set global server_id=某個不為1的數,然後重新進行預檢查;同時設定my.conf中server_id=某個不為1的數
參考文章
https://www.cnblogs.com/martinzhang/p/3454358.html
http://blog.51cto.com/linuxboys/1605899
- php程式碼阿里雲ECS無法smtp傳送QQ企業郵箱
- Linux 安裝百度雲,自動備份伺服器資料
- mysqlreport 安裝,報表詳解,mysql效能優化
- mysql Lost connection to MySQL server at ‘reading initial communication packet
- Centos 7 mysql 如何重啟動MariaDB篇
- mysql 呼叫,新手常犯的10個錯誤
- 阿里雲關鍵詞網際網路違規遮蔽
- 讀取mysql一個庫下面的所有的表table
- mysql底層命令,使用者分配,許可權,匯出匯入資料庫
- 對一個未知型別的資料,進行java判斷
- mysql 的 MyISAM和 InnoDB的區別
- 使用一個指令碼監控mysql程序
無特殊說明,文章均為月小升原創,歡迎轉載,轉載請註明本文地址,謝謝