定時備份MySQL資料庫

蜜獾互联网發表於2024-12-09

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 資料庫功能。

注:該定時任務會在系統重啟後依舊保留,不用擔心重新設定

相關文章