将数据同步到云盘: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