perl-DBD-MySQL。--flushlog 但仍會鎖表)。FLUSH TABLES WITH READ LOCK 鎖定,寫入阻塞。datadir 並修正權限。yum install -y perl-DBD-MySQL mysqlhotcopy
# ~/.my.cnf
[mysqlhotcopy]
user=root
password=YourPassword
# chmod 600 ~/.my.cnf
mysqlhotcopy -u root -p'pwd' --quiet db_name /backup/mysql/
mysqlhotcopy -u root -p'pwd' --quiet db_name new_db_name # 另存為新庫
#!/bin/bash
BACKUP_DIR="/backup/mysql"
TMP_DIR="/tmp/mysqlbackup_$$"
MYSQL_USER="root"
MYSQL_PWD="password"
DATA_DIR="/var/lib/mysql"
mkdir -p "$TMP_DIR" "$BACKUP_DIR"
# 取得所有資料庫名稱(排除 mysql、test、performance_schema 等系統庫)
DBS=$(ls -1 "$DATA_DIR" | grep -Ev '^(mysql|test|performance_schema|sys|information_schema)$')
for db in $DBS; do
/usr/bin/mysqlhotcopy --user=$MYSQL_USER --password=$MYSQL_PWD -q "$db" "$TMP_DIR"
echo "$(date '+%F %T') Database:$db backup success!" >> "$BACKUP_DIR/backup.log"
done
# 壓縮打包
DATE_TAG=$(date +%F)
tar czf "$BACKUP_DIR/mysql-$DATE_TAG.tar.gz" -C "$TMP_DIR" .
rm -rf "$TMP_DIR"
# 保留最近 7 天
find "$BACKUP_DIR" -name 'mysql-*.tar.gz' -mtime +7 -delete
chmod +x /backup/mysqlbackup.sh
# 每天凌晨 3 點執行
echo "0 3 * * * /backup/mysqlbackup.sh" | crontab -
service mysqld stopcp -rf /backup/mysql/db_name /var/lib/mysql/chown -R mysql:mysql /var/lib/mysql/db_name && chmod 700 /var/lib/mysql/db_name && chmod 660 /var/lib/mysql/db_name/*mysqlhotcopy 僅適用 MyISAM、本機、會鎖表。InnoDB 生產環境強烈建議改用 Percona XtraBackup(熱備、不鎖表、支援增量、流式傳輸)。