MySQL备份与还原

我们的VPS可能会硬盘损坏需要重装OS,或者运营商跑路了,所以需要定时备份数据库,以防不测。

备份

使用mysqldump导出SQL语句,因为SQL文件是文本文件,压缩比很高。

mysqldump参数说明:
--all-databases: 备份所有数据库
--single-transaction: 在一个事务中完成备份,保证数据一致性
--quick: 一行一行读取数据,减少内存使用
--lock-tables=false: 不锁表,减少对业务的影响

# 完整备份
mysqldump -u root -p --all-databases | bzip2 > backup.sql.bz2

# 单库备份
mysqldump -u root -p database_name | bzip2 > database_backup.sql.bz2

# 单表备份
mysqldump -u root -p database_name table_name | bzip2 > table_backup.sql.bz2

恢复

bzcat backup.sql.bz2 | mysql -u root -p

定时备份

  1. 创建备份脚本

将以下内容保存为 /usr/local/bin/mysql_backup.sh
这个脚本做了如下操作
– 备份数据库到BACKUP_DIR
– 清除RETENTION_DAYS天以前的备份
– 将备份文件同步到远程服务器REMOTE_HOST

#!/bin/bash
# 备份配置
BACKUP_DIR="/backup/mysql"     # 备份文件存放目录
DATE=(date +%Y%m%d_%H%M%S)   # 备份文件名中的时间戳
RETENTION_DAYS=7              # 备份文件保留天数
MYSQL_USER="root"             # MySQL用户名
MYSQL_PASSWORD="password"      # MySQL密码
REMOTE_USER="user"            # 远程服务器用户名
REMOTE_HOST="remote.backup.server" # 远程服务器地址
REMOTE_DIR="/backup/mysql"    # 远程服务器备份目录
# 创建备份目录
mkdir -pBACKUP_DIR
# 检查目录是否创建成功
if [ ! -d "BACKUP_DIR" ]; then
    echo "Error: Failed to create backup directory" >> "BACKUP_DIR/backup.log"
    exit 1
fi
# 执行备份并使用bzip2压缩
mysqldump -u MYSQL_USER -p"MYSQL_PASSWORD" \
    --all-databases \
    --single-transaction \
    --quick \
    --lock-tables=false \
    | bzip2 > "BACKUP_DIR/backup_DATE.sql.bz2"
# 检查备份是否成功
if [ ? -eq 0 ]; then
    echo "Backup completed successfully at(date)" >> "BACKUP_DIR/backup.log"
else
    echo "Backup failed at(date)" >> "BACKUP_DIR/backup.log"
    exit 1
fi
# 清理旧备份
findBACKUP_DIR -name "backup_*.sql.bz2" -mtime +RETENTION_DAYS -delete
# 将备份文件同步到远程服务器
rsync -av /backup/mysql/ user@remote:/backup/mysql/
# 检查剩余空间
SPACE=(df -h "BACKUP_DIR" | awk 'NR==2 {print4}')
echo "Remaining space: SPACE" >> "BACKUP_DIR/backup.log"
  1. 设置脚本权限
chmod +x /usr/local/bin/mysql_backup.sh
  1. 添加定时任务
# 编辑crontab
crontab -e
# 添加以下内容(每天凌晨3点执行备份)
0 3 * * * /usr/local/bin/mysql_backup.sh
  1. 启用cron服务
systemctl enable --now crond
  1. 查看备份日志
tail -f /backup/mysql/backup.log

暂无介绍....

延伸阅读:

部署deepseek-r1

最近DeepSeek-R1模型很火,我也蹭个热点,本文介绍如何在VPS上使用Ollama部署DeepSeek-R1模型,...

leon
2025年2月23日
MySQL备份与还原

我们的VPS可能会硬盘损坏需要重装OS,或者运营商跑路了,所以需要定时备份数据库,以防不测。备份使用mysqldump导...

leon
2025年2月22日
SSH隧道

这章继续介绍基础知识,前面讲到有的服务在127.0.0.1监听,外网无法访问,我们怎么访问呢,可以用SSH隧道。什么是S...

leon
2025年2月20日
部署第一个网络服务

前面介绍了不少基础知识,今天介绍如何部署一个网站,demo在这里。下面是一些前面介绍过的预备知识:- Caddy介绍- ...

leon
2025年2月19日
域名介绍

什么是域名?这个正常人都知道,就不介绍了。为什么有一个域名是极好的,可以查看前面的文章。如何获取免费域名?1. Free...

leon
2025年2月17日