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

Linux 下 MySQL 備份與恢復實戰:mysqldump、壓縮、遠程直傳與表級導出

     編輯:MySQL 資料庫相關知識

全庫備份

# 基礎備份
mysqldump -uroot -p linux > /root/Linux.sql

# 指定輸出路徑
mysqldump -uroot -p linux > /home/beinan/Linuxsir031130.sql

# 大庫壓縮備份(推薦)
mysqldump -uroot -p tm | gzip > tm_050519.sql.gz

恢復操作

# 前置:目標庫需存在
mysql -uroot -p -e "CREATE DATABASE linux;"

# 恢復
mysql -uroot -p linux < /home/beinan/Linuxsir031130.sql

# 壓縮包直恢復
zcat tm_050519.sql.gz | mysql -uroot -p tm

表級數據導出(非備份,供異構導入)

# 進入 mysql 客戶端
mysql -uroot -p -e "USE linux; SELECT * FROM table_name INTO OUTFILE '/home/table_name.txt';"

# 權限要求:secure_file_priv 允許的目錄
# 查看:SHOW VARIABLES LIKE 'secure_file_priv';

區別:mysqldump 含 DDL+DML,可跨版本遷移;SELECT ... INTO OUTFILE 僅純文本數據,需目標表結構已存在,配合 LOAD DATA INFILE 極速導入。

常用管理命令速查

命令用途示例
mysql客戶端交互/執行 SQLmysql -uroot -p -e "SHOW DATABASES;"
mysqladmin管理操作mysqladmin -uroot -p status、shutdown、flush-logs
mysqldump邏輯備份見上文
myisamchkMyISAM 表檢查/修復/優化myisamchk -r /var/lib/mysql/db/*.MYI
mysqlshow快速查看庫/表結構mysqlshow -uroot -p linux

MyISAM 表離線修復流程

# 1. 停止服務(必須)
systemctl stop mysqld

# 2. 檢查
myisamchk /var/lib/mysql/linux/*.MYI

# 3. 修復(-r 恢復模式)
myisamchk -r /var/lib/mysql/linux/*.MYI

# 4. 啟動
systemctl start mysqld

警告:InnoDB 表**不可**用 myisamchk,損壞需從備份恢復或 innodb_force_recovery。

自動化備份腳本範例

#!/bin/bash
# /usr/local/bin/mysql_backup.sh
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F_%H-%M)
DB_LIST="db1 db2 db3"
mkdir -p $BACKUP_DIR

for DB in $DB_LIST; do
    mysqldump --single-transaction --master-data=2 -uroot -p'Pass' $DB | gzip > $BACKUP_DIR/${DB}_${DATE}.sql.gz
    # 保留 7 天
    find $BACKUP_DIR -name "${DB}_*.sql.gz" -mtime +7 -delete
done

# 同步至遠程
rsync -avz $BACKUP_DIR/ user@backup-server:/remote/backup/mysql/

加入 crontab:0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

驗證備份可用性

# 臨時庫驗證
mysql -uroot -p -e "CREATE DATABASE verify_$(date +%s);"
zcat backup.sql.gz | mysql -uroot -p verify_xxx
mysql -uroot -p -e "SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='verify_xxx';"
mysql -uroot -p -e "DROP DATABASE verify_xxx;"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved