昨天帮一客户迁移 WordPress,本来是很简单的事,但客户新服务器本身运行一个 WordPress,而且数据库只有一个,那么这个迁移过来的 WordPress 用的数据库表需要改『前缀』。
用 WordPress 的朋友都知道 WordPress 默认的数据表前缀是『wp_』:(注:这是默认的数据表,如果安装了其他插件有可能生成其他 wp_ 开头的数据表)
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_terms
wp_term_relationships
wp_term_taxonomy
wp_usermeta
wp_users
第一步:那么第一件事就是把所以表前缀改为其他名,如改为 ooxx_(推荐用 phpmyadmin 或者 Adminer 修改)
ooxx_commentmeta
ooxx_comments
ooxx_links
ooxx_options
ooxx_postmeta
ooxx_posts
ooxx_terms
ooxx_term_relationships
ooxx_term_taxonomy
ooxx_usermeta
ooxx_users
第二步:修改 wp-config.php
找到 $table_prefix = 'wp_'; 改为 $table_prefix = 'ooxx_';
这样就行了?本来以为是,因为访问博客一切正常,不过当你登录后台时,即使你是 Administrator 身份等待你的是下面这一行字:
You do not have sufficient permissions to access this page.
囧,看来还有第三步……
第三步:修改表里面 wp_ 开头的字段
1. ooxx_options:里面有个 wp_user_roles 改为 ooxx_user_roles
2. ooxx_usermeta:把里面的 wp_capabilities, wp_user_level, wp_user-settings, wp_user-settings-time, and wp_dashboard_quick_press_last_post_id 字段名的 wp_ 全部改为 ooxx_
3. 另外确保 ooxx_usermeta 表里面的 ooxx_capabilities 和 ooxx_user_level 的值如下
ooxx_capabilities should be a:1:{s:13:"administrator";s:1:"1";}
ooxx_user_level should be 10
总结:
折腾后得出简单的方法,适合数据库不大的情况下:导出原来的数据库(不压缩 SQL 格式),用文本编辑器打开此导出文件,搜索替换『wp_』为『新前缀_』,导入新服务器数据库。(当然,为了准确性,不能简单地“全部替换”,最好一个一个搜索替换,免得出错)

- 本文标题:WordPress: 数据库换前缀导致的问题和解决
- 本文链接:https://zww.me/wordpress-database-change-the-prefix-cause-problems-and-solutions.z-turn
- 发布时间:2014年09月03日 11:21
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
最后总结的方法不错
总结的方法一直在用,神技啊!
学习了
木木也写了篇
这个是一个经验,先收藏哈,以后用得着。
全文替换大法好!~
@林木木
这个要判断一下吧
最后总结那个比较简单,但是wp替换的地方多么?呵呵
@郑永
要自己判断一下,不然也会替换错,毕竟只是 wp_ 开头
什么客户?
@毕扬
找我做事然后会付款给我的就是客户,不管是国内还是国外
经常出来数据库连接错误?
@小怪物
你说的是哪里?
@zwwooooo
我那天评论的时候你这出现了2次提示数据库连接错误,就是博客空白只有真一据提示,后来没遇到了
@小怪物
嗯,服务器问题
学习了,如果有遇到这种情况就不怕了。
看似简单,实则不易。
你这个表前缀,让你的客户情何以堪--|||
@kilobps
这只是举例而已
这么丧病的需求...
我也换过 少了第三部 登陆后会提示没权限
最后一种方法也试过 换了之后直接挂了 很多wp_不只是影响到前缀
@记忆碎片
嗯,还是要自己坐下替换判断
直接在phpmyadmin可以利用sql来改...免去下载本地麻烦,而且可以用在大数据库,最好锁表
@kn007
这里说的是换服务器,而且要同一个数据库。修改一般是 phpmyadmin 方便
初始时要定好,省得麻烦
@Andrew
这个是初始没想到的,很多事情已如此
update `new_usermeta` set `meta_key`= replace(`meta_key`,'old_','new_') WHERE `meta_key` like "%old_%";
我也遇到过,sql替换下就好了,old前缀,new前缀。。。