首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料庫備份與還原完整策略指南

     編輯:MySQL 資料庫相關知識

備份方式對比

方式優點缺點適用場景
mysqldump跨版本/平台遷移、可編輯 SQL、支援壓縮速度慢、鎖表久邏輯備份、異構遷移、小/中型庫
直接複製檔案 (cp/tar/scp)極快、物理級備份需停服務或鎖表、硬體架構需一致大型庫、同架構遷移、檔案系統快照配合
mysqlhotcopy (Perl 腳本)不停服務、自動鎖表/解鎖、刷新日誌僅 MyISAM、需 Perl 環境MyISAM 為主的線上熱備份
BACKUP TABLE (SQL)SQL 介面、可鎖多表僅 MyISAM、不備份索引檔、多表備份間隙可能不一致簡單表級備份
主從複制 + 從庫備份主庫零影響、可做時間點恢復 (PITR)架構複雜、需額外硬體高可用架構、核心業務

mysqldump 實戰範例


# 全庫備份 + 壓縮
mysqldump --opt db_name | gzip > /backup/db_name_$(date +%F).sql.gz

# 指定表備份
mysqldump --opt db_name tbl1,tbl2 > tables.sql

# 僅結構
mysqldump -d --add-drop-table db_name > schema.sql

# 遠端直接同步 (無中間檔)
mysqldump --opt db_name | mysql -h remote_host -u root -p db_name

# SSH 通道遠端備份
ssh remote_host "mysqldump --opt db_name" | gzip > local_backup.sql.gz

--opt 等同 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset。

物理檔案備份操作


# 停服務備份
service mysqld stop
tar czf /backup/mysql_data_$(date +%F).tar.gz /var/lib/mysql
service mysqld start

# 線上只讀鎖定備份 (需另開 session)
mysql> FLUSH TABLES WITH READ LOCK;
# 另開終端複製檔案
cp -r /var/lib/mysql/db_name /backup/
mysql> UNLOCK TABLES;

mysqlhotcopy 使用


mysqlhotcopy db_name /backup/   # 自動建立 db_name 子目錄
# 參數:--user --password --host --port --method=scp 遠端複製

BACKUP / RESTORE TABLE (MyISAM 專用)


LOCK TABLES t1 READ, t2 READ;
BACKUP TABLE t1, t2 TO '/backup/db';
UNLOCK TABLES;

# 還原
RESTORE TABLE t1, t2 FROM '/backup/db';

不複製 .MYI 索引檔,還原時自動重建。

InnoDB / BDB 特殊備份注意

  • 需同時備份 .frm、ibdata*、ib_logfile*、表空間配置檔
  • 或使用 mysqldump --single-transaction 獲得一致性視圖 (無需鎖表)

資料庫重命名

MySQL 無 RENAME DATABASE,兩種變通:

  1. mysqldump old_db > dump.sql; mysqladmin create new_db; mysql new_db < dump.sql; mysqladmin drop old_db (通用)
  2. 直接改目錄名 mv /var/lib/mysql/old_db /var/lib/mysql/new_db (僅 MyISAM,需同步更新 mysql.db、tables_priv、columns_priv、host 表)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved