换服务器、换数据库版本、数据库从单机迁到 RDS——网站搬家最怕的就是数据库:迁漏了表、字符集乱了、权限丢了,网站打开全是 500。这篇给一份可直接照做的迁移流程:备份、导出、导入、校验、切换,含 WordPress 和 Typecho 实例。
需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,建站和游戏服都能快速部署。
一、迁移前:四件事
- 选低峰期:凌晨 2-5 点,用户最少
- 算停机窗口:小数据库分钟级,大库按数据量估,超 1 小时考虑增量方案
- 全量备份:旧库先
mysqldump一份,这是你的后悔药,见MySQL 备份与恢复实战 - 新库就绪:新机器装好同版本或更高版本的 MySQL/MariaDB
版本方向:同版本最稳;旧 → 新(如 5.7 → 8.0)要测兼容;新 → 旧基本不可行,别试。
二、标准迁移流程(五步)
2.1 旧库导出
# 全库导出:结构+数据+触发器+存储过程+事件
mysqldump -u root -p \
--single-transaction \ # InnoDB 热备,不锁表
--routines \ # 存储过程和函数
--triggers \ # 触发器
--events \ # 定时事件
--default-character-set=utf8mb4 \
--hex-blob \ # 二进制数据安全导出
数据库名 > site_$(date +%F).sql
# 看大小
ls -lh site_*.sql--single-transaction 是关键:导的时候网站还能正常读写。别用 --lock-all-tables,那会锁表,网站当场卡死。
2.2 传到新库
scp site_2026-10-15.sql root@新服务器IP:/tmp/
# 大文件用压缩:gzip -9 site_*.sql,传完解压2.3 新库导入
# 新服务器上:先建库建用户(字符集必须 utf8mb4)
mysql -u root -p -e "
CREATE DATABASE site CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'site'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON site.* TO 'site'@'localhost';
FLUSH PRIVILEGES;"
# 导入
mysql -u root -p --default-character-set=utf8mb4 site < /tmp/site_2026-10-15.sql字符集是迁移第一坑:旧库是 utf8(真名 utf8mb3)、新库 utf8mb4,emoji 和生僻字会变问号。导出导入都显式带 --default-character-set=utf8mb4,导入后抽查含 emoji 的字段。
2.4 校验
# 表数量对比
mysql -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='site';"
# 数据量抽查(挑几张核心表)
mysql -e "SELECT COUNT(*) FROM site.wp_posts;"
# checksum 全库比对(慢但权威,库不大时用)
mysql -e "CHECKSUM TABLE site.wp_posts, site.wp_options;"新库先让网站连上跑一遍(修改配置文件指向新库),前台浏览几页、后台登录、发个评论——比任何校验都直观。
2.5 切换
确认新库无误后:
- 旧站改维护模式(或暂停写入)
- 最后增量同步一次(见 2.6 大库方案)
- 新站切域名/上线
- 旧库别删,保留一周,随时可回滚
三、大库/低停机方案
数据几十 G、停机窗口只有几分钟——用主从复制过渡:
-- 新库配置为旧库的从库
CHANGE MASTER TO
MASTER_HOST='旧库IP',
MASTER_USER='repl',
MASTER_PASSWORD='复制密码',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=1234;
START SLAVE;
SHOW SLAVE STATUS\G # 看 Seconds_Behind_Master 追平追平后:旧站停写 → 等从库同步到 0 → 新库提主 → 应用切连接。停机秒级。主从完整搭建见MySQL 主从复制配置实战。
四、程序实操:WordPress 与 Typecho
WordPress
# 数据库迁移后,还要改 wp_options 里的站点地址(换域名时)
mysql -e "UPDATE site.wp_options SET option_value='https://新域名' WHERE option_name IN ('siteurl','home');"
# 文章里的旧域名批量替换(序列化数据别乱搜替换,用 WP-CLI 安全)
wp search-replace '旧域名' '新域名' --skip-columns=guid整站搬家(文件+数据库)见网站迁移完整流程。
Typecho
Typecho 配置在文件里,不用改数据库:
// config.inc.php 改数据库连接
$db = new Typecho_Db('Pdo_Mysql', 'site_');
$db->addServer(array(
'host' => 'localhost',
'user' => 'site',
'password' => '新密码',
'database' => 'site',
'charset' => 'utf8mb4',
), ...);导入 SQL 即可,附件在 usr/uploads 一起 scp 过去。
五、权限与连接问题排查
| 报错 | 原因 | 解法 |
|---|---|---|
Access denied for user | 新库用户没建/密码错 | 重建用户授权 |
Unknown database | 库名拼错/没建 | SHOW DATABASES; 核对 |
Table doesn't exist | 只导了部分表 | 重新全库导出导入 |
| 内容乱码 | 字符集不一致 | 全链路 utf8mb4,重导 |
| 网站 500 | 连接配置没改 | 检查 config 里的 host/user/db |
| 插件报错 | 表结构缺列 | 插件触发的表单独补导 |
连接安全规范见数据库安全加固与权限最小化。
六、回滚预案
迁移不是单行道,出事了能退回去才算准备充分:
# 回滚步骤(提前写好贴在手边):
# 1. 域名解析指回旧服务器(改 DNS,TTL 提前调小到 300 秒加速生效)
# 2. 或应用连接指回旧库
# 3. 旧库恢复写入
# 4. 观察 24 小时无异常,再清理DNS TTL 提前一天调到 300 秒,切换分钟级生效,回滚也是。解析记录改法见域名解析与 DNS 记录详解。
数据库迁移就五步:备份 → 导出 → 导入 → 校验 → 切换,外加一条随时能回滚的预案。慢一点、验一遍,比迁完发现丢数据再救要轻松一百倍。
需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,建站快速部署。延伸阅读:MySQL 备份与恢复实战、云服务器迁移上云实操、网站迁移完整流程。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]└→ SQLite 起步,出现下面三个信号再迁三、三个真实场景的答案场景一:Typecho/WordPress 个人博客答案:SQLite。Typecho 原生支持 SQLite,选它连数据库服务都不用装:内存省 400M+备份 = 打包一个 .db 文件(备份方案现成)日 IP 几千以内的博客,SQLite 性能毫无压力想换机器?文件拷走即迁移教程见用云服务器搭建 Typecho 博客,SQLi[...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复