如何在 Linux 中自动化 MySQL 数据库备份

本博客文章所述解决方案适用于任何 Linux 发行版:Ubuntu、Red Hat、Open SUSE、CentOS、Debian、Oracle Linux 等。然而,包安装命令可能会有所不同。
自动备份 MySQL 服务器数据库对于防止数据丢失至关重要。要正确自动化备份,您需要按照以下步骤执行:

  1. 创建数据库备份
  2. 压缩备份
  3. 加密压缩文件
  4. 使用 FTP、Dropbox、AWS、Google Drive 等将备份发送到云存储
  5. 收到备份结果的邮件通知
  6. 创建备份计划
  7. 删除旧备份


本文将考虑以下执行这些步骤的方式:

  1. 创建 bash 脚本
  2. 使用 AutoMySQLBackup
  3. 使用 SqlBak

Bash 脚本

在大多数情况下,bash 脚本是一个非常好的解决方案。然而,并非所有的存储位置都允许你使用 shell 命令上传文件。如果你只打算将备份保存在一个目录中,那么可以使用一个简单的脚本来完成这个任务。
为了设置这个解决方案,我们需要安装 postfix mailutils。在 Ubuntu 中,我们可以这样做:

sudo apt-get update 
sudo apt-get install postfix mailutils

以下是执行定期备份的 bash 脚本的最简单实现。在脚本的开头,我们指定备份存储目录、通知电子邮件地址和备份存储期限。

# 备份存储目录
backupfolder=/var/backups

# 通知电子邮件地址
recipient_email=<username@mail.com>

# MySQL 用户
user=<user_name>

# MySQL 密码
password=<password>

# 存储备份的天数
keep_day=30 

sqlfile=$backupfolder/all-database-$(date +%d-%m-%Y_%H-%M-%S).sql
zipfile=$backupfolder/all-database-$(date +%d-%m-%Y_%H-%M-%S).zip 

# 创建备份
sudo mysqldump -u $user -p$password --all-databases > $sqlfile 

if [ $? == 0 ]; then
  echo 'Sql dump 已创建' 
else
  echo 'mysqldump 返回非零代码' | mailx -s '备份未创建!' $recipient_email  
  exit 
fi 

# 压缩备份
zip $zipfile $sqlfile 
if [ $? == 0 ]; then
  echo '备份成功压缩' 
else
  echo '压缩备份时发生错误' | mailx -s '备份未创建!' $recipient_email 
  exit 
fi 
rm $sqlfile 
echo $zipfile | mailx -s '备份成功创建' $recipient_email 

# 删除旧备份
find $backupfolder -mtime +$keep_day -delete

Cron 允许你定期运行这个脚本。为了实现这一点,可以按照以下步骤操作:

sudo crontab -e

然后,将脚本路径添加到字符串的末尾

30 22 * * * /home/user/script/mysql_backup.sh

之后,你的脚本将在每天晚上 10:30 执行。

总结

如果你熟悉 bash 并且知道如何支持它,创建一个 bash 脚本是一个良好的、简单的解决方案。然而,这个
解决方案也存在一些缺点。例如,将备份保存到 Google Drive 或 Dropbox 可能会比较困难。云存储服务很少支持 CLI 接口。此外,实现旧备份的自动删除可能会是一项艰巨的任务。

优点:
  • 理想情况下,你可以定制一个解决方案,考虑到你所有的特定要求
缺点:
  • 如果你想创建一个更复杂的解决方案,你需要有编写 bash 脚本的高级知识
  • 配置将备份发送到云存储可能会比较困难

AutoMySQLbackup

AutoMySQLBackup是一款在GNU许可证下分发的命令行工具。此工具可以帮助你自动备份MySQL数据库,并且还提供了增量备份的功能。

安装

如果你的Linux发行版是Debian,那么可以在仓库中找到AutoMySQLBackup,只需运行以下命令即可安装:
sudo apt-get install automysqlbackup

如果你的Linux发行版基于RPM,设置过程会稍微复杂一些。

  1. 下载AutoMySQLBackup的最新版本
    wget https://github.com/sixhop/AutoMySQLBackup/archive/master.zip
  2. 创建一个目录并解压下载的压缩包
    mkdir /opt/automysqlbackup
    mv AutoMySQLBackup-master.zip 
    cd /opt/automysqlbackup
    tar -zxvf AutoMySQLBackup-master.zip
  3. 然后安装AutoMySQLBackup
    ./install.sh

AutoMySQLBackup设置

要配置AutoMySQLBackup,你需要编辑automysqlbackup.conf文件:

sudo nano /etc/automysqlbackup/automysqlbackup.conf

AutoMySQLBackup包含许多设置,你可以在官方
文档中找到完整的列表。

请注意以下几点:

  1. 配置文件的路径
    CONFIG_configfile="/etc/automysqlbackup/automysqlbackup.conf"
  2. 备份存储目录的路径
    CONFIG_backup_dir='/var/backup/db'
  3. 连接MySQL的信息
    CONFIG_mysql_dump_username='root' 
    CONFIG_mysql_dump_password='my_password' 
    CONFIG_mysql_dump_host='localhost'
  4. 你需要备份或需要排除的数据库列表
    CONFIG_db_names=('my_db') 
    CONFIG_db_exclude=('information_schema')
  5. 电子邮件通知地址
    CONFIG_mail_address='mail@google.com'
  6. 调度选项
    CONFIG_rotation_daily=6 
    CONFIG_rotation_weekly=35 
    CONFIG_rotation_monthly=150
  7. 备份后运行的bash脚本
    POSTBACKUP="/etc/mysql-backup-post"
    如果你计划保存备份的天数有限,你可以通过配置POSTBACKUP脚本来删除老旧的备份,如下所示:
    # 删除早于30天的备份 
    find /var/backup/db -mtime +30 -delete

默认情况下,AutoMySQLBackup会使用“gzip” 压缩备份文件。你可以通过修改CONFIG_mysql_dump_compression参数来更改这个设置。如果你想添加加密,可以使用CONFIG_encrypt和CONFIG_encrypt_password参数。

运行

要运行AutoMySqlBackup,执行以下命令:
automysqlbackup /etc/automysqlbackup/automysqlbackup.conf

总结

如果你并非bash的高级用户,但又希望有一种简单的方式来备份MySQL数据库到指定文件夹,那么这个工具可能是一个不错的选择。特别是其增量备份的功能值得我们注意。然而,这个方案的缺点在于,它不支持集成FTP和云存储位置。即使你只想上传到FTP,你也需要编写一个单独的bash脚本。

优点:
  1. 支持内置的增量备份
缺点:
  1. 备份存储位置只能指定为文件夹
  2. 没有集成的旧备份删除方案

SqlBak

SqlBak 是一个云备份服务。这是一个为你提供大量自动备份 MySQL 数据库选项的服务。在 SqlBak 中创建备份的过程可能不仅包括创建、压缩、加密和将数据发送到云存储位置,还包括发送通知和在另一台计算机上运行恢复操作。
这项服务不仅允许你创建 MySQL 备份,还支持 PostgreSQL 和 MS SQL Server 数据库的备份。

安装和注册

你可以使用操作系统自带的标准包管理器安装该应用程序。你可以在这里找到针对你的操作系统的包安装和注册指南。
在 Linux 上安装 SqlBak 应用程序非常简单,更多详细信息可以在这里找到。
注册后,你的服务器将出现在仪表板页面上。


然后,你应该添加一个到 MySQL 数据库的连接

sudo sqlbak --add-connection --db-type=mysql --user=root

现在你可以创建一个备份任务。这可以通过点击“添加新任务”然后选择“创建任务”来完成。

在“选择数据库”部分,你可以选择需要备份的数据库。


然后,在“在目标位置存储备份”部分,你可以选择发送文件的位置。你可以选择文件夹、FTP、Amazon S3、Google Drive、DropBox、Azure Blob Storage或OneDrive。请注意:你可以同时选择多个目标,例如,文件夹和Amazon S3。


在“调度备份”部分,你可以指定每天何时运行备份任务。你可以在高级设置中更改间隔并指定其他启动规则。

在“发送电子邮件确认”部分,你可以点击“测试”按钮,测试将电子邮件通知发送到输入的电子邮件地址。


在备份任务设置页面,你可以找到很多其他有趣的设置,如执行后和执行前的脚本、加密和备份文件夹。
“还原任务”部分值得特别关注。这部分允许你将新创建的文件还原到另一个数据库(例如,到开发服务器)。

当你点击“立即运行”按钮时,它会立即运行任务并显示任务执行日志。

总结:

SqlBak为自动化MySQL备份提供了广泛的选项。此解决方案的一个显著特点是其配置和支持的便捷性。它还允许你集中管理多台服务器的备份。这个解决方案不仅自动化了将备份下载到各种云存储位置,而且自动化了删除旧备份。

优点:
  1. 易于使用和维护
  2. 能够将备份发送到云存储
  3. 能够自动恢复数据库
  4. 能够备份数据库以及文件夹
  5. 自动删除旧的备份
缺点:
  1. 不能在没有网络浏览器的情况下使用
  2. 需要互联网连接

Leave a Comment