您好,登錄后才能下訂單哦!
菜鳥學Linux 第079篇筆記 mysql備份lvm
內容總覽
上節知識點補充
單表的導出導入
LVM創建快照實現數據庫備份
上節少了一點知識點
使用mysqldump備份還原時 要臨時將sql_log_bin關閉(臨時性的關閉二進制日志記錄)
因為還原時所生成的二進制日志對于下一次備份時是沒有用的,所以在還原時要關閉二進制
日志記錄 切記切記
SET sql_log_bin=0; 關閉
導入使用
mysql> \. /path/backup.sql
SET sql_log_bin=1; 開啟
mysqldump
--databases DB1,DB2
--all-databases
--flush-logs
--routines
--triggers
--master-data={0|1|2}
MyISAM 溫備份
--lock-all-tables
--lock-table
InnoDB 熱備份
--single-transaction
邏輯備份
1. 浮點數據丟失精度;
2. 備份的數據更點用存儲空間,壓縮后可大大節省空間
3. 不適合對大數據庫做完全備份
INNODB
SHOW ENGINES INNODB STATUS;
mvcc, REPEATABLE-READ
--single-transaction
直接將表導出不添加任何信息
mysql> SELECT * INTO OUTFILE '/path/file_name.txt' FROM tb_name [WHERE]
mysql> SELECT * INTO OUTFILE '/tmp/tutor.txt' FROM tutors;
(注意所給的系統路徑 必須mysql用戶可以訪問的目錄 )
還原導出的表
導入之前需要重新建立表,和對應的列名稱及其屬性
mysql> CREATE TABLE tutor LIKE tutors;
mysql> LOAD DATA INFILE '/tmp/tutor.txt' INTO TABLE tutor;
此種方式僅做單張表備份,速度快 (且不會寫進二進制日志文件里)
幾乎熱備 LVM
snapshot
前提
1. 數據文件要在邏輯卷上
2. 此邏輯卷所在卷組必須有足夠空間使用快照卷
3. 使用快照熱備 數據文件和事務日志必須在一個邏輯卷里
1. 鎖表
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;
mysql> SHOW MASTER STATUS;
此時切記不要退出會話, 要新建立一個會話執行如下命令
# mkdir /backup
# mysql -e "SHOW MASTER STATUS\G;" > /backup/master-`date +%F`.info
2. 創建快照并備份數據
# lvcreate -L 50M -s -p r -n mydata-snap /dev/myvg/mydata
釋放表鎖
mysql> UNLOCK TABLES;
# mount /dev/myvg/mydata-snap /mnt/ -o ro
# mkdir /backup/full-backup-`date +%F`
# cp -a /mnt/data/* /backup/full-backup-2017-01-13/
# rm -rf /backup/full-backup-2017-01-13/mysql-bin.*
(我這里是模擬的,其實二進制日志不應該也在數據文件里的所以刪除掉)
# cd
# umount /mnt
# lvremove --force /dev/myvg/mydata-snap
3. 備份二進制日志文件
# cat /backup/master-2017-01-13.info
會在此里邊查找到位置我的是107
二進制日志文件是mysql-bin.000005
# mysqlbinlog --start-position=107 /mydata/data/mysql-bin.000003
此句在于找出其開始時間,下一句是備份
# mysqlbinlog --start-datetime='2017-01-13' mysql-bin.000003
mysql-bin.000004 mysql-bin.000005... > /backup/binary/binary-`date %F`.sql
4. 模擬數據庫損壞并還原
將數據庫里所有信息刪除
# service mysqld stop
# rm -rf /mydata/data/*
# killall mysqld
實現還原
# cp -a /backup/full-backup-2017-01-13/* /mydata/data/
# ls /mydata/data
# service mysqld start
5. 即時點還原(導入二進制日志文件)
mysql> SET sql_log_bin=0;
mysql> SOURCE /backup/binary-2017-01-13.sql
mysql> SET sql_log_bin=1;
總結步驟
1.打開會話,施加讀鎖,鎖定所有表
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;
2.通過另一個終端,保存二進制日志文件及相關位置信息
# mysql -uroot -p -e "SHOW MASTER STATUS\g" > /path/master-`date +%F`.info
3.創建快照
# lvcreate -L # -s -p r -n LV_name /dev/path/source-lv
4.釋放鎖
mysql> UNLOCK TABLES;
5.掛載快照卷,備份
mount
cp
6.刪除快照卷
7.增量備份二進制日志
8.還原時一定要記得將二進制日志給臨時性的關閉掉
InnoDB 數據庫一定要記得使用了
innodb_file_per_table | ON
要不然備份單個數據庫使用快照這種方式就比較麻煩了
創建快照來備份數據庫比較適合進行所有庫備份
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。