迁移脚本

在新机器上执行以下脚本,启动后,如果找不到登陆地址,需要进入数据库wp_options表中找到option_name=”active_plugins”一行将激活的软件数量设置为0,然后登陆地址为:ip/wp-login.php。登陆后记住登陆地址,再到数据库中恢复插件激活数量即可。连接数据库技巧:因为wp_options表非常大,所以获取速度慢,可通过查询后修改。

SELECT * FROM wp_options WHERE option_name='active_plugins';
-- a:19:{i:0;s:35:"classic-widgets/classic-widgets.php";i:1;s:33:"code-block-pro/code-block-pro.php";i:2;s:47:"cryout-serious-slider/cryout-serious-slider.php";i:3;s:51:"featured-image-from-url/featured-image-from-url.php";i:4;s:73:"horizontal-scrolling-announcements/horizontal-scrolling-announcements.php";i:5;s:55:"luckywp-table-of-contents/luckywp-table-of-contents.php";i:6;s:31:"mathjax-latex/mathjax-latex.php";i:7;s:35:"one-user-avatar/one-user-avatar.php";i:8;s:37:"pdf-viewer-block/pdf-viewer-block.php";i:9;s:39:"plugin-notes-plus/plugin-notes-plus.php";i:10;s:39:"q2w3-fixed-widget/q2w3-fixed-widget.php";i:11;s:23:"siteguard/siteguard.php";i:12;s:29:"use-any-font/use-any-font.php";i:13;s:41:"wordpress-importer/wordpress-importer.php";i:14;s:30:"wp-githuber-md/githuber-md.php";i:15;s:29:"wp-mail-smtp/wp_mail_smtp.php";i:16;s:31:"wp-statistics/wp-statistics.php";i:17;s:35:"wp-user-rewards/wp-user-rewards.php";i:18;s:42:"yet-another-related-posts-plugin/yarpp.php";}
-- 将以上查到的 a:19改为 a:0

以下脚本在新机器执行。

搭建过程细节

以下内容借鉴于阿里云社区:https://developer.aliyun.com/article/900120

传统的使用wordpress搭建网站,意味着你需要搭建以下四个环境:

  • php
  • apache/linux
  • mysql
  • wordpress

这里面主要是php的搭建真心麻烦,各种依赖,版本不兼容,然后还有php跟mysql的插件,”我”是吃了它很大的苦,寻求让”我”快乐的方法,知道”我”发现了它。使用docker容器技术5分钟快速搭建wordpress,相信”我”,真的是五分钟。

需要Linux服务器一台。

1. 新建并启动 MySQL 容器

sudo docker container run  \
-d \
-p 3306:3306 \
-v "$PWD/wordpress/data":/var/lib/mysql  \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=wordpress \
--name wordpressdb \
mysql:5.7
  • –env MYSQL_ROOT_PASSWORD=123456:向容器进程传入一个环境变量MYSQL_ROOT_PASSWORD,该变量会被用作 MySQL 的根密码。
  • –env MYSQL_DATABASE=wordpress:向容器进程传入一个环境变量MYSQL_DATABASE,容器里面的 MySQL 会根据该变量创建一个同名数据库(本例是WordPress)。

2. 新建并启动 WordPress 容器

基于官方的 WordPress image,新建并启动 WordPress 容器。

sudo docker container run \
-d  \
-p 80:80 \
--name wordpress  \
-e WORDPRESS_DB_PASSWORD=123456 \
--link wordpressdb:mysql \
--volume "$PWD/wordpress/pages":/var/www/html \
wordpress

该命令执行完后,会在当前目录下生成一个wordpress目录。

-p 80:80:将容器的 80 端口映射到当前物理机的80端口。
--volume "$PWD/wordpress/pages":/var/www/html:将容器的/var/</span><span style="color: #D8DEE9FF">www</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF">html</span><span style="color: #81A1C1">目录映射到当前目录的wordpress/pages子目录,操作$pwd/wordpress/pages目录,相当于操作容器里面的/var/www/html目录了。

如果这个时候网页不可以访问到需要检查端口是否开放,以及安全组是否开放相应端口。

3. 修改WordPress配置文件

$ vim wordpress/wp-config.php
# 修改以下三个地方:
/** The name of the database for WordPress */
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );
/** MySQL database username */
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'root') );
/** MySQL database password */
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', '123456') );

然后浏览器输入公网ip:80,即可进去wordpress安装界面,跟着向导,几分钟就完成了。

安装完成后,可以通过插件实现头像的自定义。

4. 博客数据迁移

总之分为两步:数据库脚本备份恢复和wordpress目录备份恢复。

【1】将mysql容器内的wordpress数据库导出为sql语句,这个时候可以有两种方法:

  • 如果在开启mysql容器的时候并没有添加端口映射,这个时候必须进入到容器内部,采用命令的方式将数据库导出,命令如下:
# 执行如下命令导出数据库,并输入密码
mysqldump -u root -p eva -P 3306 > wordpress.sql
# 退出容器后,将导出的wordpress.sql文件从容器内部复制出来
sudo docker cp containerid/wordpress.sql:./
  • 如果在开启mysql容器的时候添加端口映射,那么可以从外界使用数据库连接工具导出数据库。

在开启新的mysql容器时指定该目录,并从数据库脚本恢复数据库。

sudo docker container run  \
-d \
-p 3306:3306 \
-v "$PWD/wordpress/data":/var/lib/mysql  \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=wordpress \
--name wordpressdb \
mysql:5.7

【2】将wordpress/pages备份,并在开启新的wordpress容器时指定该目录。

sudo docker container run \
-d  \
-p 80:80 \
--name wordpress  \
-e WORDPRESS_DB_PASSWORD=123456 \
--link wordpressdb:mysql \
--volume "$PWD/wordpress/pages":/var/www/html \
wordpress

【3】wordpress/pages 的所属用户和用户组是 www-data

如果遇到插件无法安装或者需要输入FTP用户名和密码的问题,可以尝试这个方法,如果还不行,那么就试着给 wordpress/pages 目录赋予相应的权限。sudo chmod 755 -R pages

sudo chown -R www-data:www-data pages

【4】mysql 导出的脚本在重构数据库时

如果已经不再使用原站点IP和域名进行部署,那么要将sql脚本中所有的和站点IP以及域名有关的都替换为当前目标部署站点,比如本地就是127.0.0.1

如果使用navicat这种工具,会遇到 datatime 的格式问题 不允许有0 在日期中,那么最简单的办法就是将sql脚本用vscode打开,全部替换‘0000-00:00:00’ 类似这种的默认值为‘1111-11:11:11’,再导入到新的数据库就可以了。这样做就没有必要用旧的 wordpress/data目录了。但如果不使用navicat,可以使用脚本,将备份的sql脚本复制到/wordpress/data下,进入容器:

docker exec -it wordpressdb /bin/bash
mysql -u root -p123456 wordpress < /var/lib/mysql/database.sql

然后打开浏览器,127.0.0.1进入页面。

当内容从一个站点迁移到另外一个站点的时候,sql 脚本中包含了域名或者IP信息,这时候必须进行全局替换,否则站点无法被访问,也就是说,wordpress/data 的迁移没有意义,内容需要在sql脚本中进行适当修改后再植入新的数据库。

数据库备份的时候只需要备份 数据库SQL脚本文件pages页面

启动redis
docker run -p 6379:6379  --name redis -v /Users/aikedaer/Desktop/SpringBoot-Vue/redis_docker/redis.conf:/etc/redis/redis.conf -v /Users/aikedaer/Desktop/SpringBoot-Vue/redis_docker/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

-p 6379:6379 端口映射前表示主机部分,:后表示容器部分
--name myredis 指定该容器名称查看和进行操作都比较方便
-v 挂载目录规则与端口映射相同
-d redis 表示后台启动redis
redis-server /etc/redis/redis.conf 以配置文件启动redis加载容器内的conf文件最终找到的是挂载的目录/usr/local/docker/redis.conf
appendonly yes 开启redis 持久化
打赏作者

4 个评论

  1. 启动redis:
    docker run -p 6379:6379 两个杠name redis -v /Users/aikedaer/Desktop/SpringBoot-Vue/redis_docker/redis.conf:/etc/redis/redis.conf -v /Users/aikedaer/Desktop/SpringBoot-Vue/redis_docker/data:/data -d redis redis-server /etc/redis/redis.conf –appendonly yes

    -p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
    两个杠name myredis 指定该容器名称,查看和进行操作都比较方便。
    -v 挂载目录,规则与端口映射相同。
    -d redis 表示后台启动redis
    redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis.conf
    appendonly yes 开启redis 持久化

  2. 修改默认配置文件
    bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
    protected-mode no #默认yes,开启保护模式,限制为本地访问
    daemonize no #默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败 非常重要!!!!!!
    dir ./ #输入本地redis数据库存放文件夹(可选)
    appendonly yes #redis持久化(可选)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

CAPTCHA