网站数据库备份和恢复(以MySQL为例)
还未经验证,测试前请先打快照
1. 命令行备份与恢复
备份数据库
# 备份单个数据库
mysqldump -u [用户名] -p[密码] [数据库名称] > backup_$(date +%Y%m%d_%H%M%S).sql
- 解释:
mysqldump
:MySQL提供的命令行工具,用于导出数据库内容为SQL文件。-u [用户名]
:指定连接数据库的用户名,替换为实际用户名。-p[密码]
:指定用户密码,替换为实际密码(运行时会提示输入,避免明文存储)。[数据库名称]
:要备份的数据库名称。>
:将mysqldump输出重定向到文件。backup_$(date +%Y%m%d_%H%M%S).sql
:输出文件名,$(date +%Y%m%d_%H%M%S)
生成时间戳(如20250714_143022),确保文件名唯一,文件以.sql结尾。
# 备份所有数据库
mysqldump -u [用户名] -p[密码] --all-databases > full_backup_$(date +%Y%m%d_%H%M%S).sql
- 解释:
- 与上类似,但添加
--all-databases
选项,备份服务器上所有数据库。 - 输出文件名前缀为
full_backup_
,以区分单数据库备份。
- 与上类似,但添加
# 压缩备份文件
mysqldump -u [用户名] -p[密码] [数据库名称] | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
- 解释:
|
:管道符号,将mysqldump输出传递给下一个命令。gzip
:压缩工具,将SQL文件压缩为.gz格式,减小文件大小。> backup_$(date +%Y%m%d_%H%M%S).sql.gz
:输出压缩后的文件,文件名以.sql.gz结尾。
恢复数据库
# 恢复未压缩的备份
mysql -u [用户名] -p[密码] [数据库名称] < backup.sql
- 解释:
mysql
:MySQL客户端命令,用于执行SQL语句。-u [用户名] -p[密码]
:指定用户名和密码。[数据库名称]
:目标数据库,必须已存在。<
:从指定文件(backup.sql)读取SQL语句并执行,恢复数据库内容。
# 恢复压缩的备份
gunzip < backup.sql.gz | mysql -u [用户名] -p[密码] [数据库名称]
- 解释:
gunzip
:解压.gz文件的工具。< backup.sql.gz
:从压缩文件读取数据。|
:将解压后的SQL内容传递给mysql命令。mysql -u [用户名] -p[密码] [数据库名称]
:执行SQL语句,恢复到指定数据库。
# 创建新数据库并恢复
mysql -u [用户名] -p[密码] -e "CREATE DATABASE 新数据库名称;"
mysql -u [用户名] -p[密码] 新数据库名称 < backup.sql
- 解释:
- 第一行:
mysql -e "CREATE DATABASE 新数据库名称;"
使用-e
执行SQL语句,创建新数据库新数据库名称
(替换为实际名称)。 - 第二行:将备份文件内容恢复到新建的数据库
新数据库名称
。
- 第一行:
2. 客户端工具备份与恢复
请先按照NavicatPremium17的安装和破解教程安装Navicat专业版(NavicatPremium17),否则无法使用备份功能。
NavicatPremium17的安装和破解 · GitBook
Navicat备份数据库和还原数据库
首先我们知道Navicat备份的数据库文件为XX.psc文件,当然也可以备份成XX.sql文件,下面我们以常用的XX.psc文件为例。来详细操作数据库的备份。
备份数据库 1.打开Navicat软件,建立数据库连接。
2.选择数据库,点击新建备份。
3.写入注释,点击开始,创建数据库备份
4.等待备份完成
5.将备份文件复制出来保存。
还原数据库 1.打开Navicat软件,连接你要恢复的数据库服务器 ,建立连接。(如果是同一台服务器直接在原来的连接上操作就行,不用新建)
2.新建数据库
3.输入数据库名称、字符集(可以不写)、排序规则(可以不写),点击确定
4.选择数据库,点击备份、还原备份
直接在备份界面的空白处右键选这个
5.选择备份文件,点击打开(我这边是把备份文件放在了桌面)
6.点击开始,就开始还原备份。还原备份前确认原新建数据库没有需要的文件,不然会被覆盖。
7.还原备份成功,点击关闭。
ps:有时看似还原成功了,但是部分表没有还原成功或者表里面数据不全。可能是数据库版本问题或者其他问题,这时需要针对性去解决。
3. 自动备份脚本
#!/bin/bash
# 文件名: auto_backup.sh
# 数据库配置
DB_USER="数据库用户名"
DB_PASS="数据库密码"
DB_NAME="需要备份数据库名称"
BACKUP_DIR="/backup/mysql"
RETENTION_DAYS=7
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份文件名(包含时间戳)
BACKUP_FILE="$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).sql.gz"
# 执行备份
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_FILE
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "备份成功: $BACKUP_FILE"
else
echo "备份失败!" >&2
exit 1
fi
# 清理旧备份
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +$RETENTION_DAYS -delete
配置Cron定时任务
编辑crontab:
vim /etc/crontab
添加以下行,每天凌晨2点执行备份:
0 2 * * * root /root/shell/auto_backup.sh >> /root/shell/backup.log 2>&1