本博客文章所述解决方案适用于任何 Linux 发行版:Ubuntu、Red Hat、Open SUSE、CentOS、Debian、Oracle Linux 等。然而,包安装命令可能会有所不同。
自动备份 MySQL 服务器数据库对于防止数据丢失至关重要。要正确自动化备份,您需要按照以下步骤执行:
- 创建数据库备份
- 压缩备份
- 加密压缩文件
- 使用 FTP、Dropbox、AWS、Google Drive 等将备份发送到云存储
- 收到备份结果的邮件通知
- 创建备份计划
- 删除旧备份
本文将考虑以下执行这些步骤的方式:
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数据库,并且还提供了增量备份的功能。
安装
sudo apt-get install automysqlbackup
如果你的Linux发行版基于RPM,设置过程会稍微复杂一些。
- 下载AutoMySQLBackup的最新版本
wget https://github.com/sixhop/AutoMySQLBackup/archive/master.zip
- 创建一个目录并解压下载的压缩包
mkdir /opt/automysqlbackup mv AutoMySQLBackup-master.zip cd /opt/automysqlbackup tar -zxvf AutoMySQLBackup-master.zip
- 然后安装AutoMySQLBackup
./install.sh
AutoMySQLBackup设置
要配置AutoMySQLBackup,你需要编辑automysqlbackup.conf文件:
sudo nano /etc/automysqlbackup/automysqlbackup.conf
AutoMySQLBackup包含许多设置,你可以在官方
文档中找到完整的列表。
请注意以下几点:
- 配置文件的路径
CONFIG_configfile="/etc/automysqlbackup/automysqlbackup.conf"
- 备份存储目录的路径
CONFIG_backup_dir='/var/backup/db'
- 连接MySQL的信息
CONFIG_mysql_dump_username='root' CONFIG_mysql_dump_password='my_password' CONFIG_mysql_dump_host='localhost'
- 你需要备份或需要排除的数据库列表
CONFIG_db_names=('my_db') CONFIG_db_exclude=('information_schema')
- 电子邮件通知地址
CONFIG_mail_address='mail@google.com'
- 调度选项
CONFIG_rotation_daily=6 CONFIG_rotation_weekly=35 CONFIG_rotation_monthly=150
- 备份后运行的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 /etc/automysqlbackup/automysqlbackup.conf
总结
如果你并非bash的高级用户,但又希望有一种简单的方式来备份MySQL数据库到指定文件夹,那么这个工具可能是一个不错的选择。特别是其增量备份的功能值得我们注意。然而,这个方案的缺点在于,它不支持集成FTP和云存储位置。即使你只想上传到FTP,你也需要编写一个单独的bash脚本。
优点:
- 支持内置的增量备份
缺点:
- 备份存储位置只能指定为文件夹
- 没有集成的旧备份删除方案
SqlBak
SqlBak 是一个云备份服务。这是一个为你提供大量自动备份 MySQL 数据库选项的服务。在 SqlBak 中创建备份的过程可能不仅包括创建、压缩、加密和将数据发送到云存储位置,还包括发送通知和在另一台计算机上运行恢复操作。
这项服务不仅允许你创建 MySQL 备份,还支持 PostgreSQL 和 MS SQL Server 数据库的备份。
安装和注册
你可以使用操作系统自带的标准包管理器安装该应用程序。你可以在这里找到针对你的操作系统的包安装和注册指南。
在 Linux 上安装 SqlBak 应用程序非常简单,更多详细信息可以在这里找到。
注册后,你的服务器将出现在仪表板页面上。
sudo sqlbak --add-connection --db-type=mysql --user=root
现在你可以创建一个备份任务。这可以通过点击“添加新任务”然后选择“创建任务”来完成。
在“选择数据库”部分,你可以选择需要备份的数据库。
然后,在“在目标位置存储备份”部分,你可以选择发送文件的位置。你可以选择文件夹、FTP、Amazon S3、Google Drive、DropBox、Azure Blob Storage或OneDrive。请注意:你可以同时选择多个目标,例如,文件夹和Amazon S3。
在“调度备份”部分,你可以指定每天何时运行备份任务。你可以在高级设置中更改间隔并指定其他启动规则。
在“发送电子邮件确认”部分,你可以点击“测试”按钮,测试将电子邮件通知发送到输入的电子邮件地址。
在备份任务设置页面,你可以找到很多其他有趣的设置,如执行后和执行前的脚本、加密和备份文件夹。
“还原任务”部分值得特别关注。这部分允许你将新创建的文件还原到另一个数据库(例如,到开发服务器)。
当你点击“立即运行”按钮时,它会立即运行任务并显示任务执行日志。
总结:
SqlBak为自动化MySQL备份提供了广泛的选项。此解决方案的一个显著特点是其配置和支持的便捷性。它还允许你集中管理多台服务器的备份。这个解决方案不仅自动化了将备份下载到各种云存储位置,而且自动化了删除旧备份。
优点:
- 易于使用和维护
- 能够将备份发送到云存储
- 能够自动恢复数据库
- 能够备份数据库以及文件夹
- 自动删除旧的备份
缺点:
- 不能在没有网络浏览器的情况下使用
- 需要互联网连接