文章

将数据同步到云盘:openlist+rclone

为了保险起见,最好同步一份数据到云盘,这样本地硬盘挂了,至少还有云端的一份。同步方式是用openlist+rclone,云盘的话阿里云盘,天翼云盘等等只要可以被openlist挂载的都可以。当然cloudflare的对象存储也可以,但我担心会超额度,还是用云盘更保险。

实例1:备份mysql的数据库

这个操作可以用任意一台机器,首先需要安装mysqldump

安装mysqldump

sudo apt install mysql-client     //ubuntu系统

创建脚本

备份单个数据库

#!/bin/bash

# 数据库信息配置
DB_USER="user"          # 数据库用户名
DB_PASSWORD="123456"    # 数据库密码
DB_NAME="name"         # 数据库名称
DB_HOST="ip"
DB_PORT="3306"
# 备份保存路径
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F)
FILENAME="${DB_NAME}_${DATE}.sql"
TARFILE="${FILENAME}.tar.gz"
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"
# 开始备份
echo "[$(date)] 开始备份数据库 $DB_NAME ..."
mysqldump -h ${DB_HOST} -u$DB_USER -p$DB_PASSWORD -P${DB_PORT} $DB_NAME > "$BACKUP_DIR/$FILENAME"
# 压缩备份
tar -czf "$BACKUP_DIR/$TARFILE" -C "$BACKUP_DIR" "$FILENAME"
rm "$BACKUP_DIR/$FILENAME"
echo "[$(date)] 备份完成:$TARFILE"
# 自动删除7天前的旧备份
find "$BACKUP_DIR" -name "${DB_NAME}_*.tar.gz" -mtime +7 -exec rm {} \;
echo "[$(date)] 清理7天前备份完成"

备份多个数据库

#!/bin/bash
# mysql_multi_backup.sh

# 配置
MYSQL_USER="user"
MYSQL_PASSWORD="123456"
MYSQL_HOST="ip"
MYSQL_PORT="3306"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d)

# 要备份的数据库列表
DATABASES=("db1" "db2" "db3")

# 创建备份目录
mkdir -p $BACKUP_DIR

echo "开始MySQL备份 - $(date)"

# 备份每个数据库
for DB in "${DATABASES[@]}"; do
    BACKUP_FILE="$BACKUP_DIR/${DB}_${DATE}.sql.gz"
    echo "备份数据库: $DB"
    
    mysqldump -h $MYSQL_HOST -P$MYSQL_PORT -u $MYSQL_USER -p$MYSQL_PASSWORD $DB | gzip > $BACKUP_FILE
    
    if [ $? -eq 0 ]; then
        echo "✓ $DB 备份成功"
    else
        echo "✗ $DB 备份失败"
    fi
done

# 清理旧备份(保留7天)
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

echo "所有数据库备份完成 - $(date)"

添加执行权限

chmod +x /backup/mysql_backup.sh

设置定时任务

crontab -e
0 2 * * * /backup/mysql_backup.sh   //每天2点执行

rclone配置

安装rclone

sudo apt install rclone   //ubuntu系统

运行配置命令

rclone config

按着提示一步步操作即可
列出 WebDAV 根目录

rclone lsd my_webdav:

同步 同步是保持两端一致,如果目的路径有其他文件,会被删除掉。

rclone sync /backup/mysql openlist:aliyun/backup/mysql     //name是openlist,aliyun/backup/mysql是同步目的的路径

备份

rclone copy /backup/mysql openlist:aliyun/backup/mysql

同样的做个定时任务。

实例2:备份postgresql的数据库

安装pg_dump

sudo apt-get install postgresql-client     //ubuntu系统

查看路径

which pg_dump

报错

pg_dump: error: aborting because of server version mismatch

因为版本不匹配

升级pg_dump

1.添加官方存储库
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
2.导入存储库的 GPG 密钥
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
3.更新包列表
4.升级
sudo apt-get install postgresql-client-17

创建脚本

备份单个数据库

#!/bin/bash
# postgres_simple_backup.sh

# 基本配置
PG_HOST="ip"
PG_PORT="5432"
PG_USER="user"
PG_PASSWORD="123456"
DB_NAME="dbname"
BACKUP_DIR="/backup/postgres"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 设置密码
export PGPASSWORD=$PG_PASSWORD

# 执行备份(每天一个文件)
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_$(date +%Y%m%d).sql.gz"

echo "开始备份数据库: $DB_NAME - $(date)"

# 备份并压缩
pg_dump -h $PG_HOST -p $PG_PORT -U $PG_USER $DB_NAME | gzip > $BACKUP_FILE

if [ $? -eq 0 ]; then
    echo "✓ 备份成功: $BACKUP_FILE"
else
    echo "✗ 备份失败"
fi

# 清理7天前的备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

echo "备份完成 - $(date)"

# 清理密码
unset PGPASSWORD

备份多个数据库

#!/bin/bash
# postgres_multi_backup.sh

# 配置
PG_HOST="ip"
PG_PORT="5432"
PG_USER="user"
PG_PASSWORD="123456"
BACKUP_DIR="/backup/postgres"
DATE=$(date +%Y%m%d)

# 要备份的数据库列表
DATABASES=("umami" "mydb")

# 设置密码
export PGPASSWORD=$PG_PASSWORD

# 创建备份目录
mkdir -p $BACKUP_DIR

echo "开始PostgreSQL备份 - $(date)"

# 备份每个数据库
for DB in "${DATABASES[@]}"; do
    BACKUP_FILE="$BACKUP_DIR/${DB}_${DATE}.sql.gz"
    echo "备份数据库: $DB"
    
    pg_dump -h $PG_HOST -p $PG_PORT -U $PG_USER $DB | gzip > $BACKUP_FILE
    
    if [ $? -eq 0 ]; then
        echo "✓ $DB 备份成功"
    else
        echo "✗ $DB 备份失败"
    fi
done

# 清理旧备份(保留7天)
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

echo "所有数据库备份完成 - $(date)"

unset PGPASSWORD

其余与上面一致,当执行脚本的时候报错:postgres.sh: 13: Syntax error: "(" unexpected
执行脚本时将sh postgresql.sh改成bash postgresql.sh

License:  CC BY 4.0