| 需求 | 命令範例 |
|---|---|
| 單庫備份 | mysqldump -h localhost -u root -p db_name > backup.sql |
| 單庫壓縮備份 | mysqldump -h localhost -u root -p db_name | gzip > backup.sql.gz |
| 帶 DROP TABLE(可直接覆蓋還原) | mysqldump --add-drop-table -u root -p db_name > backup.sql |
| 指定表備份 | mysqldump -u root -p db_name tbl1 tbl2 > backup.sql |
| 多庫備份 | mysqldump -u root -p --databases db1 db2 > multi.sql |
| 僅結構 | mysqldump --no-data --databases db1 db2 > struct.sql |
| 全例備份 | mysqldump --all-databases > all.sql |
# 一般還原
mysql -h localhost -u root -p db_name < backup.sql
# 壓縮檔直導
gunzip < backup.sql.gz | mysql -u root -p db_name
# 跨伺服器直接遷移
mysqldump -u user -p db_name | mysql -h target_host -u user -p -C db_name
前提:同版本、同 OS、同架構、同儲存引擎、可接受停機時間。
@echo off
echo === 開始備份 %date% %time% ===
net stop mysql
xcopy "D:\phpStudy\MySQL\data\db_name\*.*" "D:\db_backup\%date:~0,10%\" /E /Y /C
net start mysql
echo === 備份完成 %date% %time% ===
/E 包含子目錄、/Y 覆蓋不提示、/C 忽略錯誤繼續# 每日 02:00 執行增量同步至備份伺服器
0 2 * * * rsync -avz --delete /var/lib/mysql/ backup_user@backup_server:/backup/mysql/
<?php
mysql_connect('localhost', 'user', 'pass');
mysql_select_db('db_name');
function copy_table($from, $to) {
if (table_exists($to)) return false;
mysql_query("CREATE TABLE $to LIKE $from");
mysql_query("INSERT INTO $to SELECT * FROM $from");
return true;
}
function table_exists($table, $db = false) {
if (!$db) { $db = mysql_result(mysql_query("SELECT DATABASE()"), 0); }
$sql = "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='$db' AND table_name='$table'";
return mysql_result(mysql_query($sql), 0) == 1;
}
?>
適用於應用內部定期備份核心表至備份表,配合定時任務執行。
gzip -c | openssl enc -aes-256-cbc