抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

使用Docker进行WordPress网站合并

背景

我之前有两个站点,一个是之前的旧站点(文章时间大概是2016-2019,这期间虽然做过维护,但是由于装的插件以及一些编辑器导致文章中的图不方便管理而且数据库中存在了很多冗余字段。)另一个是2019年中新开的一个博客,写了大概几十篇。

需求

将旧站点中的几百篇文章导入到新站点,文章图片重新上传,不覆盖新站点内容,仅单单做文章填充。

解决方案

我在网上查了很久,有各类导入导出插件,我试过后发现要么需要付费,要么也只是简单的数据库导入导出,不符合需求,最后找到的最合适的方法是:【后台->工具->导出->选择单独导出文章】

然后在另一个站点进后台导入文章。

技术选择

Docker构建一个mysql容器,三个wp容器(站点1,站点2,合并项)实现所有内容的本地化。旧站点内容选择性的逐步导入到新站点。

基本操作

PS:docker命令不再作解释

首先装好MySql8:

docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.0.19

创建WordPress

docker run --name wp0131_origin --link mysql8:mysql -p 8080:80 -d wordpress:5.3.2

使用Navicat连接数据库后导入相关数据库,再使用kitematic挂载相应目录进行WordPress的文件替换(也可以docker cp进容器,选择一个自己觉得方便的),然后访问http://localhost:[端口,比如上面是8080]/

遇到的问题

关于SQL8,root用户的加密方式发生了改变导致wp无法连接。

# 登录容器
docker exec -it mysql8 /bin/bash
# 登录SQL 输入密码:
mysql -h localhost -u root -p
# 使用mysql自带数据库:
use mysql;
# 查看相关用户配置:
select host, user, plugin from user; 
# 会发现root的加密方式不是 mysql_native_password 导致无法连接,改回来:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysql'; 

关于域名转换为本地路径(在对应的数据库执行,关于相应字段可自行检索):

UPDATE wp_options SET option_value = replace(option_value, 'old_url','new_url') ;
UPDATE wp_posts SET post_content = replace(post_content, 'old_url','new_url') ;
UPDATE wp_posts SET guid = replace(guid, 'old_url','new_url') ;
UPDATE wp_comments SET comment_content = replace(comment_content, 'old_url','new_url') ;
UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'old_url','new_url') ;

如果表名前缀有变的需要自行更改表名。

数据库导出后再导入出现错误

错误如下:

 [ERR] 1406 - Data too long for column 'comment_author_url' at row 1
 [ERR] 1067 - Invalid default value for 'comment_date' 

解决办法:

# 登录容器
docker exec -it mysql8 /bin/bash
# 安装nano编辑器
apt update
apt install nano
# 编辑sql配置文件
nano /etc/mysql/my.cnf
# 末尾追加
sql_mode= ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 说明:以上两个问题是因为sql_mode中包含了对字段的严格检查 
# 重启容器生效

关于WordPress容器修改配置文件后404的问题(访问不到index.php)

之前一直以为是操作问题,后来发现不是,最新的WordPress容器存在apache2刷新问题,老外给的方案,.htaccess文件在默认的wp文件中存在。复制过来即可。

1) Created new one by clicking on save button in Settings->Permalinks
Click in the field and press CTRL + a to select all. Paste on .htaccess
 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /wordpress/
 RewriteRule ^index\.php$ - [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /wordpress/index.php [L]
 </IfModule>
2) Now, Need to activate mod_rewrite:
 sudo a2enmod rewrite
This will activate the module or alert you that the module is already in effect. 
3) To put these changes into effect, restart Apache:
 sudo service apache2 restart
and now that pages started working fine... 

去除文章特色图片

以前的文章特色图片懒得导入了不如全删,于是~

特色图片的字段在wp_postmeta表中,根据postid进行匹配。

字段为meta_key内容为_thumbnail_id

字段为meta_value内容为媒体库中的id 删除即可

UPDATE wp_postmeta SET meta_value = "" WHERE meta_key LIKE "_thumbnail_id%" ;

其他

最后配合自己写的一些sql语句以及一些脚本匹配了下文章中的图片和uploads中的文件,查漏补缺搞了一两天才搞定,再其他?再其他就用后台慢慢编辑咯。

技术多学一些操作就越简单一些,毕竟没什么复杂的难题,就是一个综合能力的输出。

然后中间还踩了一些docker的坑:Docker mysql容器数据库丢失找回指北


0条评论

发表评论