玩客云实现MySQL数据库异地备份

玩客云实现MySQL数据库异地备份

缘由

最近整理屋子的时候,无意间发现了去年买的一张玩客云的板子。当时只花了四十多就搞到了(不过现在貌似涨价了),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

讨论区

ℹ️
评论审核提示: 近期垃圾评论泛滥,本站已启用严格的自动审查机制。若评论未能成功发送,可能是被误判为垃圾信息(你是故意的还是不小心的)。建议适当修改后重试,或直接给Mimosa发邮件。
发布超过30天的文章将关闭讨论。

评论

6 条
  1. 萧瑟的头像
    萧瑟

    mysql-client是只有客户端吗?

    1. Mimosa233的头像
      Mimosa233 作者

      是的哦。如果仅仅是实现备份的话只用客户端即可(mysql-client已经包含了mysqldump数据库导出工具)。
      主要是玩客云内存太小带不动服务端的 :sabbat_3:

  2. 永恒末匕的头像
    永恒末匕

    玩客云所在ip不是动态的嘛?

    1. Mimosa233的头像
      Mimosa233 作者

      这玩意主要还是取决于家里的宽带吧,如果有静态公网ip,那它就是固定的
      玩客云本质上就是一台服务器主机,和动态ip没啥关系

  3. Yalois的头像
    Yalois

    初中那会我也买过一个,挺好玩的,拆机烧固件,甚至能当电视盒子?但是不敢存重要数据在里面,是怕哪一天突然坏了。

    1. Mimosa233的头像
      Mimosa233 作者

      确实挺好玩的,而且挺便宜,性价比蛮高的 :sabbat_1:

评论已关闭

目录

目录

系列文章
学习笔记/技术
License
许可协议:CC BY-SA 4.0
原文链接:https://loneapex.cn/archives/3502