WordPress 迁移
1、迁移步骤
1.1、环境准备
创建 fpm 用户和用户组
安装 nginx 和 php 编译所需的 lib
1.2、迁移 Nginx
安装 nginx
拷贝旧 nginx 配置,以及对配置中 fpm 的 IP 作调整
拷贝 SSL 证书文件
1.3、升级和安装 PHP
将原 php7 升级到 php8,并部署到新的服务器
配置并启动 php-fpm
1.4、升级和迁移 MySQL
将原 mysql5 升级到 mysql8,并部署到新的服务器
停止旧 nginx,避免有新的数据进入 mysql 和产生新的 WordPress 文件
备份旧 mysql 中的数据,并导入新的 mysql
1.5、迁移 WordPress 程序和文件
备份旧 WordPress 目录下所有的文件,并拷贝到新的新服务器中
修改新 WordPress 目录的权限,保持与 php-fpm 一致
1.6、修改域名的地址解析
修改域名解析后的 IP,指向新的服务器
2、升级和迁移
2.1、MySQL
针对 Docker 安装的 MySQL,修改下 docker-compose 文件,以下是 MySQL8 的参考:
version: '3.1'
services:
mysql:
image: mysql:8.0.20
container_name: mysql
ports:
- 3306:3306
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/logs:/var/log/mysql
- ./mysql/conf/my.cnf:/etc/mysql/my.cnf
environment:
TZ: Asia/Shanghai
# root 用户密码
MYSQL_ROOT_PASSWORD: xxxx
# 自定义用户
MYSQL_USER: middle
MYSQL_PASSWORD: xxxxx
command:
--default-authentication-plugin=mysql_native_password
--max_connections=1000
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--default-time-zone='+8:00'
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--expire-logs-days=7
privileged: true
logging:
driver: "json-file"
options:
max-size: "100m"
restart: always
2.2、PHP
将 PHP7 升级到 PHP8,以下是采用源码编译的方式。
源码编译比较麻烦,步骤如下,参考:https://www.php.net/manual/zh/install.unix.debian.php
1、下载 php8 源码
2、安装必要的依赖(不同版本的 php 所需的依赖有重叠,也有差异)
3、php8 编译配置(如下 ./configure)
4、make && make install
5、添加 php-fpm.conf 和 www.conf 配置
6、修改 /usr/local/php8(编译产物目录) 的权限
# 包含 mysqli fpm 等必要模块
# 声明 fpm user 和 group 为指定的 fpm
./configure --prefix=/usr/local/php8 \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqli \
--enable-mysqlnd \
--enable-bcmath \
--enable-fpm \
--with-fpm-user=fpm \
--with-fpm-group=fpm \
--enable-mbstring \
--enable-phpdbg \
--enable-shmop \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-zip \
--with-libzip=/usr/lib/x86_64-linux-gnu \
--with-zlib \
--with-curl \
--with-pear \
--with-openssl \
--enable-pcntl \
--with-readline
3、遇到的问题
场景:php configure
提问:遇到 oniguruma not met
原因:没有安装 oniguruma 依赖
解答:安装 oniguruma 和 oniguruma-devel
场景:yum search oniguruma-devel no match
提问:找不到 oniguruma-devel (
原因:有 epel 源,但没有 oniguruma-devel。此 epel 是 for 腾讯 os 镜像,而 redhat epel 是有的
解答:替换成 epel for redhat
场景:php configure 缺少各种 lib
解答:安装各种 lib
场景:mysql5 数据迁移至 mysql8,部分表能够创建和导入数据
提问:为什么 sql 脚本执行失败
原因:数据导入时,出现 Incorrect datetime value: ‘0000-00-00 00:00:00 错误,这个错误是因为 mysql5 和 mysql8 对时间处理机制不同导致,mysql8 对时间类型的数据有严格限制,导致值为 0000-00-00 00:00:00 的数据都插入失败。
解答:只要将包含 0000-00-00 00:00:00 数据改为正常时间值
场景:mysql5 数据迁移至 mysql8
提问:WordPress 拷贝的程序,是否需要声明 mysql 版本
解答:无需要声明 mysql 版本,WordPress5.6 以上版本支持 mysql8,并且会自动处理兼容问题
提问:如何修改 WordPress 程序连接新的 mysql
解答:修改 WordPress 目录下 wp-config.php 文件,找到并修改代码 define(‘DB_HOST’, ‘localhost’);
场景:将原 WordPress 程序和数据拷贝到新的服务器
提问:WordPress 的程序和文件拷贝到新的服务器,是否就像旧服务器上的程序那样运行正常。
解答:是的,注意 WordPress 的权限与 fpm 保持一直
4、收尾工作
1、删除数据和文件
2、观察数据和程序迁移后的运行情况