15 10 月 2026

换服务器、换数据库版本、数据库从单机迁到 RDS——网站搬家最怕的就是数据库:迁漏了表、字符集乱了、权限丢了,网站打开全是 500。这篇给一份可直接照做的迁移流程:备份、导出、导入、校验、切换,含 WordPress 和 Typecho 实例。

需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,建站和游戏服都能快速部署。

一、迁移前:四件事

  1. 选低峰期:凌晨 2-5 点,用户最少
  2. 算停机窗口:小数据库分钟级,大库按数据量估,超 1 小时考虑增量方案
  3. 全量备份:旧库先 mysqldump 一份,这是你的后悔药,见MySQL 备份与恢复实战
  4. 新库就绪:新机器装好同版本或更高版本的 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 切换

确认新库无误后:

  1. 旧站改维护模式(或暂停写入)
  2. 最后增量同步一次(见 2.6 大库方案)
  3. 新站切域名/上线
  4. 旧库别删,保留一周,随时可回滚

三、大库/低停机方案

数据几十 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 备份与恢复实战、云服务器迁移上云实操、网站迁移完整流程。

延伸阅读
  1. 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
  2. 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
  3. 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
  4. 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
  5. 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
  6. RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
  7. 短链接服务搭建:Shlink 自托管,链接数据自己掌握
  8. 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道
更多阅读
  1. 上一篇:Nginx 伪静态与重写规则实战:rewrite、return、location 全讲清
  2. 下一篇:邮件退信与 SPF、DKIM、DMARC 配置:注册信不再进垃圾箱
发表评论 2