wordpress 应用教程
wordpress怎么迁移到另一机器,且域名也变动,如:测试版:test.850899.xyz,构建好了就换机器为生产版https://isrv.cn/,为此还要保证媒体库插图到文章在新域名能显示才行
非常好,这个问题很关键,尤其涉及 域名变更 + 服务器迁移 + 媒体库路径修复。下面我会一步步帮你完整实现迁移,确保换到新机器和新域名后文章、图片都正常显示。
🧭 场景说明
- 旧站(测试环境):
https://test.850899.xyz - 新站(生产环境):
https://isrv.cn - 两个 WordPress 实例数据库内容一致(只是服务器和域名不同)
目标:
把 WordPress 从测试机迁移到生产机,并让所有文章、媒体库图片、链接都指向新域名。
🧩 一、迁移流程总览
| 步骤 | 操作 |
|---|---|
| 1 | 备份测试机的数据库与 wp-content 目录 |
| 2 | 拷贝文件到生产机(含 wp-content) |
| 3 | 导入数据库并修改站点域名 |
| 4 | 更新数据库中旧域名(图片、文章内链接) |
| 5 | 检查媒体库、固定链接与 Nginx 配置 |
| 6 | 验证访问效果 |
🪣 二、备份旧站(测试机)
1. 导出数据库
# 假设数据库名为 wordpress,用户名为 wpuser
mysqldump -u wpuser -p wordpress > /root/wp_backup.sql
2. 打包网站文件(尤其 wp-content)
cd /www/wwwroot/test.850899.xyz
tar -czf /root/wp_files.tar.gz wp-content wp-config.php
将 /root/wp_backup.sql 和 /root/wp_files.tar.gz 拷贝到新服务器,例如:
scp /root/wp_backup.sql /root/wp_files.tar.gz root@1.94.254.213:/root/
🖥️ 三、在生产机还原站点
1. 创建数据库
mysql -u root -p
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
2. 导入旧数据库
mysql -u wpuser -p wordpress < /root/wp_backup.sql
3. 还原文件
cd /www/wwwroot/isrv.cn
tar -xzf /root/wp_files.tar.gz
确保
wp-config.php中的数据库连接信息与新环境匹配。
🔁 四、修改域名(WordPress 内)
有两部分要改:
- WordPress 配置(站点地址)
- 数据库内文章、图片等的链接路径
1️⃣ 修改站点 URL(两种方法)
方法 A:直接在数据库改(推荐)
USE wordpress;
UPDATE wp_options SET option_value='https://isrv.cn' WHERE option_name IN ('siteurl', 'home');
方法 B:临时修改 wp-config.php
define('WP_HOME', 'https://isrv.cn');
define('WP_SITEURL', 'https://isrv.cn');
访问正常后可以去掉这两行,让数据库生效。
🧰 五、全局替换旧域名
最关键的一步:
替换文章、媒体库、页面中的旧 URL(如 test.850899.xyz/wp-content/uploads/...)
使用 WP-CLI(如果安装了):
wp search-replace 'https://test.850899.xyz' 'https://isrv.cn' --skip-columns=guid
或者在 MySQL 中执行:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://test.850899.xyz', 'https://isrv.cn');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'https://test.850899.xyz', 'https://isrv.cn');
--skip-columns=guid是为了不改动文章永久链接 ID 字段。
🧱 六、Nginx 配置生产域名
例如:
server {
listen 80;
server_name isrv.cn www.isrv.cn;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name isrv.cn www.isrv.cn;
ssl_certificate /etc/ssl/isrv.cn.crt;
ssl_certificate_key /etc/ssl/isrv.cn.key;
root /www/wwwroot/isrv.cn;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass unix:/run/php-fpm/www.sock;
}
location ~* \.(jpg|jpeg|png|gif|webp|ico|css|js|svg)$ {
expires 30d;
access_log off;
}
}
然后:
sudo nginx -t && sudo systemctl reload nginx
✅ 七、检查与验证
-
登录
https://isrv.cn/wp-admin -
检查:
- 设置 → 常规 → 站点地址、WordPress 地址
- 媒体 → 图片能正常显示
- 文章内链接是否指向新域名
-
若部分图片仍显示旧域名,可再次运行:
wp search-replace 'http://test.850899.xyz' 'https://isrv.cn'
💡 小贴士
-
如果你的图片使用相对路径(例如
/wp-content/uploads/...),迁移时就不会受域名影响。 -
若上传目录权限不对,可执行:
chown -R www-data:www-data /www/wwwroot/isrv.cn/wp-content chmod -R 755 /www/wwwroot/isrv.cn/wp-content
是否希望我帮你生成一个 完整迁移脚本(bash)?
那样你只需要修改域名和数据库参数就能一键迁移。
分割线================================
太好了 👍
下面给你一个 一键迁移脚本(bash),支持:
- 从旧机器导出数据库与文件
- 拷贝到新机器
- 自动导入数据库、更新域名
- 自动修复媒体库与文章图片链接
🧩 一、脚本说明
- 旧站(测试环境):
https://test.850899.xyz - 新站(生产环境):
https://isrv.cn - 数据库名、用户、密码可自定义
- 两台机器之间能用
scp互传文件(SSH已配置)
📜 二、迁移脚本:wp-migrate.sh
在旧机器上执行即可(会自动登录新机器执行导入部分)
#!/bin/bash
# ----------------------------
# WordPress 一键迁移脚本
# ----------------------------
# 使用前请修改以下变量
# ----------------------------
# 域名配置
OLD_DOMAIN="https://test.850899.xyz"
NEW_DOMAIN="https://isrv.cn"
# 数据库信息(旧机器)
OLD_DB_NAME="wordpress"
OLD_DB_USER="wpuser"
OLD_DB_PASS="your_old_db_password"
# 数据库信息(新机器)
NEW_DB_NAME="wordpress"
NEW_DB_USER="wpuser"
NEW_DB_PASS="your_new_db_password"
# 新服务器信息
NEW_SERVER="root@1.94.254.213" # 修改为你的生产服务器IP
NEW_PATH="/www/wwwroot/isrv.cn" # WordPress 目录路径
# ----------------------------
echo ">>> 开始导出旧站点数据库与文件..."
mysqldump -u${OLD_DB_USER} -p${OLD_DB_PASS} ${OLD_DB_NAME} > /root/wp_backup.sql
tar -czf /root/wp_files.tar.gz wp-content wp-config.php
echo ">>> 上传到新服务器..."
scp /root/wp_backup.sql /root/wp_files.tar.gz ${NEW_SERVER}:/root/
# ----------------------------
echo ">>> 登录新服务器执行导入..."
ssh ${NEW_SERVER} bash -s <<EOF
set -e
echo ">>> 创建数据库..."
mysql -u root -p <<SQL
CREATE DATABASE IF NOT EXISTS ${NEW_DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER IF NOT EXISTS '${NEW_DB_USER}'@'localhost' IDENTIFIED BY '${NEW_DB_PASS}';
GRANT ALL PRIVILEGES ON ${NEW_DB_NAME}.* TO '${NEW_DB_USER}'@'localhost';
FLUSH PRIVILEGES;
SQL
echo ">>> 导入数据库..."
mysql -u ${NEW_DB_USER} -p${NEW_DB_PASS} ${NEW_DB_NAME} < /root/wp_backup.sql
echo ">>> 解压文件..."
mkdir -p ${NEW_PATH}
cd ${NEW_PATH}
tar -xzf /root/wp_files.tar.gz
echo ">>> 更新 wp-config.php 数据库配置..."
sed -i "s/define('DB_NAME'.*/define('DB_NAME', '${NEW_DB_NAME}');/g" wp-config.php
sed -i "s/define('DB_USER'.*/define('DB_USER', '${NEW_DB_USER}');/g" wp-config.php
sed -i "s/define('DB_PASSWORD'.*/define('DB_PASSWORD', '${NEW_DB_PASS}');/g" wp-config.php
echo ">>> 修改 WordPress 站点域名..."
mysql -u ${NEW_DB_USER} -p${NEW_DB_PASS} ${NEW_DB_NAME} <<SQL
UPDATE wp_options SET option_value='${NEW_DOMAIN}' WHERE option_name IN ('siteurl', 'home');
UPDATE wp_posts SET post_content = REPLACE(post_content, '${OLD_DOMAIN}', '${NEW_DOMAIN}');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, '${OLD_DOMAIN}', '${NEW_DOMAIN}');
SQL
echo ">>> 设置权限..."
chown -R www-data:www-data ${NEW_PATH}
chmod -R 755 ${NEW_PATH}
echo ">>> 已完成迁移到 ${NEW_DOMAIN}"
EOF
echo "✅ WordPress 迁移完成!请在浏览器访问:${NEW_DOMAIN}"
⚙️ 三、使用方法
-
将脚本保存为:
nano /root/wp-migrate.sh粘贴上面的内容后,修改你的数据库密码、服务器 IP、路径。
-
赋予执行权限:
chmod +x /root/wp-migrate.sh -
执行迁移:
./wp-migrate.sh -
等待自动完成后,访问新域名
https://isrv.cn。
🧪 四、迁移后检查
✅ 登录后台:https://isrv.cn/wp-admin
✅ 检查:
-
设置 → 常规 → WordPress 地址 / 站点地址
-
文章内图片是否都加载正常
-
媒体库是否可用
-
如果还存在少量旧域名:
wp search-replace 'http://test.850899.xyz' 'https://isrv.cn' --skip-columns=guid
是否希望我帮你改写这个脚本,让它支持 远程 MySQL(例如 MariaDB 在另一台服务器上)?
那样迁移时也能直接跨主机更新数据库,不必在目标机安装 MySQL。
分割线================================
那更好,之后我只需要将数据库安装在一台机器,其它机器连接即可,免去再各自安装mysql占用资源
完美 👍
你的这个想法非常对 —— 让多台 WordPress(或其它服务)共享一台 集中式数据库服务器,不仅节省资源,还方便统一备份与迁移。
下面我帮你升级脚本,让它支持:
✅ 数据库独立部署(远程连接)
✅ 多 WordPress 实例共用同一 MySQL / MariaDB 服务器
✅ 迁移时无需在目标机器上安装数据库
✅ 自动更新远程数据库中所有域名引用(媒体库、文章等)
🧠 场景举例
| 项目 | 值 |
|---|---|
| 测试站(旧) | https://test.850899.xyz |
| 生产站(新) | https://isrv.cn |
| 数据库服务器 | 192.168.2.108 |
| 数据库用户 | wpuser |
| 数据库密码 | wp_PASS_123 |
| 数据库名 | wordpress |
| WordPress 新目录 | /www/wwwroot/isrv.cn |
📜 一键迁移脚本:wp-migrate-remote-db.sh
#!/bin/bash
# -------------------------------------------
# WordPress 一键迁移脚本(支持远程数据库)
# -------------------------------------------
# 修改以下配置 👇👇👇
# 域名配置
OLD_DOMAIN="https://test.850899.xyz"
NEW_DOMAIN="https://isrv.cn"
# 数据库配置(远程集中数据库)
DB_HOST="192.168.2.108"
DB_PORT="3306"
DB_NAME="wordpress"
DB_USER="wpuser"
DB_PASS="wp_PASS_123"
# 新服务器(WordPress目标主机)
NEW_SERVER="root@1.94.254.213" # 生产服务器 IP
NEW_PATH="/www/wwwroot/isrv.cn" # WordPress 路径
# -------------------------------------------
echo ">>> 导出数据库(从远程数据库服务器)..."
mysqldump -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASS} ${DB_NAME} > /root/wp_backup.sql
echo ">>> 打包 WordPress 文件..."
tar -czf /root/wp_files.tar.gz wp-content wp-config.php
echo ">>> 上传到新服务器..."
scp /root/wp_backup.sql /root/wp_files.tar.gz ${NEW_SERVER}:/root/
echo ">>> 登录新服务器执行导入..."
ssh ${NEW_SERVER} bash -s <<EOF
set -e
echo ">>> 解压 WordPress 文件到 ${NEW_PATH}"
mkdir -p ${NEW_PATH}
cd ${NEW_PATH}
tar -xzf /root/wp_files.tar.gz
echo ">>> 更新 wp-config.php 远程数据库配置..."
sed -i "s/define('DB_NAME'.*/define('DB_NAME', '${DB_NAME}');/g" wp-config.php
sed -i "s/define('DB_USER'.*/define('DB_USER', '${DB_USER}');/g" wp-config.php
sed -i "s/define('DB_PASSWORD'.*/define('DB_PASSWORD', '${DB_PASS}');/g" wp-config.php
sed -i "s/define('DB_HOST'.*/define('DB_HOST', '${DB_HOST}:${DB_PORT}');/g" wp-config.php
echo ">>> 设置文件权限..."
chown -R www-data:www-data ${NEW_PATH}
chmod -R 755 ${NEW_PATH}
EOF
echo ">>> 更新远程数据库中域名..."
mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASS} ${DB_NAME} <<SQL
UPDATE wp_options SET option_value='${NEW_DOMAIN}' WHERE option_name IN ('siteurl', 'home');
UPDATE wp_posts SET post_content = REPLACE(post_content, '${OLD_DOMAIN}', '${NEW_DOMAIN}');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, '${OLD_DOMAIN}', '${NEW_DOMAIN}');
SQL
echo "✅ WordPress 已成功迁移并连接远程数据库:${DB_HOST}"
echo "✅ 新站点访问地址:${NEW_DOMAIN}"
🧰 使用方法
-
在旧服务器保存脚本:
nano /root/wp-migrate-remote-db.sh按实际情况修改顶部变量。
-
赋予执行权限:
chmod +x /root/wp-migrate-remote-db.sh -
执行迁移:
./wp-migrate-remote-db.sh
🧱 数据库远程访问配置(只需做一次)
1️⃣ 修改数据库服务器配置文件(MariaDB / MySQL)
编辑:
sudo vim /etc/my.cnf.d/server.cnf
确保 [mysqld] 段有:
bind-address = 0.0.0.0
然后重启服务:
sudo systemctl restart mariadb
2️⃣ 允许远程访问权限
登录数据库:
mysql -u root -p
执行:
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%' IDENTIFIED BY 'wp_PASS_123';
FLUSH PRIVILEGES;
🧾 验证步骤
-
在新机器执行:
mysql -h192.168.2.108 -uwpuser -p→ 能连上即代表远程数据库OK。
-
打开浏览器访问新站:
https://isrv.cn -
后台检查:
- 设置 → 常规 中的 WordPress 地址 / 站点地址
- 媒体库、文章图片是否正常加载。
💡 延伸建议
💾 1. 集中数据库备份
在数据库服务器上每天自动备份:
mysqldump -u root -p wordpress > /opt/backup/wp_$(date +%F).sql
🧮 2. 多站共享数据库
可以让多个 WordPress 使用同一 MySQL 服务,只需:
- 不同数据库名(如
wp_blog1,wp_blog2); - 各自的
wp-config.php对应自己的数据库。
是否希望我再帮你改进一版脚本,让它能 批量迁移多个 WordPress 站点(如 blog1 → blog2 → blog3),并全部接入同一远程数据库?
适合你后续多站部署时一键操作。