數(shù)據(jù)庫的異地備份恢復及恢復

文中多數(shù)參考網(wǎng)友喘沿,恢復未測試其他均已測試暑劝。
如需完整版內(nèi)容留下郵箱我給你發(fā)
Mysql數(shù)據(jù)庫異地備份
一铜邮、 簡介
1.1 增量備份簡介
增量備份是指在一次全備份或上一次增量備份后,以后每次的備份只需備份與前一次相比增加或者被修改的文件酱虎。這就意味著,第一次增量備份的對象是進行全備后所產(chǎn)生的增加和修改的文件擂涛;第二次增量備份的對象是進行第一次增量備份后所產(chǎn)生的增加和修改的文件读串,如此類推聊记。這種備份方式最顯著的優(yōu)點就是:沒有重復的備份數(shù)據(jù),因此備份的數(shù)據(jù)量不大恢暖,備份所需的時間很短排监。但增量備份的數(shù)據(jù)恢復是比較麻煩的。您必須具有上一次全備份和所有增量備份磁帶(一旦丟失或損壞其中的一個增量杰捂,就會造成恢復的失斢叽病),并且它們必須沿著從全備份到依次增量備份的時間順序逐個反推恢復嫁佳,因此這就極大地延長了恢復時間挨队。
假如我們有一個數(shù)據(jù)庫,有20G的數(shù)據(jù)蒿往,每天會增加10M的數(shù)據(jù)盛垦,數(shù)據(jù)庫每天都要全量備份一次,這樣的話服務器的壓力比較大瓤漏,因此我們只需要備份增加的這部分數(shù)據(jù)腾夯,這樣減少服務器的負擔。
1.2 binlog簡介
binlog日志由配置文件的log-bin選項負責啟用蔬充,Mysql服務器將在數(shù)據(jù)根目錄創(chuàng)建兩個新文 件XXX-bin.001和xxx-bin.index蝶俱,若配置選項沒有給出文件名,Mysql將使用主機名稱命名這兩個文件饥漫,其中.index文件包含一份全體日志文件的清單榨呆。 Mysql會把用戶對所有數(shù)據(jù)庫的內(nèi)容和結(jié)構(gòu)的修改情況記入XXX-bin.n文件,而不會記錄 SELECT和沒有實際更新的UPDATE語句趾浅。
當MySQL數(shù)據(jù)庫停止或重啟時愕提,服務器會把日志文件記入下一個日志文件,Mysql會在重啟時生成一個新的binlog日志文件皿哨,文件序號遞增浅侨,此外,如果日志文件超過max_binlog_size系統(tǒng)變量配置的上限時证膨,也會生成新的日志文件如输。
二、 mysql的binlog操作
2.1開啟
修改mysql的my.cnf(Linux)或者my.ini(Windows)文件

圖 1 mysqld配置
[mysqld]

skip-grant-tables

lower_case_table_names = 1 #set case insensitivity
log-bin = logbin.log #log-bin若不顯示制定存儲目錄,則默認存儲在mysql的data目錄下
log-bin-index = logindex
expire_logs_days = 7#日志保留天數(shù)為七天
server-id=1 #在設置log-bin的同時需要設置server-id,否則會報錯
binlog_format=row #row基于行的存儲,啟動后會產(chǎn)生mysql-bin.這樣的文件,每啟動一次就會增加一個
【存在的問題】在配置的過程中嘗試使用自定義路徑央勒,但是重啟mysql一直報錯不见,未找到原因,所以咱配置默認的目錄下崔步。
【補充】log-bin若不顯示指定存儲目錄稳吮,則默認存儲在mysql的data目錄下
binlog_format的幾種格式:(STATEMENT,ROW和MIXED)
STATEMENT:基于SQL語句的復制(statement-based replication, SBR)
ROW:基于行的復制(row-based replication, RBR)
MIXED:混合模式復制(mixed-based replication, MBR)
啟動后會產(chǎn)生logbin.log.
這樣的文件井濒,每啟動一次灶似,就會增加一個或者多個列林。
2.2 查看binlog的開啟情況
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like '%log_bin%';
+---------------------------------+-------------------------------+
| Variable_name | Value |
+---------------------------------+-------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/logbin |
| log_bin_index | /var/lib/mysql/logindex.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------------------------------+
6 rows in set (0,01 sec)
mysql> show variables like '%binlog%';
+-----------------------------------------+----------------------+
| Variable_name | Value |
+-----------------------------------------+----------------------+
| binlog_cache_size | 32768 |
| binlog_checksum | CRC32 |
| binlog_direct_non_transactional_updates | OFF |
| binlog_error_action | ABORT_SERVER |
| binlog_format | ROW |
| binlog_group_commit_sync_delay | 0 |
| binlog_group_commit_sync_no_delay_count | 0 |
| binlog_gtid_simple_recovery | ON |
| binlog_max_flush_queue_time | 0 |
| binlog_order_commits | ON |
| binlog_row_image | FULL |
| binlog_rows_query_log_events | OFF |
| binlog_stmt_cache_size | 32768 |
| innodb_api_enable_binlog | OFF |
| innodb_locks_unsafe_for_binlog | OFF |
| log_statements_unsafe_for_binlog | ON |
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 104857600 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
| sync_binlog | 1 |
+-----------------------------------------+----------------------+
20 ows in set (0,00 sec)
2.3 查看binlog中的內(nèi)容
root@yyd-Lenovo:/var/lib/mysql# mysqlbinlog logbin.000001
/!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1/;
/!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0/;
DELIMITER /!/;

at 4

171026 15:41:32 server id 1 end_log_pos 123 CRC32 0x8b1b5abe Start: binlog v 4, server v 5.7.20-0ubuntu0.16.04.1-log created 171026 15:41:32 at startup

ROLLBACK/!/;
BINLOG '
rJHxWQ8BAAAAdwAAAHsAAAAAAAQANS43LjIwLTB1YnVudHUwLjE2LjA0LjEtbG9nAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACskfFZEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
Ab5aG4s=
'/!/;

at 123

171026 15:41:32 server id 1 end_log_pos 154 CRC32 0xbfc1fab3 Previous-GTIDs

[empty]

at 154

171026 15:41:39 server id 1 end_log_pos 177 CRC32 0x6d390fdc Stop

SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog / /!*/;
DELIMITER ;

End of log file

/!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE/;
/!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0/;
信息描述:
Position:位于文件中的位置,即第一行的(#at 4)和第二行的(log_pos 4)酪惭,說明該事件記錄從文件第4字節(jié)開始希痴。
Timestamp:事件發(fā)生的時間戳,即第二行的(#070813 14:16:36)
Exec_time:事件的執(zhí)行花費時間
Error_code:錯誤碼
Type 事件類型:
Master ID:創(chuàng)建二進制事件的主機服務器ID
Master Pos:事件在原始二進制文件中的位置
Flags:標志信息
2.4 數(shù)據(jù)庫的常用操作
? mysql> show master logs; #查看數(shù)據(jù)庫所有日志文件春感。
? mysql> show binlog events \g; #查看當前使用的binlog文件信息砌创。
? mysql> show binlog events in 'mysql-bin.000016'; #查看指定的binlog文件信息。
? mysql> flush logs; #將內(nèi)存中l(wèi)og日志寫磁盤鲫懒,保存在當前binlog文件中嫩实,并產(chǎn)生一個新的binlog日志文件。
? mysql> flush logs; reset master; #刪除所有二進制日志刀疙,并重新(mysql-bin.000001)開始記錄舶赔。
三、 腳本編寫
3.1 全量備份腳本
運行source databak.sh谦秧,進行全量備份竟纳,其中bucket_water_db為數(shù)據(jù)庫的名稱,/opt/mysql_log_data為數(shù)據(jù)庫的備份路徑疚鲤,’date+%Y%m%d’.sql為備份的數(shù)據(jù)庫腳本的名稱锥累。后面的兩行是定期刪除備份內(nèi)容的實現(xiàn),實際中可以刪除集歇。

圖 2 全量備份腳本內(nèi)容

圖 3 腳本文件存放位置
3.2 增量備份腳本
運行圖 3 腳本文件存放位置中的binlogbak.sh的腳本桶略,source binlogbak.sh。其中BakDir的位置設置為本地要存儲的位置诲宇,BinDir的位置設置為數(shù)據(jù)庫數(shù)據(jù)存放的文件(logbin文件的存放路徑)际歼,LogFile為binlog.log存放的位置+文件名,BinFile為index文件的絕對路徑姑蓝。在修改時只修改這四個參數(shù)就可以鹅心。

圖 4 增量備份腳本
四、 定時器開啟
在終端輸入命令:vi /etc/crontab
在最后一行添加
00 00 * * * /home/yyd/data_backup/binlogbak.sh >/dev/null 2>&1
保證每天的0點0分執(zhí)行腳本纺荧,【00 00 * * *】分別對應分 時 周 月 年旭愧,【/home/yyd/data_backup/binlogbak.sh】為腳本存放的絕對路徑。

圖 5 定時器配置
輸入以下命令使定時器生效宙暇。
crontab /etc/crontab
查看定時器是否生效
crontab –l
五输枯、 數(shù)據(jù)庫的還原
5.1 全量數(shù)據(jù)的恢復
方法1:進入數(shù)據(jù)庫,通過source

  1. mysql> use backup_full;
  2. mysql> source /tmp/backup_full.sql;
  3. mysql> select * from backup_full.full;
  4. +-----------+----------+
  5. | c1 | c2 |
  6. +-----------+-----------+
  7. | 1 | full1 |
  8. | 2 | full2 |
  9. | 3 | full3 |
  10. | 4 | full4 |
  11. | 5 | full5 |
  12. | 6 | full6 |
  13. | 7 | full7 |
  14. | 8 | full8 |
  15. | 9 | full9 |
  16. | 10 | full10 |
  17. +-----------+-----------+
    全量數(shù)據(jù)恢復成功占贫。
    5.2 直接還原數(shù)據(jù)文件

圖 6 數(shù)據(jù)恢復

圖 7 恢復第一個文件
以此類推全部回復完成
5.3 借助position來還原
那么如何借助position來還原操作呢桃熄?
假設我們現(xiàn)在向 testdb 數(shù)據(jù)庫下的表chinesetset中插入數(shù)據(jù)段('游戲','男','2017-4-3'),然后再刪除這一段數(shù)據(jù)型奥,再借助mysqlbinlog恢復到刪除之前的狀態(tài)~
插入數(shù)據(jù)段:
可見插入新的數(shù)據(jù)段在位置戳2285到2564之間蜻拨,現(xiàn)在我們刪掉('游戲','男','2017-4-3') :

用mysqlbinlog恢復到刪除數(shù)據(jù)段之前:
mysqlbinlog --start-position = P1 --stop-position=P2 E:/hostname.00000x >E:/filename.sql
mysql -u root -pdatabase_name <E:/filename.sql
P1,P2為E:/hostname.00000x中位置戳的開始點和結(jié)束點池充,該語句就是將P1到P2之間的操作轉(zhuǎn)存為 E:/filename.sql 桩引,注意此時要指明logbin的文件路徑缎讼。實踐走一波:

最后要說的是,mysqlbinlog還有有很多用法坑匠,比如 :利用時間戳血崭,利用xid等

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市厘灼,隨后出現(xiàn)的幾起案子夹纫,更是在濱河造成了極大的恐慌,老刑警劉巖设凹,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舰讹,死亡現(xiàn)場離奇詭異,居然都是意外死亡闪朱,警方通過查閱死者的電腦和手機月匣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奋姿,“玉大人锄开,你說我怎么就攤上這事〕剖” “怎么了萍悴?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寓免。 經(jīng)常有香客問我癣诱,道長,這世上最難降的妖魔是什么袜香? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任撕予,我火速辦了婚禮,結(jié)果婚禮上困鸥,老公的妹妹穿的比我還像新娘嗅蔬。我一直安慰自己,他們只是感情好疾就,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布澜术。 她就那樣靜靜地躺著,像睡著了一般猬腰。 火紅的嫁衣襯著肌膚如雪鸟废。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天姑荷,我揣著相機與錄音盒延,去河邊找鬼缩擂。 笑死,一個胖子當著我的面吹牛添寺,可吹牛的內(nèi)容都是我干的胯盯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼计露,長吁一口氣:“原來是場噩夢啊……” “哼博脑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起票罐,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叉趣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后该押,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疗杉,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年蚕礼,在試婚紗的時候發(fā)現(xiàn)自己被綠了烟具。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡闻牡,死狀恐怖净赴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罩润,我是刑警寧澤玖翅,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站割以,受9級特大地震影響金度,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜严沥,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一猜极、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧消玄,春花似錦跟伏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兔跌,卻和暖如春勘高,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工华望, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蕊蝗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓赖舟,卻偏偏與公主長得像蓬戚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子建蹄,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容