MySQL 提供了 mysqldump
命令來實現匯出資料庫,命令用法如下:
mysqldump -u root -p[password] [database_name] > [backup].sql
在 Linux 伺服器中結合 crontab
定時命令實現定時備份資料庫,同時支援壓縮、備份日誌、定期清理等功能。
1. 備份執行指令碼
新建 mysql 的備份命令指令碼
$ vi db_backup.sql
複製以下內容:
#!/bin/bash
# 資料庫名稱
database_name="mydb"
mysql_password=""
# 備份檔案儲存地址
backup_dir="/mydata/backup/mydb"
# 備份檔名字首
backup_prefix="demo"
# 備份檔案的有效期,單位為day
backup_days="30"
dd=`date +%Y-%m-%d-%H-%M-%S`
backup_file="$backup_dir/$backup_prefix-$dd.sql"
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
mysqldump -u root -p$mysql_password $database_name > $backup_file
# 壓縮sql檔案
gzip -f $backup_file
# 寫建立備份日誌
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
# 清除過期的檔案
find $backup_dir -name "$backup_prefix*.sql.gz" -mtime +$backup_days -exec rm {} \;
至此,執行該指令碼,可以生成壓縮的資料庫.sql檔案
2. 定時任務
給 shell 設定執行許可權:
$ chmod +x db_backup.sql
使用 crontab
命令定期執行指令碼
# 編輯 cron 指令碼檔案
$ sudo crontab -e
在開啟的配置檔案中追加以下內容:
# 示例為每天凌晨2點30分執行備份指令碼檔案
# 注意修改要執行的指令碼的路徑
30 2 * * * /root/bin/db_backup.sh
檢查定時任務:
$ crontab -l
# 結果會包含新增加的定時任務
# 30 2 * * * /root/bin/db_backup.sh
至此實現了定時備份 MySQL 資料庫功能。
注:該定時任務會在系統重啟後依舊保留,不用擔心重新設定