如何通过终端命令更新数据库表前缀

时间:2021-01-05 03:16:11

标签: wordpress

根据 these excellent instructions,我可以从多站点安装中导出 wordpress 子站点的表。但是,我无法根据说明更新数据库的 table_prefix。谁能看到我做错了什么?或者提供另一个“整洁的”终端“one-liner”来更新 db table_prefix (参见下面的“#6”)

突触:

地点:
mainsite = domain.localhost.mainsite.com
子站点 = domain.com

#0  sudo su


#1  Create space for db export & conversion
mkdir /tmp/domain.localhost.mainsite.com/ 
mkdir /tmp/domain.localhost.mainsite.com/domain.com

#2   change to wp root directory
$ cd /var/www/html/domain.localhost.mainsite.com/


#3  Locate blog_id of relevant site (NEVER # 1, this is main site)
wp site list


#4   Export all the subsite db tables to new  " .sql " file
wp db export --tables=$(wp db tables --url=domain.localhost.mainsite.com --format=csv --skip-plugins --skip-themes --allow-root) /tmp/domain.sql --allow-root

#5 Identify current db prefix

grep "table_prefix" wp-config.php

output: $table_prefix = 'wpb_';

#6 Change the table prefix to match new location db prefix (" 2nodeh_ ")

sed "s#wpb_<blog_id#>_:#2nodeh_#g" /tmp/domain.sql > /tmp/domain.localhost.mainsite.com/domain.com/domain.sql  #This does not seem to work

#7  make " .sql " even smaller, using gzip
gzip /tmp/domain.localhost.mainsite.com/domain.com/domain.sql -c > /tmp/domain.localhost.mainsite.com/domain.com/domain.sql.gz


#8 (move db to safer storage space) upload db to new location and import 
(php my admin fastest way) 

#9 rsync plugins, themes, & uploads to new location
/wprootdirectory/wp-content/plugins/

/wprootdirectory/wp-content/themes/

/wprootdirectory/wp-content/uploads/sites/<blog_id#>/

每当我将数据库导入新数据库时,原始 table_prefix 仍然存在。我知道如何使用 mysql 更改表前缀。我特别在寻找类似于上面 #6 的单个终端命令......有什么提示吗?

2 个答案:

答案 0 :(得分:0)

您可以使用 wp-cli 重命名包,这对我有用。

https://github.com/iandunn/wp-cli-rename-db-prefix

注意:请记住在运行命令之前备份您现有的数据库。

谢谢

答案 1 :(得分:0)

找到答案,显然我问题第 6 项中的语法不正确,要使用 sed 更改 wordpress 表前缀,请使用以下格式:

sed --in-place --expression 's#`wp_<blog_id#>_#`<new_prefix>_#g' exported-db.sql

注意事项:
1.) 以上专门用于从问题中描述的多站点导出子站点,但也可用于其他场景

2.) 虽然很容易,但如果您要从“domain.localhost.mainsite.com”移动到“domain.com”,请不要使用此方法来替换 url,因为 wordpress 在某些情况下会序列化 db 中的 url,而是通过 phpmyadmin sql quesy 界面使用下面方便的 sql 查询,进行适当的 url 更改:

UPDATE wp_options SET option_value = replace(option_value, 'oldurl.com', 'newurl.com') WHERE option_name = 'home' OR option_name = 'siteurl';UPDATE wp_posts SET guid = replace(guid, 'oldurl.com','newurl.com');UPDATE wp_posts SET post_content = replace(post_content, 'oldurl.com', 'newurl.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value,'oldurl.com','newurl.com');

3.) 像往常一样......在你做任何这些之前备份你的数据库