mysqldump壓縮備份匯出匯入(含定期備份shell指令碼)

guocun09發表於2018-03-07

mysqldump工具自帶選項沒有對 匯出備份檔案壓縮功能,可結合 gzip只使用一條命令壓縮 匯出檔案,方法如下:

mysqldump壓縮匯出:

# mysqldump -h192.168.0.3 -P3306 -uroot -ppwd123 --single-transaction --default-character-set=utf8 -R -E zabbix --log-error=zabbix2018030709.log |gzip > zabbix20180307 09.sql.gz
引數解釋:
-h    正式DB IP
-P    正式DB Port
-u    正式DB賬號
-p    正式DB賬號對應密碼
-R    匯出儲存過程和函式
-E    匯出事件
--single-transaction        事務一致性備份
--default-character-set    字符集,和正式db字符集一致
--log-error    錯誤日誌檔案,如果備份時無錯誤發生,只寫空檔案,有錯誤話寫具體記憶體
zabbix    匯出DB name

mysqldump壓縮匯出後匯入:
# gunzip < zabbix2018030709 .sql.gz |mysql -uroot -p pwd123  zabbix

將mysqldump壓縮匯出寫成shell指令碼(可供conrtab定時執行)
# vi zabbixdbbak.sh 
FILENAME=`date +%Y%m%d%H`
cd /data/dbbak
mysqldump -h192.168.0.3 -P3306 -uroot -ppwd123 --single-transaction --default-character-set=utf8 -R -E zabbix --log-error='zabbix'$FILENAME.log |gzip > 'zabbix'$FILENAME.sql.gz
find /data/dbbak/zabbix*.gz -mtime +7 -exec rm -f {} \;
find /data/dbbak/zabbix*.log -mtime +7 -exec rm -f {} \;

# crontab -e
30 0 * * * sh /data/dbbak/zabbixdbbak.sh 1>/data/dbbak/zabbixdbbakcron.log 2>>/data/dbbak/zabbixdbbakcron.bad


mysqldump匯出資料一致性主要有single-transaction 和 lock-all-tables 二選一控制的:

single-transaction 

是在匯出開始時設定事務隔離狀態並使用一致性快照開始事務,而後馬上unlock tables,

然後執行匯出,匯出過程不影響其它事務或業務連線,但只支援類似innodb多版本特性的引擎,

因為保證了即使匯出期間其它操作(事務點t2)改變了資料,而匯出時仍能取出匯出開始的事務點t1時的資料。

簡單地說,就是透過回滾段能記錄不同的事務點的各版本資料

single-transaction 的流程:

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */

SHOW MASTER STATUS -- 這一步就是取出 binlog index and position

UNLOCK TABLES

...dump...


lock-all-tables

是一開始執行 FLUSH TABLES WITH READ LOCK; 加全域性讀鎖,會阻塞其它寫操作,直到dump完畢。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25583515/viewspace-2151580/,如需轉載,請註明出處,否則將追究法律責任。

相關文章