# 基礎備份
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 | 客戶端交互/執行 SQL | mysql -uroot -p -e "SHOW DATABASES;" |
mysqladmin | 管理操作 | mysqladmin -uroot -p status、shutdown、flush-logs |
mysqldump | 邏輯備份 | 見上文 |
myisamchk | MyISAM 表檢查/修復/優化 | myisamchk -r /var/lib/mysql/db/*.MYI |
mysqlshow | 快速查看庫/表結構 | mysqlshow -uroot -p linux |
# 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;"