在网站管理当中,少不了要和数据库打交道,本篇基于wordpress 5.6制作,系统镜像为ubuntu18.04,数据库为mysql 5.7,并且实际步骤都亲身尝试了。网上一堆教程没讲玩完,结果导致网站炸了无数次,下面我们就来学习一下如何批量修改我们的数据表名称(完整步骤)。
以下所有代码步骤基于表前缀wp_改为new_,你的数据表不一定是这样,请根据实际修改。
友情提示:操作数据库容易炸,自己先备份吧。
查看数据表
show tables;
修改一个数据表名
ALTER TABLE 原表名 RENAME TO 新表名;
上面是单句修改的指令,我们只要使用命令批量输出以上的代码,那么就可以实现批量的修改了。
批量替换字符输出
SELECT CONCAT( 'ALTER TABLE ', table_name, ' RENAME TO new_', substring(table_name, 4), ';' ) FROM information_schema. TABLES WHERE table_name LIKE 'wp_%';
以上指令意思为:搜索所有前缀为wp_的数据表,将其前三个字符串替换为new_,然后组合成我们需要的单句修改命令,输出在控制台(此命令只输出,不会修改数据库)。
RENAME TO new_:new_为最终输出的字符;
substring(table_name, 4):替换数据表名称前X个字符长度,自定义。
TABLES WHERE table_name LIKE ‘wp_%:wp_为你要搜索的字符。
检查一下是不是替换成了你需要的命令,确认无误之后再进行下一步。
修改数据表名称
把所有的输出语句复制下来去掉|,然后全选复制粘贴进我们的mysql命令行运行。
接下来我们还要更改对应的字段值,运行以下命令:
SELECT REPLACE(option_name, 'wp_', 'new_') FROM new_options;
SELECT REPLACE(meta_key, 'wp_', 'new_') FROM new_usermeta;
修改wp-config.php
将文件里面$table_prefix=的内容修改为你的新前缀,本文所用例子则为$table_prefix = ‘new_’。
网上大部分教程到这里就结束了,大部分没讲完整,接下来错误排查。请继续关注飞鱼ACG,后续我们将更新更多实用教程。
错误排查
上面步骤没操作好可能会出现你没有足够的权限访问该页面,如果你安装了Redis或者Memcached这类缓存插件,你可能还会出现网站排版全乱或者后台提示你的wordpress数据库已经是最新的了!。(如果你是这一类,自己检查上面步骤,或者你可以尝试继续往下操作)
如果网站前台没问题,后台你可就进不去了,报错大致为抱歉,您不能访问此页面(如果你到了这步,那么恭喜你,你离成功不远了)。
解决步骤
UPDATE `new_usermeta` SET `meta_key` = REPLACE( `meta_key` , 'wp_', 'new_' );
UPDATE `new_options` SET `option_name` = 'new_user_roles' WHERE `option_name` ='wp_user_roles';