我有一台装有 Mysql 数据库的 Ubuntu 服务器。我想在另一台服务器(例如 ovh)上设置夜间自动备份该数据库的功能。
我不知道什么是最好的工具。如果有人能提供一些建议...
提前致谢。
答案1
自动执行此任务的最简单方法是结合使用 MySQL Dumps 和 cronjob。您可以在此和其他互联网网站上找到大量有关此主题的信息,但为了完整起见,请执行以下操作:
创建 mysqldump.sh 文件
其中将包含我们将在 cron 作业中安排的 mysql dump 命令(替换用户、密码和路径以匹配您的环境):
mysqldump -u root -p<mysql_root_password> --all-databases | gzip > /desired/backup/folder/mysqldb_`date +%F`.sql.gz
编辑:如果希望脚本将备份存储在远程位置,只需挂载相应的设备或共享并在脚本中使用挂载路径。
测试脚本
确保脚本具有执行权限:
chmod +x /path/to/mysqldump.sh
执行脚本:
sh /path/to/mysqldump.sh
并测试它是否正常工作(备份文件将在指定的备份文件夹中创建)。
创建并安排新的 cron 作业
在命令提示符中输入
sudo crontab -e
并在文件底部添加以下行:
30 23 * * * /path/to/mysqldump.sh
这将在每天 23:30 执行脚本。
扩展这个简单的脚本
为了改进这种简单的备份方法,实际上可以做很多事情:
- 备份到另一个系统
- 监控磁盘空间
- 电子邮件报告
- ...
所以不要就此结束,继续实验吧!:-)
使用备份工具或基于云的备份服务
虽然上述方法是最简单的方法之一,并且可以扩展以满足您的特定需求,但值得一提的是,还有其他替代方法:
- 备份工具,例如 AutoMySQLBackup,这是一款开源应用程序,可以简化配置电子邮件通知、压缩、加密、轮换和备份类型(例如增量)的过程。至于 2018 年 5 月,它可通过 APT 供 Ubuntu Server 使用。
- 基于云的备份服务,例如 BackupBird、myRepono、Bitcan 等,如果您管理多个数据库服务器并想要集中管理所有备份,这些服务可能会很有趣。
请记住,我与上述任何解决方案和服务都没有任何关系,我列出它们仅供参考,因此使用它们需要您自行承担风险。
有用的链接/参考资料:
计划任务->https://en.wikipedia.org/wiki/Cron
MySQL 转储 ->https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
答案2
有几种方法可以自动备份 MySQL 数据库:
- Bash 脚本
- 使用 automysqlbackup
- 第三方工具
Bash 脚本
# Backup storage directory
backup_folder=/var/backups
# Notification email address
recipient_email=<[email protected]>
# MySQL user
user=<user_name>
# MySQL password
password=<password>
# Number of days to store the backup
keep_day=30
sqlfile=$backup_folder/all-database-$(date +%d-%m-%Y_%H-%M-%S).sql
zipfile=$backup_folder/all-database-$(date +%d-%m-%Y_%H-%M-%S).zip
# Create a backup
sudo mysqldump -u $user -p$password --all-databases > $sqlfile
if [ $? == 0 ]; then
echo 'Sql dump created'
else
echo 'mysqldump return non-zero code' | mailx -s 'No backup was created!' $recipient_email
exit
fi
# Compress backup
zip $zipfile $sqlfile
if [ $? == 0 ]; then
echo 'The backup was successfully compressed'
else
echo 'Error compressing backup' | mailx -s 'Backup was not created!' $recipient_email
exit
fi
rm $sqlfile
echo $zipfile | mailx -s 'Backup was successfully created' $recipient_email
# Delete old backups
#find $backupfolder -mtime +$keep_day -delete
find $backup_folder -mtime +$keep_day -delete
- 优点:
- 完全免费
- 您可以将所需的一切添加到 bash 脚本中以自动执行备份
- 缺点:
- 需要对 Bash 脚本有很好的了解才能完成复杂的备份过程
- 很难配置将备份发送到云端
sudo apt-get install 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
./install.sh
sudo nano /etc/automysqlbackup/automysqlbackup.conf
CONFIG_configfile="/etc/automysqlbackup/automysqlbackup.conf"
CONFIG_backup_dir='/var/backup/db'
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='[email protected]'
CONFIG_rotation_daily=6
CONFIG_rotation_weekly=35
CONFIG_rotation_monthly=150
automysqlbackup /etc/automysqlbackup/automysqlbackup.conf
- 优点:
- 免费
- 备份过程的几个部分已经添加到脚本中
- 缺点:
- 您只能指定一个文件夹作为备份存储位置(这不安全)
- 没有机会删除旧备份的文件
第三方工具
如果你需要一些现成的、易于使用且有很多选项的东西,你可以使用查询语句。
优点:
- 免费
- 它很容易使用
- 支持多种存储云
- 有不同类型的通知
- 云端会自动删除旧备份
- 一个 Web 界面可管理多个 DBMS 服务器
- 不同类型的 DBMS (MySQL、PostgreSQL、MS SQL Server)
缺点:
- 还没有机会进行增量备份