Rexdf

The devil is in the Details.

WordPress数据库改名

| Comments

今天突然想把默认的那个wp_数据库表前缀改一下,按照网上的方案一般就是直接在原始数据库上面改。但是考虑到可能改坏数据库,因为我不希望这么做。当然改数据库表名可以使用phpMyAdmin或者使用”alter table 表名 rename to 新表名” 都是可以的,但是改完之后还需要修改几个值,我特地装了一个新的Wordpress来重新做了一个表来验证,下面语句应该是对的(假设想改成blog_):

UPDATE blog_usermeta SET meta_key ='blog_capabilities' WHERE meta_key ='wp_capabilities';
UPDATE blog_usermeta SET meta_key ='blog_user_level' WHERE meta_key ='wp_user_level';
UPDATE blog_options SET option_name='blog_user_roles' WHERE option_name='wp_user_roles'; 

然后我记起以前在做一个SQL Server的时候用的方法,导出成为SQL脚本然后修改脚本,然后修改脚本,但是此法我暂时还没有调试成功,问题较多,主要是编码问题;因为我不需要更换数据库位置,所以突然明白只需要复制表就好了,数据库空间我基本没怎么用,于是最终采用了第二种方法。

1.SQL脚本修改法

通过phpMyAdmin导出wp_的表,二进制一定要选择十六进制格式,由于Wordpress Statistics插件的wp_statistics_visitor较大有4.5M,而且每分每秒都在增加行,开始一起导出所有wp_开头的数据库,使用wp_的通配符替换文本之后,无法执行,有12M+的大小。 然后把wp_statistics_visitor单独导出,wp_posts也单独导出了,然后余下的一起导出,分成三个文件。这时我也意思到存在一个问题,就是我曾经研究过Wordpress的数据库结构然后发过文章,所以wp_posts替换一定要使用严格的模式,比如替换 INSERT INTO wp_posts VALUES,而不是简单地替换wp_甚至wp_posts,当然这个的前提是我文章中没有这个语句,不然就得使用正则表达式替换行首了。 花了大约半个钟头把全部的前缀替换好了,包括那个需要改值的都一起替换了,实际上还是不止上面的三条,我发现的有六处(欢迎大家补充):

UPDATE blog_usermeta SET meta_key ='blog_user-settings' WHERE meta_key ='wp_user-settings';
UPDATE blog_usermeta SET meta_key ='blog_user-settings-time' WHERE meta_key ='wp_user-settings-time';
UPDATE blog_usermeta SET meta_key ='blog_dashboard_quick_press_last_post_id' WHERE meta_key ='wp_dashboard_quick_press_last_post_id';
UPDATE blog_usermeta SET meta_key ='blog_user_level' WHERE meta_key ='wp_user_level';
UPDATE blog_usermeta SET meta_key ='blog_capabilities' WHERE meta_key ='wp_capabilities';
UPDATE blog_options SET option_name='blog_user_roles' WHERE option_name='wp_user_roles';

2.数据库复制法

这个方法优化了前面提到的各个问题直接写成了一个脚本,执行之后把wp_config.php中的$table_prefix改成blog即可了。

CREATE TABLE `blog_posts` (
  `ID` bigint(20) unsigned NOT NULL auto_increment,
  `post_author` bigint(20) unsigned NOT NULL default '0',
  `post_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `post_date_gmt` datetime NOT NULL default '0000-00-00 00:00:00',
  `post_content` longtext NOT NULL,
  `post_title` text NOT NULL,
  `post_excerpt` text NOT NULL,
  `post_status` varchar(20) NOT NULL default 'publish',
  `comment_status` varchar(20) NOT NULL default 'open',
  `ping_status` varchar(20) NOT NULL default 'open',
  `post_password` varchar(20) NOT NULL default '',
  `post_name` varchar(200) NOT NULL default '',
  `to_ping` text NOT NULL,
  `pinged` text NOT NULL,
  `post_modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `post_modified_gmt` datetime NOT NULL default '0000-00-00 00:00:00',
  `post_content_filtered` longtext NOT NULL,
  `post_parent` bigint(20) unsigned NOT NULL default '0',
  `guid` varchar(255) NOT NULL default '',
  `menu_order` int(11) NOT NULL default '0',
  `post_type` varchar(20) NOT NULL default 'post',
  `post_mime_type` varchar(100) NOT NULL default '',
  `comment_count` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`ID`),
  KEY `post_name` (`post_name`),
  KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
  KEY `post_parent` (`post_parent`),
  KEY `post_author` (`post_author`)
) ENGINE=MyISAM AUTO_INCREMENT=1828 DEFAULT CHARSET=utf8 AUTO_INCREMENT=1828 ;

insert into blog_posts select * from wp_posts;

CREATE TABLE `blog_commentmeta` (
  `meta_id` bigint(20) unsigned NOT NULL auto_increment,
  `comment_id` bigint(20) unsigned NOT NULL default '0',
  `meta_key` varchar(255) default NULL,
  `meta_value` longtext,
  PRIMARY KEY  (`meta_id`),
  KEY `comment_id` (`comment_id`),
  KEY `meta_key` (`meta_key`)
) ENGINE=MyISAM AUTO_INCREMENT=4631 DEFAULT CHARSET=utf8 AUTO_INCREMENT=4631 ;

insert into blog_commentmeta select * from wp_commentmeta;

CREATE TABLE `blog_comments` (
  `comment_ID` bigint(20) unsigned NOT NULL auto_increment,
  `comment_post_ID` bigint(20) unsigned NOT NULL default '0',
  `comment_author` tinytext NOT NULL,
  `comment_author_email` varchar(100) NOT NULL default '',
  `comment_author_url` varchar(200) NOT NULL default '',
  `comment_author_IP` varchar(100) NOT NULL default '',
  `comment_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `comment_date_gmt` datetime NOT NULL default '0000-00-00 00:00:00',
  `comment_content` text NOT NULL,
  `comment_karma` int(11) NOT NULL default '0',
  `comment_approved` varchar(20) NOT NULL default '1',
  `comment_agent` varchar(255) NOT NULL default '',
  `comment_type` varchar(20) NOT NULL default '',
  `comment_parent` bigint(20) unsigned NOT NULL default '0',
  `user_id` bigint(20) unsigned NOT NULL default '0',
  PRIMARY KEY  (`comment_ID`),
  KEY `comment_post_ID` (`comment_post_ID`),
  KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`),
  KEY `comment_date_gmt` (`comment_date_gmt`),
  KEY `comment_parent` (`comment_parent`)
) ENGINE=MyISAM AUTO_INCREMENT=1566 DEFAULT CHARSET=utf8 AUTO_INCREMENT=1566 ;

insert into blog_comments select * from wp_comments;

CREATE TABLE `blog_links` (
  `link_id` bigint(20) unsigned NOT NULL auto_increment,
  `link_url` varchar(255) NOT NULL default '',
  `link_name` varchar(255) NOT NULL default '',
  `link_image` varchar(255) NOT NULL default '',
  `link_target` varchar(25) NOT NULL default '',
  `link_description` varchar(255) NOT NULL default '',
  `link_visible` varchar(20) NOT NULL default 'Y',
  `link_owner` bigint(20) unsigned NOT NULL default '1',
  `link_rating` int(11) NOT NULL default '0',
  `link_updated` datetime NOT NULL default '0000-00-00 00:00:00',
  `link_rel` varchar(255) NOT NULL default '',
  `link_notes` mediumtext NOT NULL,
  `link_rss` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`link_id`),
  KEY `link_visible` (`link_visible`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;

insert into blog_links select * from wp_links;

CREATE TABLE `blog_options` (
  `option_id` bigint(20) unsigned NOT NULL auto_increment,
  `option_name` varchar(64) NOT NULL default '',
  `option_value` longtext NOT NULL,
  `autoload` varchar(20) NOT NULL default 'yes',
  PRIMARY KEY  (`option_id`),
  UNIQUE KEY `option_name` (`option_name`)
) ENGINE=MyISAM AUTO_INCREMENT=90783 DEFAULT CHARSET=utf8 AUTO_INCREMENT=90783 ;

insert into blog_options select * from wp_options;

CREATE TABLE `blog_postmeta` (

Comments