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.
?澹?蠢椿褂械谌?健??br/>
第三步:修改表里面 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 安全正确更改数据库表前缀
之前用了默认的数据库前缀做网站,等网站做好了,出于安全角度考虑的时候,就不想要使用默认的数据库前缀,所以就想要更改数据库表的前缀。
替换 WordPress 默认数据库前缀的办法有很多。但在这里我认为比较好的,可以让你完美地替换掉 WordPress 的数据库前缀。
更改 WordPress 数据库表名前缀步骤:(wordpress版本3.0.1)
以下更改数据库前缀教程只需要在phpmyadmin运行十几个sql命令即可。
首先做的就是更改十个表的前缀,这个简单,命令如下:
ALTER TABLE wp_commentmeta RENAME TO xzy_commentmeta;
ALTER TABLE wp_comments RENAME TO xzy_comments;
ALTER TABLE wp_options RENAME TO xzy_options;
ALTER TABLE wp_posts RENAME TO xzy_posts;
ALTER TABLE wp_postmeta RENAME TO xzy_postmeta;
ALTER TABLE wp_users RENAME TO xzy_users;
ALTER TABLE wp_usermeta RENAME TO xzy_usermeta;
ALTER TABLE wp_links RENAME TO xzy_links;
ALTER TABLE wp_terms RENAME TO xzy_terms;
ALTER TABLE wp_term_taxonomy RENAME TO xzy_term_taxonomy;
ALTER TABLE wp_term_relationships RENAME TO xzy_term_relationships;
上面的命令就是将默认的前缀wp更改为xzy_,如果你想更改成其他的前缀了,只需要把xzy_替换为你喜欢的就可以了。
然后需要在wp-config.php中找到
$table_prefix = 'wp_';
将它替换为
$table_prefix = 'xzy_';
本以为这样就完成了,但是后台发现登陆不上去了,于是再次查看数据库,发现options表中有项wp_user_roles,还有 usermeta有以下五项也需要修改:
wp_capabilities
wp_user_level
wp_user-settings
wp_user-settings-time
wp_dashboard_quick_press_last_post_id
这四项中autosave_draft_ids是日志自动保存,user_roles和user_level是权限方面的,那个 capabilities搞不懂是什么,但直觉告诉我也需要修改,所以继续在sql下运行以下命令:
update xzy_options set option_name = replace(option_name,'wp_user_roles','xzy_user_roles');
update xzy_usermeta set meta_key = replace(meta_key,'wp_capabilities','xzy_capabilities');
update xzy_usermeta set meta_key = replace(meta_key,'wp_user_level','xzy_user_level');
update xzy_usermeta set meta_key = replace(meta_key,'wp_capabilities','xzy_user-settings');
update xzy_usermeta set meta_key = replace(meta_key,'wp_user_level','xzy_user-settings-time');
update xzy_usermeta set meta_key = replace(meta_key,'wp_user_level','xzy_dashboard_quick_press_last_post_id');
这样,我们的目的也达到了,我可以保证,使用此方法可以100%保证对数据库没什么伤害,尽量不要使用编辑器等工具直接替换wp_,因为有些数据库中插件名,绝对地址,文章中都可能存在wp_这个关键词。
现在我的网站已经成功将wp_改为了xzy_,一切都正常,插件也可以不需要关闭!
解决WordPress修改数据库表前缀后无法登陆的问题
重装Wordpress后发现没有任何内容,解决时,发现他的数据库居然有3种前缀,看来是多次安装的时没填的前缀不一致造成的。
于是,整理数据库:
点击查看大小,找到有数据的的表前缀,发现前缀居然是数据库名,很长很长。。。太难看了!这对于我这种强迫症患者是无法容忍的。。。我先将其他2个前缀的所有空表全部删除,只留下那个前缀很长的表,然后全选使用下方的修改表前缀功能,全部给改了。
重新安装WP后,发现原来的那个用户名登陆不了了,提示权限不足,度了一把,找到了解决办法,这就来记录下!
网上找到的方法如下:
默认的表前缀为wp_,如果你修改了wp_config.php中的表前缀,也就是$table_prefix=后面的内容,则您需要同步修改数据库中的表前缀,修改完成后,如果登录wordpress后台成功后,会返回“您没有足够的权限访问这个页面。”的提示,那也就是说您还没有完成修改,Wordpress的代码设计严密,没有那么简单让你完成。
解决办法:打开 *_options表,找到optionname字段值为*_user_roles的栏位,改为与你修改后的前缀(*表示实际前缀)。
然后打开 *_usermeta 表,将meta-key字段中有旧前缀的值,更为新的前缀就OK。
不知道为啥,发现在他的这个表搜索后,发现有好几千条数据!看来手动是行不通了,只好使用SQL语句进行局部替换了,SQL语句如下,在phpMyAdmin中选定数据库后,点击工具条中的SQL执行如下语句:
update `new_usermeta` set `meta_key`= replace(`meta_key`,'old_','new_') WHERE `meta_key` like "%old_%";
1
update `new_usermeta` set `meta_key`= replace(`meta_key`,'old_','new_') WHERE `meta_key` like "%old_%";
以上仅为示例,实际得根据新旧表前缀进行修改:
其中,new_表示修改后的新的前缀,old是修改前的前缀,按照实际修改后,执行即可!
实际以上SQL代码也就是MySql的部分替换语句,不会的一起来学习下:
比如,将the_table 表 the_subject字段中的Welcom to替换成 欢迎光临:
update `the_table` set `the_subject` = replace(`the_subject`, 'Welcome to', '欢迎光临') where instr(`the_subject`,'Welcome to') > 0