主理人说
利用 Dropbox的免费存储空间与API与Crontab程序自动备份,不费吹灰之力。本博客基于 LNMP ,想必大都如此,所以以下的脚本应该会适用大多数数据库情况;
辛辛苦苦劳作了一年,服务器炸了?我想最好提前抢救一下。
Ubuntu 18.04
MySQL 5.7
当前博客数据库以及图片资源已经完美的备份到了Dropbox;
数据库大小:5Mb
图片资源:2.4Gb
备份思路(Dropbox)
自动备份数据库至Dropbox思路:利用 Crontab 程序,自动执行脚本:1.导出MySQL数据库文件至服务器本地某个文件夹->>2.执行Dropbox_uploader.sh 脚本将 已导出的MySQL数据库文件上传至 Dropbox;
备份工具准备
1.Dropbox 账号;
2.利用数据库自动导出脚本 点此 查看完整脚本;
3.dropbox_uploader.sh 上传Dropbox脚本;
4.本文以名为 typecho 的数据库举例;
具体操作步骤
第一步 数据库导出到本地
typecho.mysql.sh 导出数据库脚本,点此查看完整脚本;
#!/bin/bash
# 以下配置信息请自己修改
mysql_user="root" #MySQL备份用户
mysql_password="urpassword" #MySQL备份用户的密码
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8" #MySQL编码
backup_db_arr=("typecho") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/home/typecho.bak/ #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=3 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
# 本行开始以下不需要修改
backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天之前的日期
backup_dir=$backup_location/$backup_Ymd #备份文件夹全路径
welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
# 判断MYSQL是否启动,mysql没有启动则备份退出
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!"
exit
else
echo $welcome_msg
fi
# 连接到mysql数据库,无法连接则备份退出
mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end
flag=`echo $?`
if [ $flag != "0" ]; then
echo "ERROR:Can't connect mysql server! backup stop!"
exit
else
echo "MySQL connect ok! Please wait......"
# 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
if [ "$backup_db_arr" != "" ];then
#dbnames=$(cut -d ',' -f1-5 $backup_database)
#echo "arr is (${backup_db_arr[@]})"
for dbname in ${backup_db_arr[@]}
do
echo "database $dbname backup start..."
`mkdir -p $backup_dir`
`mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset >$backup_dir/$dbname-$backup_time.sql`
`mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz`
flag=`echo $?`
if [ $flag == "0" ];then
echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
else
echo "database $dbname backup fail!"
fi
done
else
echo "ERROR:No database to backup! backup stop"
exit
fi
# 如果开启了删除过期备份,则进行删除操作
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
#`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
`find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
echo "All database backup success! Thank you!"
exit
fi
## 导出数据库命令
# mysqldump -uroot -ppassword abc >db_abc.sql
# mysqldump -uroot -ppassword abc | gzip > db_abc.sql.tar.gz
# mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz #压缩
## 导入数据库命令
# mysql -uroot -ppassword abc < /root/backup/db_abc.sql
# gunzip < /root/backup/abc.sql.tar.gz | mysql -uroot -ppassword abc
# gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename #还原
#参考 http://www.cooool.online/index.php/archives/23/
#参考 https://catdeacon.com/note/683.html
第二步 上传数据库至Dropbox
0.https://www.dropbox.com/developers/apps/create 登录你的Dropbox,创建应用并获得(App Key)与(App Secret);
记得保存(App Key)与(App Secret);
搞定了Api,下载脚本;dropbox_uploader.sh 脚本对应GitHub仓库:https://github.com/andreafabrizi/Dropbox-Uploader;
1.下载脚本 dropbox_uploader.sh 到服务器本地;
$ git clone https://github.com/andreafabrizi/Dropbox-Uploader.git
2.赋权并运行脚本;
$chmod +x dropbox_uploader.sh
$./dropbox_uploader.sh
$ /home/dropbox_uploader.sh upload /home/typecho.bak/* /typecho/sql/; #备份压缩后的数据库文件
常用命令使用方法
$./dropbox_uploader.sh [PARAMETERS] COMMAND...
对应为脚本-参数-命令
$./dropbox_uploader.sh upload /etc/Avideo.mp4 /Study/ #上传视频到 Dropbox 学习资料文件夹下
$./dropbox_uploader.sh download /backup.zip #下载Dropbox上的/backup.zip文件到服务器本地
$./dropbox_uploader.sh delete /backup.zip
更多命令参考:https://github.com/andreafabrizi/Dropbox-Uploader Readme.MD 部分;
Crontab 设置
50 23 * * * /home/typecho.mysql.sh; #压缩数据库并导出
55 23 * * * /home/dropbox_uploader.sh upload /home/typecho.bak/* /typecho/sql/; #备份压缩后的数据库文件
以上;
Faq
暂无。
版权属于:毒奶
联系我们:https://limbopro.com/6.html
毒奶搜索:https://limbopro.com/search.html
机场推荐:https://limbopro.com/865.html IEPL专线/100Gb/¥15/月起
毒奶导航:https://limbopro.com/daohang/index.html本文链接:https://limbopro.com/archives/MySQL-backup-to-Dropbox.html
本文采用 CC BY-NC-SA 4.0 许可协议,转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!