
数据库是大多数网站的核心——WordPress、WooCommerce、自定义会员系统。如果数据库在没有备份的情况下丢失或损坏,后果可能是灾难性的。本指南将带您了解如何在共享虚拟主机上使用phpMyAdmin和DirectAdmin备份工具备份和恢复MySQL,无需任何命令行操作。
黄金法则:在做任何重大更改之前始终进行备份——插件更新、架构修改、PHP版本变更或网站迁移。将备份文件存放在主机账户之外的地方。
1. 为什么要备份数据库?
可能损坏或销毁数据库的常见场景:
- 与数据库架构冲突或修改的WordPress插件更新
- 意外SQL查询,如不带WHERE子句的
DELETE FROM users - 删除或加密数据的恶意软件攻击
- 带有损坏导出/导入操作的主机迁移失败
- 磁盘满导致数据库损坏
AsiaGB每月自动备份两次(1日和15日),但这些不能替代您自己的备份。如果数据在10日丢失,您只能恢复到1日的快照——之间的所有内容都消失了。
2. 使用phpMyAdmin导出数据库
phpMyAdmin是50MB以内数据库最方便的方法。
导出步骤
- 登录到DirectAdmin → 进入MySQL管理 → 点击phpMyAdmin。
- 从左侧边栏选择数据库。
- 点击顶部的导出标签。
- 选择方式:自定义以获得更多控制。
- 确认所有表都已选中。
- 格式:SQL。
- 在对象创建选项下,勾选添加DROP TABLE——这可以防止在现有数据库上恢复时出错。
- 点击导出——.sql文件将下载到您的电脑。
您应该了解的格式和选项
当您将方式设置为自定义时,phpMyAdmin会显示直接影响备份完整性和可恢复性的选项。了解它们可以帮助您一次成功恢复而不会中途出错:
- 格式 = SQL — 这是可以直接恢复到MySQL的标准格式。CSV或JSON用于将数据移至其他地方,不用于恢复整个数据库。
- 添加DROP TABLE / VIEW / PROCEDURE / EVENT — 在重新创建之前删除现有表,防止在已有数据的数据库上导入时出现
表已存在错误。 - 添加CREATE DATABASE / USE语句 — 如果勾选,文件将重新创建数据库本身。在共享主机上,我们建议不勾选,因为DirectAdmin数据库名称通常带有用户名前缀(如
user_dbname),所以文件中的名称可能与您创建的名称不匹配。 - 添加IF NOT EXISTS — 当对象已存在时防止语句出错,在合并数据时很有用。
- 文件字符集 = utf8mb4 — 对于泰语网站和任何使用表情符号的网站至关重要。始终选择utf8mb4,以防恢复时多字节字符变为问号。
- 创建查询的最大长度 — 大多数情况下默认值即可;保持不变。
提示:如果phpMyAdmin警告文件很大,请在压缩选项下勾选"gzipped"——.sql.gz文件小70-80%,下载更快,存储更轻便。
大型数据库:如果数据库超过50MB,phpMyAdmin可能会超时。请使用DirectAdmin备份工具(见下一节),或联系支持团队进行命令行备份。
3. 使用DirectAdmin备份工具备份
DirectAdmin内置的备份工具支持大型数据库,可以一次性创建完整备份(文件+数据库)。
步骤
- 登录到DirectAdmin。
- 进入高级功能 → 创建/恢复备份。
- 选择MySQL数据库(以及Home Directory进行完整备份)。
- 点击创建备份。
- 等待完成——备份文件出现在您的home目录中。
- 通过文件管理器或FTP下载它。
⚠️ 不要将备份仅保留在您的主机账户上。如果主机服务器发生严重故障,存储在同一服务器上的备份文件也会丢失。始终将副本下载到本地电脑或云存储。
4. 使用phpMyAdmin恢复数据库
从之前导出的.sql文件恢复数据库:
创建新数据库(如需)
如果原始数据库已删除,请先在DirectAdmin → MySQL管理 → 创建数据库中创建新数据库。记录用户名和密码。
通过phpMyAdmin导入
- 打开phpMyAdmin → 选择目标数据库。
- 点击导入标签。
- 点击选择文件 → 选择您的.sql文件(必须小于50MB)。
- 格式:SQL(已默认选中)。
- 点击导入并等待完成。
文件大于50MB:phpMyAdmin的默认上传限制为50MB。对于更大的文件,请联系支持或使用BigDump或MySQLDumper等工具拆分.sql文件并分批导入。
5. 处理超过限制的大型备份文件
数据密集型网站——拥有数千订单的WooCommerce商店或长期运营的论坛——可能远超50MB,此时phpMyAdmin导入会失败。以下是处理方法,从最简单到最高级:
方法1 — 使用gzip导出/导入
压缩为.sql.gz可将文件大小减少70-80%,通常能将超过限制的文件带回可上传范围。phpMyAdmin可以直接导入.gz文件,无需先解压:
- 导出时,将压缩设置为gzipped以生成
database.sql.gz。 - 恢复时,打开导入标签并选择
.sql.gz文件——phpMyAdmin会自动解压。
方法2 — 使用BigDump拆分文件
如果文件压缩后仍然太大无法上传到phpMyAdmin,请使用BigDump脚本,它以块的方式读取.sql文件并作为小批次运行以避免超时:
- 通过文件管理器或FTP将
.sql文件和bigdump.php上传到同一文件夹。 - 在bigdump.php中编辑
$db_server、$db_name、$db_username和$db_password以匹配您的数据库。 - 在浏览器中打开bigdump.php的URL,点击开始导入——脚本将持续分批运行。
- 完成后,立即删除bigdump.php和.sql文件以确保安全;永远不要将它们留在公开目录中。
方法3 — 命令行mysqldump(如果您的主机允许)
如果您的主机方案包含SSH访问,从命令行使用mysqldump是处理大型数据库最快且最可靠的方法,因为它不受Web服务器限制的约束:
# Backup — export the whole database and gzip it in one command
mysqldump -u USERNAME -p --default-character-set=utf8mb4 DBNAME | gzip > backup_20260607.sql.gz
# Restore — decompress and import back
gunzip < backup_20260607.sql.gz | mysql -u USERNAME -p DBNAME
# Back up only specific tables
mysqldump -u USERNAME -p DBNAME wp_posts wp_options > partial.sql
注意:AsiaGB标准主机方案在DirectAdmin + phpMyAdmin上运行。如果您的方案不包含SSH/shell访问,请使用DirectAdmin备份工具,或提交工单,我们的团队将为您运行命令行备份——客户无需额外费用。
6. 自动备份和重要注意事项
每周手动备份很容易忘记。更可持续的方法是自动化备份,并注意可能使备份无法恢复的陷阱:
使用Cron作业安排自动备份
如果您的主机在DirectAdmin中提供Cron作业菜单,您可以安排mysqldump自动运行。以下是每天凌晨2点备份并按日期命名文件的cron条目:
# Runs daily at 02:00 — set in DirectAdmin → Cron Jobs
0 2 * * * mysqldump -u USERNAME -pPASSWORD --default-character-set=utf8mb4 DBNAME | gzip > ~/backups/db_$(date +\%Y\%m\%d).sql.gz
对于WordPress,还有更简单的方法:UpdraftPlus或WP-DBManager等插件可以安排备份并自动将文件发送到Google Drive或Dropbox,减少将备份保存在同一服务器上的风险。
注意:utf8mb4字符集
这是泰语或表情符号字符在恢复后变成???或乱码的首要原因。确保导出时的字符集、.sql文件和目标数据库都是utf8mb4。如果您以latin1导出并导入到utf8mb4,字符可能被永久损坏且很难恢复——所以从导出步骤开始选择utf8mb4。
注意:外键和表顺序
具有外键约束的数据库(例如引用customers的orders表)如果orders在customers存在之前导入,可能会恢复失败,触发无法添加或更新子行。处理方法:
- 使用来自phpMyAdmin/mysqldump的备份文件,它会排列表的顺序并在顶部添加
SET FOREIGN_KEY_CHECKS=0;——标准工具会为您处理这些。 - 如果仍然出错,在.sql文件开头手动添加
SET FOREIGN_KEY_CHECKS=0;,在结尾添加SET FOREIGN_KEY_CHECKS=1;。 - 匹配引擎(InnoDB vs MyISAM)——外键仅适用于InnoDB。
⚠️ 始终测试您的恢复:从未恢复过的备份是您无法信任的备份。每月至少尝试将备份文件导入测试数据库(例如创建名为user_test的数据库)一次,以确认文件在紧急情况下确实能恢复。
7. AsiaGB自动备份政策
| 项目 | 详情 |
|---|---|
| 频率 | 每月两次(每月1日和15日) |
| 保留期 | 1年 |
| 覆盖范围 | 所有文件 + MySQL数据库 |
| 如何恢复 | 提交支持工单,说明所需的备份日期 |
| 费用 | AsiaGB所有客户免费 |
8. 最佳实践
- 每次重大更改前备份 — 插件更新、架构变更、迁移。
- 将备份存储在多个位置 — 本地电脑加上Google Drive或Dropbox。
- 在文件名中包含日期 — 例如
mysite_db_20260512.sql。 - 测试您的恢复 — 从未测试过的备份是您无法信任的备份。
- 压缩文件 — .sql.gz文件通常小70-80%。
- 安排提醒 — 低流量网站每月,积极更新的网站每周。
常见问题
我应该多久备份一次数据库?
这取决于您的数据更改频率。每天接受订单的新闻网站或网上商店应该每天备份,或至少每周备份。很少更新的企业网站每月备份就够了。指导性问题是:'如果我的数据回滚到上次备份点,我能接受中间发生的事情丢失吗?'如果不能,就更频繁地备份。
为什么泰语字符在恢复后变成问号?
这发生在备份文件的字符集与目标数据库不匹配时。通过在导出时选择utf8mb4作为字符集,并将目标数据库也创建为utf8mb4来防止这种情况。一旦数据损坏就很难恢复,所以在出问题之前就以正确的字符集备份。
AsiaGB已经在备份——我还需要自己备份吗?
是的。AsiaGB的自动备份每月快照两次(1日和15日)。如果数据在中间丢失,您只能恢复到最近的快照,之后创建的任何内容都消失了。在重大更改前自己备份可以填补这个空缺。
在现有数据库上恢复数据库危险吗?
导入包含DROP TABLE的文件会立即删除当前数据并用备份数据替换它。所以在恢复之前始终备份当前数据——这样,如果您正在恢复的备份出现问题,您可以回到原来的状态。