共計 4040 個字符,預計需要花費 11 分鐘才能閱讀完成。
MySQL 數據庫中有哪些備份方案,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
1、冷備份:
一般主要用于非核心業務,這類業務一般都是允許業務中斷的,冷備份的特點就是數度快,恢復時也最為簡單。通常直接復物理文件來實現冷備份。
1.1 備份過程:
*** 關閉 mysql 服務
第二步就是把 datas 數據目錄(包含 ibdata1)和日志目錄 (包含 ib_logfile0,ib_logfile1,ib_logfile2) 復制到磁盤,或者本地的另一塊磁盤里
1.2 恢復過程:
*** 使用復制的數據目錄和日志目錄替換原有的目錄
第二就是啟動 mysql
2、邏輯備份 MySQLdump
生產場景備份的命令:
生產場景不同引擎 mysqldump 備份命令
myisam 引擎企業生產備份命令(適合所有引擎或混合引擎):
mysqldump -uroot -p123456 -A -B -F -R --master-data=2 -x --events|gzip /opt/all.sql.gz
提示:- F 也可以不用,與 –master-data 有些重復。
innodb 引擎企業生產備份命令: 推薦使用的
mysqldump -uroot -p123456 -A -B -F -R --master-data=2 --default-character-set=utf8 --events --single-transaction |gzip /opt/all.sql.gz
提示:- F 也可以不用。與 –master-data 有些重復。
–default-character-set=utf8 指定備份出的 sql 數據的字符集為 utf8,當然,這個要提前知道線上的 mysql 庫全部采用的字符集都是 utf8,否則在恢復到線上的庫會出現字符集不一致的問題出現亂碼
提示:邏輯備份一般是數據遷移或者數據量很小時采用,邏輯備份采用的是數據導出的方式
2.1mysqldump 庫表等備份說明:
全備:
Mysqldump ndash;uroot ndash;p -q ndash;single-transaction ndash;A all.sql
導出多個數據庫:
Mysqldump ndash;uroot ndash;p -q ndash;single-transaction ndash;B test01 wjw01 test02 test01_wjw01_test02.sql
導出一個 test 庫的某張 wjw01 表:
Mysqldump ndash;uroot ndash;p -q ndash;single-transaction ndash;b test wjw01 test_wjw01.sql
只導出表結構:
Mysqldump ndash;uroot ndash;q ndash;d --skip-triggers
只需要導出儲存過程時:
Mysqldump ndash;uroot ndash;q -Rtdn --skip-triggers
只需要導出觸發器:
Mysqldump ndash;uroot ndash;p ndash;q ndash;tdn ndash;triggers
只需要導出事件:
Mysqldump ndash;uroot ndash;p ndash;q ndash;Etdn ndash;skip-triggers
只需要導出數據:
Mysqldump ndash;uroot ndash;p ndash;q --skip-transaction --skip-triggers ndash;t
要想在線上建立一臺新的 slave,則在 master 上執行如下命令:
Mysqldump ndash;uroot ndash;p ndash;q ndash;single-transaction ndash;master-data=2 -A all.sql
提示:在 mysql5.5 里增加了一個新的參數:–dump-slave, 使用該參數可在 slave 端 dump 數據,建立新的 slave,其目的是為了防止對主庫造成過大的壓力。
在 slave 上執行以下命令:
Mysqldump -uroot ndash;p -A ndash;dump-slave=2 ndash;q ndash;single-transaction /tmp/all.sql
查看 alls.sql 里面會記錄 slave 上的那個點。
注意:–dump-slave 用于在 slave 上 dump 數據,建立新的 slave
2.2Mysqldump 優缺點以及使用場景
優點:
鴻蒙官方戰略合作共建——HarmonyOS 技術社區
恢復簡單,可以使用管道將他們輸入到 mysql
與存儲引擎無關,因為是從 MySQL 服務器中提取數據而生成的,所以消除了底層數據存儲的不同
有助于避免數據損壞。若磁盤驅動器有故障而要復制原始文件時,此時將得到一個損壞的備份
缺點:
鴻蒙官方戰略合作共建——HarmonyOS 技術社區
必須有數據庫服務器完成邏輯工作,需要更多地 cpu 周期
邏輯備份還原速度慢:需要 MySQL 加載和解釋語句、轉化存儲格式、重建引擎
使用場景:對于 MySQL 數據庫數據量不是很大的場景,建議使用。因為備份方便,簡單靈活,易操作
當數據庫特別的時候,比如 30G 以上時,備份 MySQL 數據時,也就建議不要采用 mysqldump 了,因為備份的時間以及恢復數據庫的時間太長了,會對庫表造成鎖,對線上的業務影響還是比較大的
2.3 簡單介紹下 MySQL 全量備份 + 增量備份 binlog
注意:生產上強烈建議 MySQL 開啟 Row 格式來記錄 binlog, 盡管這樣對磁盤的 IO 以及磁盤的空間的消耗是比較大,但是和數據的安全性、完整性相比,磁盤資源那都是小事
全量備份腳本內容:
#!/bin/bash #mysql 全量備份腳本建議在 slave 從庫上運行,從庫 slave 上建議開啟參數 log_slave_updates=1 mkdir /backup cd /backup dateDIR=$(date + %Y-%m-%d) mkdir -p $dateDIR/data path=/data/mysql/data for n in `mysql -uroot -p123456 -e show databases |grep -v Database ` do mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B $n|gzip /backup/$dateDIR/data/${n}_$dateDIR.sql.gz done binlog_rm=$(tail -n 1 $path/mysql-bin.index|sed s/.\///) mysql -uroot -p123456 -e purge binary logs to $binlog_rm
說明: 這個全量備份腳本,會在導出的時候鎖住全局表,并且此時刷新產生一個新的 bin-log, 期間會產生寫操作的等待,直到導出結束后才會寫入新產生的 bin-log 文件,然后舊的 bin-log 文件會被刪除刪除掉,一般在晚上 2:00 業務低峰期執行操作
進行本地 bin-log 增量備份
在執行完全量備份腳本后,就可以執行增量備份腳本了。
增量備份腳本思路很簡單:
先 mysqladmin -uroot -p123456 flush-logs 刷新新的 binlog 文件,此時 mysql 寫入到新的 binlog 文件中。
然后把當前 mysql 數據庫存放 binlog 的目錄中拋去剛才 *** 生成的 binlog 文件,其余舊的 binlog 文件全部 cp 到本地服務器 /backup/binlog binlog 的備份目錄下。
*** 在登錄 MySQL 清除當前的 binlog 文件數減一
mysql -uroot -p123456 -e purge binary logs to mysql-bin.(n-1)
3. 熱備份與恢復
熱備份的方式也是直接復制數據物理文件,和冷備份一樣,但是熱備份可以不停機直接復制,一般用于 7 *24 小時不間斷的重要核心業務。Mysql 的社區版本熱備份工具 InnoDB Hot Backup 是付費的,只能試用 30 天,商業版才可以 *** 的使用,
Percona 公司發布一個 xtrabackup 熱備工具,和付費的工具一樣,支持在線熱備(備份時不影響數據的讀寫)是商業工具 InnoDB Hot Backup 的一個很好的替代。
xtrabackup 熱備工具是一個開源的工具,他可以非常快速的備份和恢復 mysql 數據庫。由于 Xtrabackup 支持備份 innodb 表,實際生產環境中我們使用的工具是 innobackupex,它是對 xtrabackup 的一層封裝。innobackupex 腳本用來備份非 InnoDB 表,同時會調用 xtrabackup 命令來備份 InnoDB 表,innobackupex 的基本流程如下:
鴻蒙官方戰略合作共建——HarmonyOS 技術社區
開啟 redo 日志拷貝線程,從 *** 的檢查點開始順序拷貝 redo 日志;
開啟 idb 文件拷貝線程,拷貝 innodb 表的數據
idb 文件拷貝結束,通知調用 FTWRL,獲取一致性位點
備份非 innodb 表 (系統表) 和 frm 文件
由于此時沒有新事務提交,等待 redo 日志拷貝完成
*** 的 redo 日志拷貝完成后,相當于此時的 innodb 表和非 innodb 表數據都是 *** 的
獲取 binlog 位點,此時數據庫的狀態是一致的。
釋放鎖,備份結束。
看完上述內容,你們掌握 MySQL 數據庫中有哪些備份方案的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!