重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
修改好 “需要根據實際情況修改” 的幾個參數后,把腳本放到crontab中定時執行備份。備份過程中會刪除超過最大保留期的備份文件。
創新互聯自2013年創立以來,是專業互聯網技術服務公司,擁有項目成都做網站、成都網站設計網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元靈壽做網站,已為上家服務,為靈壽各地企業和個人服務,聯系電話:13518219792
一、編寫備份腳本
二、更改備份腳本權限
chmod u+x /usr/local/tools/mysql_dy_backup.sh
三、設置定時執行腳本任務
crontab -e
30 22 * * * /usr/local/tools/mysql_dy_backup.sh
在MySQL中進行數據備份的方法有兩種:
1. mysqlhotcopy
這個命令會在拷貝文件之前會把表鎖住,并把數據同步到數據文件中,以避免拷貝到不完整的數據文件,是最安全快捷的備份方法。
命令的使用方法是:
mysqlhotcopy -u root -prootpass db1 db2 … dbn output_dir
如果需要備份全部數據庫,可以加上–regexp=”.*”參數。
Mysqlhotcopy命令可自動完成數據鎖定工作,備份時不用關閉服務器。它還可以刷新日志,使備份文件和日志文件的檢查點能保持同步。
2. mysqldump
這個命令是用來把數據庫倒成sql文件的,是非常古老的命令了。
命令的使用方法是:
mysqldump -u root -prootpass –hex-blob db1 db1.sql
加上–hex-blob參數以后,blob數據會被類似BASE64的方法轉換為文本來存儲在sql文件中,就不會導致sql文件格式問題了。經過測試,通過這種方法備份的blob數據再重新恢復回去能夠完全正確。
如果要備份所有的數據庫,可以加上–all-databases參數。
用mysqldump命令還可直接把數據庫轉移到另外一臺服務器上,不用生成備份文件。重復執行可定期更新遠程數據庫。
% mysqladmin -h remote_host create testdb
% mysqldump –opt testdb | mysql -h remote_host testdb
另外還可通過ssh遠程調用服務器上的程序,如:
% ssh remote_host mysqladmin create testdb
數據備份是數據容災的最后一道防線,即便有著兩地三中心的架構,備份也依然重要。如果備份出問題,備份時影響了交易業務,備份數據無法恢復,這些也是企業難以承受的。所以選擇合適的備份工具尤為重要。
每個企業級數據庫都會有配套的備份工具,MEB(MySQL Enterprise Backup)就是MySQL企業版中非常重要的工具之一,是為企業級客戶提供的數據備份方案。
Xtrabackup一直作為MEB 開源版備胎而存在,從MySQL 8.0開始情況可能會變得有所不同。
在 MySQL 8.0的Backup Lock、Redo Log Archiving、Page Tracking等新特性的加持下,MEB備份/恢復體驗會更好,目前xtrabackup還不支持這些特性。
MySQL 企業版還有哪些功能?
特性1:Backup Lock
8.0之前使用xtrabackup或MEB做物理備份,為了保證備份時InnoDB引擎表與其他引擎數據文件、及binlog日志的一致性會上全局讀鎖,再拷貝非InnoDB文件,這期間MySQL會變成只讀,數據無法寫入。表數量越多,可能加上時間越長,如果使用的xtrabackup 不小心沒加rsync參數,逐個拷貝frm文件,鎖定時間會更長,對業務影響較大。
我曾遇到過部署在虛擬機的實例有12000多張表,當時使用的xtrabackup,備份腳本中沒加rsync參數,結果鎖了十幾分鐘,而MEB就沒有這樣的問題。
MySQL 8.0支持輕量級備份鎖 LOCK INSTANCE FOR BACKUP,數據字典也重構了由InnoDB存儲。若不創建非InnoDB表,MEB默認使用備份鎖獲取binlog日志一致性位置,并阻止DDL操作,但不影響DML操作。
只有InnoDB表,僅上備份鎖
請點擊輸入圖片描述
若有非InnoDB表,上全局鎖
請點擊輸入圖片描述
特性2:Redo Log Archiving
MEB能做到在線熱備,備份時不影響數據庫讀寫,這是利用了InnoDB事務日志,在備份期間持續監視redo log的變化,讀取增量變化,寫入到ibbackup_logfile,也就不需要上鎖來保障備份一致性。(對非InnoDB的文件需要上讀鎖拷貝)
如果備份期間數據庫寫入負載特別大,而寫入ibbackup_logfile速度較慢,redo log size也不大,很可能會出現ibbackup_logfile的寫入速度跟不上redo log記錄生成速度,redo log 空間不夠時需要覆寫日志文件,那么來不及寫入ibbackup_logfile的記錄會丟失,導致備份失敗。
MEB 4.1對此做了優化,將redo log處理線程拆分成多線程分工合作,提高處理redo log的效率,降低了redo log覆寫造成備份失敗的概率,但redo log新增速度和ibbackup_logfile寫入速度懸殊太大,問題依然會發生。
MySQL 8.0.17支持了redo log archiving 徹底解決了此問題,備份前設置innodb_redo_log_archive_dirs,指定redo log歸檔目錄。MEB備份時自動開啟日志歸檔,當checkpoint時會將舊記錄歸檔到此目錄,后續從歸檔文件中讀取redo日志記錄,避免了覆寫可能導致的redo記錄丟失。
請點擊輸入圖片描述
注意:innodb_redo_log_archive_dirs 不能在數據目錄下,目錄權限要求是700
特性3:Page Tracking
Page Tracking 是為優化增量備份效率,減少不必要的數據頁掃描。
增量備份當前有3種掃描模式:
page-track:利用LSN精確跟蹤上次備份之后被修改頁面,僅復制這些頁面,效率最快。
optimistic:掃描上次備份之后被修改的InnoDB 數據文件中,找出并拷貝修改的頁面。依賴系統時間,使用存在限制。
full-scan:掃描所有InnoDB數據文件,找出并拷貝自上次備份之后修改的頁面,效率最慢
1、利用page-track增量備份,需先安裝備份組件
mysql INSTALL COMPONENT "";
2、在全備前開啟page-track
SELECT mysqlbackup_page_track_set(true);
3、全備之后,做增量備份時指定若滿足page tracking條件,默認會使用page-track模式,否則會使用full-scan模式,也可以指定--incremental=page-track。
mysqlbackup --incremental-backup-dir=backup_incr --trace=3 --incremental=page-track --incremental-base=history:last_full_backup backup
incremental-base有3種選擇
last_backup:基于前一次備份做增備,前一次備份可能是增備,也可能是全備。這種方式全備之間可能會有多個增備,每次增量可能比較小,但恢復時需要逐個合并。
last_full_backup:基于前一次全備做增備。這種方式增備會越往后體積可能越大,但恢復時只需要合并最后一次增量備份。
dir:基于前一次的備份目錄,前一次備份可能是增備,也可能是全備。
測試對比full-scan 和page-track ,在變更頁小于總體50%的情況下 ,備份效率至少能有1倍的速度提升。
page-track 模式 磁盤讀寫均衡,說明讀寫的都是修改頁面。
請點擊輸入圖片描述
full-scan模式 磁盤讀寫差別很大,說明讀了很多未修改的頁面。
請點擊輸入圖片描述
為了避免服務掛掉,數據庫無法恢復,搞個腳本做數據庫備份。核心的東西就是一個命令:mysqldump
首先寫一個自動備份的shell腳本:
升級版本1:壓縮文件
如果gzip未安裝需要安裝gzip
升級版本2:防止鎖表
升級版本3:備份多個庫
升級版本4:刪除過期數據
添加系統定時任務:
over!
1.1、 mysqldump命令備份數據
在MySQL中提供了命令行導出數據庫數據以及文件的一種方便的工具mysqldump,我們可以通過命令行直接實現數據庫內容的導出dump,首先我們簡單了解一下mysqldump命令用法:
#MySQLdump常用
mysqldump -u root -p --databases 數據庫1 數據庫2 xxx.sql
1.2、 mysqldump常用操作實例
1.備份全部數據庫的數據和結構
mysqldump -uroot -p123456 -A /data/mysqlDump/mydb.sql
2.備份全部數據庫的結構(加 -d 參數)
mysqldump -uroot -p123456 -A -d /data/mysqlDump/mydb.sql
3.備份全部數據庫的數據(加 -t 參數)
mysqldump -uroot -p123456 -A -t /data/mysqlDump/mydb.sql
4.備份單個數據庫的數據和結構(,數據庫名mydb)
mysqldump -uroot-p123456 mydb /data/mysqlDump/mydb.sql
5.備份單個數據庫的結構
mysqldump -uroot -p123456 mydb -d /data/mysqlDump/mydb.sql
6.備份單個數據庫的數據
mysqldump -uroot -p123456 mydb -t /data/mysqlDump/mydb.sql
7.備份多個表的數據和結構(數據,結構的單獨備份方法與上同)
mysqldump -uroot -p123456 mydb t1 t2 /data/mysqlDump/mydb.sql
8.一次備份多個數據庫
mysqldump -uroot -p123456 --databases db1 db2 /data/mysqlDump/mydb.sql