成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學會MySQL數據備份與恢復,刪庫不跑路!

數據庫
真實案例告訴我們:沒有安全的數據庫,就像沒有安全繩的走鋼絲——一次誤操作就可能讓業務墜入深淵。在實際的運維過程中,做好數據庫的備份和恢復至關重要,也是運維工程師和dba需要掌握的基本技能。

2020年2月,某上市公司運維人員因糾紛手動執行rm -rf /*,直接導致市值蒸發超10億。

2022年5月,某電商平臺因未配置備庫,主庫故障后宕機11小時,損失千萬訂單。

這些真實案例告訴我們:沒有安全的數據庫,就像沒有安全繩的走鋼絲——一次誤操作就可能讓業務墜入深淵。

在實際的運維過程中,做好數據庫的備份和恢復至關重要,也是運維工程師和dba需要掌握的基本技能。

一、數據庫需要哪些“后悔藥”?

  • 冷備份(需停庫):直接對數據庫數據目錄文件進行 tar 歸檔。
  • 熱備份:使用 mysqldump 或 XtraBackup 進行在線備份。
  • 增量備份:基于 binlog 或者 InnoDB 事務日志進行數據恢復。

1. 全量備份:整庫的存檔快照

邏輯備份:mysqldump(適合中小型數據庫)

# 導出整個數據庫
mysqldump -u root -p --all-databases > full_backup.sql

優點:跨版本兼容,單個 SQL 文件易于管理

缺點:恢復速度較慢,備份文件較大

需停機:否

物理備份:XtraBackup(適合大規模數據庫)

# 全量備份
xtrabackup --backup --user=root --password=123456 --target-dir=/backups/full

優點:恢復速度快,適合 TB 級數據庫

缺點:需與 MySQL 版本嚴格匹配

需停機:否(支持熱備)

物理備份:Tar冷備(適合低頻備份和遷移)

# 停庫保障一致性(需停機!)
systemctl stop mysql
tar -czvf /backups/mysql_$(date +%F).tar.gz /var/lib/mysql/*
systemctl start mysql

優點:簡單直觀,操作簡單,適合小型數據庫或臨時備份

缺點:必須停機,否則數據可能不一致

需停機:是

2. 增量備份:只存“變化量”的智能方案

依賴 binlog 日志(記錄所有數據變更):

# 導出某時間點后的 binlog
mysqlbinlog --start-datetime="2024-01-01 00:00:00" mysql-bin.000001 > incr_backup.sql

優點:節省空間,可精確恢復到秒級

缺點:恢復流程復雜,需結合全量備份

需停機:否

二、數據備份方案怎么選?

備份類型

速度

恢復難度

適用場景

代表工具

是否需停機

邏輯全備

簡單

小數據量,跨版本遷移

mysqldump

物理全備

中等

大數據量,快速恢復

XtraBackup

binlog 增量

極快

復雜

需精確到時間點的恢復

mysqlbinlog

Tar 冷備

中等

簡單

停機情況下的完整備份

tar

快照備份

最快

簡單

云服務器 + 大容量存儲

LVM/云磁盤快照

黃金法則:

  • 中小項目:每周全備 + 每日 binlog 增量
  • 大型系統:物理全備(XtraBackup)+ 每小時 binlog
  • 致命操作前:臨時表級備份(如 ALTER TABLE 前)

三、XtraBackup:TB級數據庫的“救世主”

1. 為什么選擇 XtraBackup?

  • 熱備份:備份期間數據庫正常讀寫,業務無感知
  • 增量備份:僅備份變化的數據塊,節省時間和空間
  • 支持壓縮加密:邊備份邊壓縮,直傳云端存儲

2. 核心操作(以 MySQL 8.0 為例)

# 全量備份
xtrabackup --backup --user=root --password=123456 --target-dir=/backups/full

# 增量備份(基于上一次備份)
xtrabackup --backup --target-dir=/backups/inc1 --incremental-basedir=/backups/full

# 恢復數據(合并增量到全量)
xtrabackup --prepare --apply-log-only --target-dir=/backups/full
xtrabackup --prepare --target-dir=/backups/full --incremental-dir=/backups/inc1

四、如何避免數據災難?

1. 誤刪數據恢復

mysql -u root -p < full_backup.sql  # 導入全量備份
mysqlbinlog binlog.000002 | mysql -u root -p  # 追增量日志

2. 突然斷電后的恢復

InnoDB 自動恢復:MySQL 重啟時,通過 redo log 自動回放未提交事務

手動檢查:

mysqlcheck -u root -p --all-databases  # 檢查所有表狀態

五、防翻車指南:必須知道的 5 個 Tips

  1. 備份驗證:定期試恢復備份文件到測試環境
  2. binlog 必開:配置文件中確保有 log-bin=mysql-bin
  3. 監控告警:用 Prometheus 監控備份任務是否成功
  4. 多副本存儲:備份文件至少存 3 份(本地 + 異機 + 云存儲)
  5. 防刪庫大招
-- 設置 sql_safe_updates 強制 WHERE 條件
SET sql_safe_updates=1;

六、數據庫斷電恢復

如果數據庫沒有備份的情況下,可以嘗試如下方式恢復數據,降低損失

1. innodb_force_recovery:數據崩潰后的急救方案

在數據庫異常崩潰或斷電后,InnoDB 數據文件可能損壞,導致 MySQL 無法啟動。此時,可借助 innodb_force_recovery 參數強制啟動 MySQL,并嘗試修復數據。

2. 使用場景

現象:MySQL 啟動失敗,日志中出現如下錯誤:

InnoDB: Database page corruption on disk or a failed file read
InnoDB: Crash recovery is in progress...

適用情況

  • 斷電或強制關機導致 InnoDB 表損壞
  • 數據文件(.ibd)損壞但未完全丟失
  • 目標是緊急啟動 MySQL,導出數據后重建數據庫

3.操作步驟

第 1 步:修改配置,啟用強制恢復模式

在 my.cnf 的 [mysqld] 段添加:

[mysqld]
innodb_force_recovery=1  # 從級別 1 開始嘗試

第 2 步:逐級嘗試啟動

innodb_force_recovery 取值范圍 1~6,數字越大,修復越激進。

sudo systemctl restart mysql

檢查日志,若仍無法啟動,則逐級提高 innodb_force_recovery 級別。

級別

含義

1

忽略損壞頁,嘗試讀取表

2

禁止后臺線程(如 purge 線程)運行

3

不執行事務回滾

4

禁止插入緩沖合并

5

不查看 Undo 日志

6

不執行 redo 日志前滾

第 3 步:啟動成功后緊急備份

mysqldump -u root -p --all-databases > emergency_backup.sql

如果發現部分表損壞,可以使用mysqlcheck 檢查所有表的狀態

mysqlcheck -u root -p --all-databases  # 檢查所有表狀態

如果表損壞,可以使用'mysqlcheck'工具的'--repair'選項來修復表,

  • MyISAM:支持 --repair 直接修復
  • InnoDB:支持 --check 進行檢查,但修復需結合 innodb_force_recovery

如果確認損壞表為非關鍵表,導出數據庫時也可以加--ignore-table并跳過指定表

mysqldump -u username -p --ignore-table=database_name.table_name database_name > backup.sql

mysql命令行導出數據庫并跳過指定表

與其他類似工具相比,'mysqlcheck'是 MySQL 官方提供的工具,與 MySQL 數據庫緊密集成,具有更好的兼容性和可靠性。

第 4 步:重建數據庫

  1. 清空數據目錄 /var/lib/mysql
  2. 重新初始化 MySQL
  3. 導入備份數據

 注意事項

  • 強制恢復模式下禁用寫操作,只能用于數據導出。
  • 臨時方案,導出數據后應關閉 innodb_force_recovery 并重建數據庫。
  • 可能丟失數據innodb_force_recovery >= 4 可能導致事務丟失。

實戰案例

場景:某電商數據庫因機房斷電無法啟動。

  1. 設定 innodb_force_recovery=1,啟動失敗。
  2. 設定 innodb_force_recovery=2,啟動成功,但部分表無法訪問。
  3. 使用 mysqlcheck 檢查表:
mysqlcheck -u root -p --all-databases --check --extended
  1. 設定

預防措施

硬件層面

  • 使用 UPS 防止斷電。
  • 啟用 RAID 10 保障磁盤冗余。

數據庫層面

  • 設置 innodb_flush_log_at_trx_commit=1,確保事務日志實時寫入。
  • 定期執行 CHECK TABLE 檢測表健康狀態。

總結

innodb_force_recovery 是數據庫崩潰后的應急方案,使用時需謹慎。真正的安全保障是 定期備份 + 備份恢復演練

結論

小庫輕量級:mysqldump + binlog

大庫高性能:XtraBackup + 快照

作死保護:操作前手動備份關鍵表

結合物理備份與二進制日志,可實現任意時間點恢復(PITR)

  1. 每天凌晨 用 XtraBackup 做全量備份
  2. 每小時 采集一次 binlog 并上傳到云存儲
  3. 故障時 先用全量備份恢復,再重放 binlog 到指定時間點
責任編輯:龐桂玉 來源: 運維之美
相關推薦

2019-08-20 14:20:19

MySQL數據恢復數據庫

2024-03-29 08:08:25

2020-08-05 11:50:47

刪庫MySQL數據庫

2021-12-30 11:39:27

MySQL 刪庫不跑路

2018-10-24 16:25:24

數據庫MySQLxtraback

2020-08-25 17:30:32

MySQL數據庫數據恢復

2018-06-26 13:30:32

數據庫MySQL損壞恢復

2019-02-28 21:20:50

MySQL備份與恢復數據庫

2009-04-03 10:54:49

Oracle備份恢復

2023-09-12 09:45:54

Java數據庫

2020-10-21 08:59:50

刪庫程序員虛擬機

2020-03-03 17:28:39

CIO刪庫微盟

2018-02-23 13:41:05

數據庫MySQL數據恢復

2022-02-14 08:13:33

刪庫MySQL備份

2009-10-13 09:43:43

Oracle數據庫備份

2011-07-26 13:55:01

MongoDB備份與恢復

2018-09-11 10:30:18

MySQL存儲引擎數據備份

2018-09-21 16:30:55

2009-03-17 16:00:47

Oracle數據庫備份

2010-04-13 11:09:21

Oracle數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99精品视频 | 久国产精品 | av手机在线播放 | 亚洲久久在线 | 国产一二三区在线 | 男人天堂av网 | 99精品在线| 精品久久香蕉国产线看观看亚洲 | 国产精品一区在线观看 | 亚洲一区二区三区在线视频 | 黑人巨大精品欧美黑白配亚洲 | 亚洲国产视频一区二区 | 亚洲成人国产 | 国产一级片 | 自拍偷拍第一页 | 欧美视频一区二区三区 | 中文字幕在线三区 | 色久影院 | 99免费看 | 日韩h | 久久福利电影 | 少妇一级淫片免费放播放 | 青青草av网站 | 亚洲精品黄 | 欧美一区 | www.亚洲成人网 | 成人区精品一区二区婷婷 | 在线观看视频91 | 久久久精 | 蜜桃av一区二区三区 | 成人黄页在线观看 | 国产精品国产三级国产播12软件 | 久久国产精品精品国产色婷婷 | 91最新在线视频 | 老子午夜影院 | 一本色道精品久久一区二区三区 | 欧美专区在线 | 天天爱爱网| 欧洲色综合 | eeuss国产一区二区三区四区 | 爱爱综合网 |