菜鳥學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雖然可以實現備份還原,但是會丟失精度,只適合小型的數據庫
最后作業
腳本完成完全備份
腳本完成增量備份
并添加至任務計劃讓其自動執行備份
(目前個人未做出來)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。