天天看點

菜鳥學Linux 第078篇筆記 mysql 備份mysqldump

菜鳥學Linux 第078篇筆記 mysql 備份mysqldump

内容總覽

備份類型、備份類型詳解

備份工具

mysqldump實作備份還原

MySQL的備份和還原

備份:副本

RAID1,RAID10 保證硬體損壞而不會影響業務中止

備份類型

熱備份、溫備份、冷備份

熱備份:讀、寫不受影響

溫備份:僅可執行讀操作

冷備份:離線備份 讀、寫操作均中止

實體備份、邏輯備份

實體備份:直接複制資料檔案

邏輯備份:将資料導出至文本檔案中

完全備份、增量備份和差異備份

完全備份:備份全部資料

增量備份:僅備份上次完全備份或增量備份以後變化的資料

差異備份:僅備份上次完全備份以來變化的資料

增量和差異差別:增量是每次備份是比較與前一次的差別并進行備份

差異是與第一次完全備份作比較,并将有差異的備份

(差異相對浪費硬碟空間一些,易于管理)

備份可自由根據需求來組合

線上實體完全備份

線上邏輯增量備份...

熱備份(技術複雜度最高)

MyISAM lvm 熱備   溫備

InnoDB 支援熱備 xtrabackup, mysqldump

冷備 mysql --> 從

實體備份 速度快,移植性不是特别好

邏輯備份 速度慢,會丢失浮點數精度,

 友善使用文本處理工具直接對其處理,可移植能力強

備份政策: 完全+增量;完全+差異

資料變量的頻度,和變化量

可以忍受的還原時長

備份的東東

資料、配置檔案、二進制日志、事務日志

還原 測試,預演,多人分工,還原緊急處理方案

MySQL備份工具:

mysqldump  邏輯備份工具 冷備 MyISAM(溫) InnoDB(熱)

mysqlhostcopy  實體備份工具 溫備份

檔案系統工具

cp 冷備

lv 邏輯卷的快照功能,幾乎熱備

mysql> FLUSH TABLES;

mysql> LOCK TABLES;

建立快照:釋放鎖,而後複制資料即可

InnoDB:

第三組工具:

ibbackup (InnoDB) 商業工具

xtrabackup 開源工具

mysqldump 邏輯備份

mysqldump (完全備份) + 二進制日志

完全+增量

mysqldump DB_NAME [tb1] [tb2] 

--master-data={0|1|2}

0 不記錄二進制日志檔案及其事件位置

1 以CHANGE MASTER TO方式記錄位置,可用于恢複後直接啟動從伺服器

2 以CHANGE MASTER TO的方式記錄位置,但預設被注釋

--lock-all-tables  鎖定所有表

--flush-logs  執行日志flush

如果指定庫中的表類型均為InnoDB,可使用--single-transaction啟動熱備

(不要和--lock-all-tables一起使用)

--events

--routines

--triggers

備份多個庫

--all-databases  備份所有庫

--databases DB_NAME1,DB_NAME2 備份指定庫

(使用此種備份,恢複時則不需要自己手動建立資料庫名)

實驗備份和還原

備份政策: 每周完全+每日增量

完全備份:mysqldump

增量備份:備份二進制日志檔案(flush logs)

1.備份資料庫

完全備份(備份檔案要放在其它硬碟這裡做測試是以隻是放在其它目錄裡了)

# mysqldump -uroot -p --master-data=2 --flush-logs --all-databases \

--lock-all-tables > /root/all-dbs.sql 

(此為一行指令)

mysql> PURGE BINARY LOGS TO 'mysql-bin.000007'; (不建議删除,隻是為了做測試)

可以備份後再删除掉

做增量備份(第二天)

mysql> FLUSH LOGS;

将滾動後的日志備份(直接複制即可) 前邊的目錄是二進制日志所放目錄

cp /mydata/data/mysql-bin.000007 /root/binary-`date +%Y-%m-%d`.sql

mysqlbinlog /mydata/data/mysql-bin.000007 > /root/monday-incremental.sql

(推薦此上條備份二進制日志檔案)

第三天做增量和此一樣   模拟此天不小心把資料庫給删除了

(但是造成不要把二進制日志删除了哈,,這要沒了就挂了)

先将二進制檔案複制出來

cp /mydata/data/mysql-bin.000008 > /root/mysql-bin.000008.sql

# rm -rf /mydata/data/* (模拟資料庫損壞)

還原資料庫

由于我模拟的太暴力直接把庫檔案也給删除了是以需要重新初始化資料庫

# killall mysqld

初始化資料庫

# ./scripts/mysql_install_db --user=mysql --datadir=/mydata/data

還原完全備份

# mysql -uroot -p < /root/all-dbs.sql

導入增量備份

# mysql -uroot -p < /root/monday-incremental.sql (使用的是mysqlbinlog)

最後一步把最後一次的二進制日志導入到資料庫

# mysqlbinlog mysql-bin.000008.sql | mysql -uroot -p

(到此步便為即時點還原)

mysqldump雖然可以實作備份還原,但是會丢失精度,隻适合小型的資料庫

最後作業 

腳本完成完全備份

腳本完成增量備份

并添加至任務計劃讓其自動執行備份

(目前個人未做出來)

本文轉自Winthcloud部落格51CTO部落格,原文連結http://blog.51cto.com/winthcloud/1891676如需轉載請自行聯系原作者

Winthcloud