WordPress 与Halo的爱恨情仇:无缝迁移全攻略
前言
各位程序员朋友们好,我是Halo。今天咱们来聊聊 WordPress 这个全球最流行的 CMS 系统在我们数据库上的那些事儿。最近接了个活儿,要求适配 WordPress ,过程中踩了不少坑,也积累了一些经验。咱们不整那些虚的,直接上干货。
此时尝试登录后报错了,我跟踪到原因,几张核心的表的ID字段是大写的,这个问题好解决,我把相应字段做个映射就行。
Halo说
:这问题不是 Halo 的锅,是 WordPress 和 MySQL 历史包袱太重,我们能帮你绕过这个坑,但真正解决得靠规范设计。
查看下站点
文章、页面、评论等功能能使用,很平滑
到这,基本的功能都行了,我们来点不一样的,下面是从MySQL迁移到Halo上看看能不能跑。
2.验证数据量
大小写字段
电商插件WooCommerce也没问题
第一部分:WordPress 初始化到Halo
1.1 数据库配置
Halo说 :选哪个?别问我,问你的领导和预算!但建议先挑兼容 MySQL 协议的那些,毕竟 WordPress 原生是为 MySQL 设计的,比如我们就兼容了MySQL协议,无需更改程序代码,拿上就能用。--更改配置文件vim postgresql.conf...mysql.default_tenant = 'halo0root'cluster_net_services = ':3307:mysql' #format 'IP:port:mode'...-- 建立用户psql -p 5432CREATE EXTENSION aux_mysql CASCADE;SET password_encryption=mysql_native_password;CREATE USER test password 'test';GRANT ALL PRIVILEGES ON DATABASE halo0root TO test;SHOW mysql.default_tenant ;SHOW cluster_net_services ;mysql -P 3306 -h <Server IP> -utest -p--建立数据库create database wordpress;

1.2 WordPress 配置调整
关键点在 wp-config.php 文件:// 修改配置define( 'DB_NAME', 'wordpress' );define( 'DB_USER', 'test' );define( 'DB_PASSWORD', 'test' );define( 'DB_HOST', 'IP:3307' );define( 'DB_CHARSET', 'utf8' );define('DB_COLLATE', 'utf8mb4_general_ci');// 表名前缀$table_prefix = 'wp_';
1.3 安装过程观察
安装过程中盯紧几个地方:
Halo经验 : 如果卡在"建立数据库连接"这一步,99%是权限问题或网络问题。 打开 http : //IP/wp-admin/install.php 初始化wordpress数据库数据库连接日志表创建语句执行情况初始数据插入是否成功
更新系统表--例如这个语句 用到大写IDSELECT wp_posts.IDFROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)WHERE 1=1 AND (wp_term_relationships.term_taxonomy_id IN (2)) AND wp_posts.post_type = 'wp_global_styles' AND ((wp_posts.post_status = 'publish'))GROUP BY wp_posts.IDORDER BY wp_posts.post_date DESCLIMIT 0, 1
再次尝试登录,进入到后台了:psql -p 5432INSERT INTO mys_informa_schema.schema_table_columns values('wordpress', 'wp_users', 'ID');INSERT INTO mys_informa_schema.schema_table_columns values('wordpress', 'wp_posts', 'ID');INSERT INTO mys_informa_schema.schema_table_columns values('wordpress', 'wp_comments', 'comment_ID');INSERT INTO mys_informa_schema.schema_table_columns values('wordpress', 'wp_comments', 'comment_post_ID');INSERT INTO mys_informa_schema.schema_table_columns values('wordpress', 'wp_comments', 'comment_author_IP');
1.4 数据完整性检查
安装完后,先别急着高兴,跑几个检查:-- 检查核心表是否存在mysql> SELECT COUNT(*) FROM wp_posts;+-------+| count |+-------+| 4 |+-------+1 row in set (0.00 sec)mysql> SELECT COUNT(*) FROM wp_options;+-------+| count |+-------+| 132 |+-------+1 row in set (0.00 sec)mysql> SELECT COUNT(*) FROM wp_users;+-------+| count |+-------+| 1 |+-------+1 row in set (0.00 sec)-- HALO提醒:wp_posts 表至少应该有 Hello World 文章
1.5 功能性检查
站点展示
添加若干文章
查看下站点
文章、页面、评论等功能能使用,很平滑
第二部分:MySQL 到Halo 迁移实战
2.1 迁移前的准备工作
Halo忠告 : 迁移前先备份!先备份!先备份!重要的事情说三遍。# MySQL 备份示例mysqldump -P 3306 -h 127.0.0.1 -u user1 -p wordpress > wordpress_backup.sql
2.2 数据迁移工具选择
几个靠谱的迁移方案:Halo说 :别想着自己写迁移脚本,除非你想加班到天亮。我这次老土点,用SQL导入。数据库厂商提供的迁移工具(首选)使用第三方工具如 DataX老土但有效的 SQL 导出导入
2.3 迁移步骤详解
1.直接导入:
mysql -P 3307 -h 127.0.0.1 -u test -p wordpress_re <wordpress_backup.sqlmysql -P 3307 -h 127.0.0.1 -utest -p
3.特殊处理 :mysql> select count(*) from wp_posts;+-------+| count |+-------+| 5 |+-------+1 row in set (0.00 sec)mysql> SELECT COUNT(*) FROM wp_options;+-------+| count |+-------+| 140 |+-------+1 row in set (0.00 sec)mysql> SELECT COUNT(*) FROM wp_users;+-------+| count |+-------+| 1 |+-------+1 row in set (0.00 sec)
大小写字段
psql -p 5432INSERT INTO mys_informa_schema.schema_table_columns values('wordpress_re', 'wp_users', 'ID');INSERT INTO mys_informa_schema.schema_table_columns values('wordpress_re', 'wp_posts', 'ID');INSERT INTO mys_informa_schema.schema_table_columns values('wordpress_re', 'wp_comments', 'comment_ID');INSERT INTO mys_informa_schema.schema_table_columns values('wordpress_re', 'wp_comments', 'comment_post_ID');INSERT INTO mys_informa_schema.schema_table_columns values('wordpress_re', 'wp_comments', 'comment_author_IP');
2.4 迁移后验证
核心检查点 :1.用户能否登录2.文章能否正常显示3.插件是否正常工作4.后台操作是否流畅
电商插件WooCommerce也没问题
第三部分:常见坑与解决方案
- 字符集问题 :
- 症状:文章显示乱码
- 解法:统一使用 utf8mb4
- 自增ID冲突 :
- 症状:插入数据报主键冲突
- 解法:Halo在迁移之后,自增id自行设置。
- 特定SQL语法不兼容 :
- 症状:插件报SQL错误
- 解法:Halo做适配,凭借我们现在的版本,还没遇到这个特定语法的SQL不兼容的问题,。
结语
无缝迁移成功,功能都跑通,介于市场上的插件种类繁多,每个插件开发者的开发习惯不同,对数据库的操作也是有差别的,我们这测主流的插件没问题,做技术适配就像做翻译,不仅要准确传递信息,还要考虑说话的习惯和语境。我们不敢说已经做到完美,但我们承诺会持续改进,让Halo在WordPress环境下运行得越来越顺畅。 邀请大家一起完善 我们深知,WordPress的生态庞大而复杂,单靠我们的测试难免会有遗漏。如果你在使用过程中遇到:- 任何数据库相关的兼容性问题
- 查询性能问题
-
或其他奇怪的bug
感谢每一位愿意给我们反馈的用户,你们的声音是我们进步的最大动力。第一时间分析问题如果是共性问题,会尽快推出通用解决方案如果是特殊情况,也会帮你找到临时应对方案