資料備份與還原是資料庫維運的核心技能。本文涵蓋 Win32 與 Linux 兩大平台的冷備份、邏輯備份、單表匯出入,並介紹免安裝版 MySQL 部署與 InnoDB 熱備份工具 ibbackup。
# 進入 bin 目錄
cd "C:\Program Files\MySQL\MySQL Server 5.0\bin"
# 備份單一資料庫
mysqldump -u root -p voice > voice.sql
# 進入 MySQL 客戶端
mysql -u root -p
# 建立資料庫並匯入
mysql> CREATE DATABASE voice;
mysql> USE voice;
mysql> SOURCE voice.sql;
cd /var/lib/mysql # 依實際安裝路徑調整
mysqldump -u root -p voice > voice.sql
方式一:進入客戶端還原
mysql -u root -p
mysql> CREATE DATABASE voice;
mysql> USE voice;
mysql> SOURCE voice.sql;
方式二:管道導入
mysql -u root -p voice < voice.sql
解壓至 E:\mysql-5.1.39-win32,將 bin 目錄加入系統 PATH。
複製 my-medium.ini 為 my.ini,分別放置於 MySQL 目錄與 C:\WINDOWS:
[mysqld]
basedir=E:/mysql-5.1.39-win32/
datadir=E:/mysql-5.1.39-win32/data
default-character-set=utf8
[client]
default-character-set=gbk
# 安裝服務(名稱可自訂,如 mysql5)
mysqld --install mysql5 --defaults-file=C:\WINDOWS\my.ini
# 啟動/停止
net start mysql5
net stop mysql5
mysql -u root -p
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('admin') WHERE User='root';
mysql> FLUSH PRIVILEGES;
ibbackup 為 InnoDB 官方熱備份工具(現歸 Oracle 所有,需付費授權),可在不停機情況下進行物理備份。
my.cnf(啟動用)
[mysqld]
datadir=/home/heikki/data
innodb_data_home_dir=/home/heikki/data
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_group_home_dir=/home/heikki/data
innodb_log_files_in_group=2
innodb_log_file_size=20M
my2.cnf(備份目標目錄)
[mysqld]
datadir=/home/heikki/backup
innodb_data_home_dir=/home/heikki/backup
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_group_home_dir=/home/heikki/backup
innodb_log_files_in_group=2
innodb_log_file_size=20M
# 備份
ibbackup my.cnf my2.cnf
# 還原前需重做 log
ibbackup --apply-log my2.cnf
# 以備份配置啟動驗證
./bin/mysqld_safe --defaults-file=my2.cnf &
前提:啟用 log-bin 二進位日誌。
# 恢復至 9:59:59
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 | mysql -u root -p
# 跳過故障時段,從 10:01:00 繼續
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 | mysql -u root -p
# 先導出特定時段至 SQL 檔
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
# 編輯檔案找出錯誤語句前後 position(如 368312, 368315)
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 | mysql -u root -p
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 | mysql -u root -p
# 方法一:myisamchk
myisamchk -r table_name # 修復
myisamchk -o table_name # 強制修復
# 方法二:SQL 指令
CHECK TABLE tbl_name [QUICK|FAST|MEDIUM|EXTENDED|CHANGED];
REPAIR [LOCAL|NO_WRITE_TO_BINLOG] TABLE tbl_name [QUICK] [EXTENDED] [USE_FRM];
建立定期備份策略、驗證備份可用性、善用二進位日誌做 PITR,是確保資料安全的關鍵三部曲。