缘由
最近整理屋子的时候,无意间发现了去年买的一张玩客云的板子。当时只花了四十多就搞到了(不过现在貌似涨价了),792M小到可怜的内存,貌似什么事情也干不了,挂几个docker容器就会崩溃的样子
(但架不住便宜呀,一杯奶茶的价格,整了一套低功耗服务器,连电费都几乎可以忽略。)
而且这玩意的架构是armv7的,虽然受限不少,但我前几天用它跑了个 Alist,表现出乎意料:内存占用只有几十兆,下载速度也很快,用来做内网云盘完全没问题。
正好最近有个异地备份主站数据库的需求(博客和各种笔记软件的数据库都放在主站服务器里,突发意外就完蛋了……无论如何是要做好备份的),于是可以用这块板子搭个自动化的 MySQL 远程备份脚本。
开搞
(整体思路:用客云通过远程连接主动拉取主服务器的数据库,实现异地自动备份。后续可按需添加多个数据库、多个定时任务。)
首先,需要下载好MySQL和cron(实行定时任务的东西)。如果你和我一样装了宝塔面板,那 cron 就可以不装了,直接用宝塔的定时任务即可。
sudo apt update
sudo apt install mysql-client
sudo apt install cron
然后,你需要知道:
- 需要备份数据库的主机地址
- 数据库用户名、密码
1.给主站(待备份)的数据库添加玩客云ip权限
大多数 MySQL 默认不允许其它ip远程连接,否则你会看到这样的报错:
mysqldump: Got error: 1130: Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this My8QL server when trying to connect
因此我们首先需要在主站的数据库(需要备份的数据库)的用户权限里加上玩客云所在的ip。
对于没用宝塔面板的用户:
mysql -u root -p
登录后执行:
CREATE USER IF NOT EXISTS 'youruser'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON yourdb.* TO 'youruser'@'xxx.xxx.xxx.xxx';
FLUSH PRIVILEGES;
yourdb
:目标数据库名youruser
:数据库用户名yourpassword
:数据库密码xxx.xxx.xxx.xxx
:玩客云的公网 IP
注意:如果没有固定公网 IP,可以将 IP 改成 %
表示接受任意来源,但不建议在生产环境使用。
2.配置文件
确保主服务器已开放 3306 端口(MySQL 默认端口)
(以下内容仅需在玩客云机器添加即可)
#!/bin/bash
# 配置区,请按照实际情况修改
REMOTE_HOST="yourdomain.com"
REMOTE_PORT=3306
DB_USER="youruser"
DB_PASS="yourpassword"
DB_NAME="yourdatabase"
BACKUP_DIR="/mysql_backups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
FILENAME="$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"
# 备份数据库
mysqldump -h "$REMOTE_HOST" -P "$REMOTE_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$FILENAME"
# 删除7天前的备份,防止硬盘炸了
find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +7 -delete
然后,别忘了给脚本添加可执行权限哦
chmod +x /mysql_backup.sh
然后,可以直接运行看看效果。如果没出问题的话,应该会在/mysql_backups
出现一个MySQL备份文件:
3. 定时任务
打开crontab
crontab -e
每天凌晨 3 点运行脚本(备份一次),并写入日志
0 3 * * * /mysql_backup.sh >> /mysql_backup.log 2>&1
mysql-client是只有客户端吗?
是的哦。如果仅仅是实现备份的话只用客户端即可(mysql-client已经包含了mysqldump数据库导出工具)。
主要是玩客云内存太小带不动服务端的
玩客云所在ip不是动态的嘛?
这玩意主要还是取决于家里的宽带吧,如果有静态公网ip,那它就是固定的
玩客云本质上就是一台服务器主机,和动态ip没啥关系
初中那会我也买过一个,挺好玩的,拆机烧固件,甚至能当电视盒子?但是不敢存重要数据在里面,是怕哪一天突然坏了。
确实挺好玩的,而且挺便宜,性价比蛮高的