三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

WordPress网站迁移与备份全攻略

WordPress网站迁移与备份全攻略

1. WordPress网站迁移与备份的核心价值

做网站最怕什么?数据丢失和迁移失败。我见过太多站长因为误操作导致整站崩溃,也处理过无数迁移后404的求助案例。WordPress作为动态内容管理系统,其数据库与文件系统的关联性使得迁移工作远比静态网站复杂。本文将分享一套经过300+次实战验证的迁移备份方案,包含从零开始的手动迁移到高级插件方案,以及那些官方文档永远不会告诉你的避坑细节。

2. 完整备份方案设计

2.1 文件系统备份要点

WordPress核心文件、主题、插件、上传内容分别存储在不同目录,需要针对性处理:

  • /wp-content/uploads(媒体库)建议单独备份
  • 当前使用主题的/wp-content/themes/主题名需完整保留
  • 活跃插件目录/wp-content/plugins建议过滤无效插件

使用SSH备份的典型命令:

tar -czvf wp_backup_$(date +%Y%m%d).tar.gz \ --exclude='wp-content/cache' \ --exclude='wp-content/backups' \ /var/www/html

2.2 数据库备份策略

MySQL备份需要特别注意字符集问题,推荐使用mysqldump时添加参数:

mysqldump -u root -p --default-character-set=utf8mb4 \ --add-drop-table --complete-insert wordpress_db > wp_db_$(date +%Y%m%d).sql

关键提示:务必检查备份文件的头部是否有/*!40101 SET NAMES utf8mb4 */;语句,避免字符集转换导致内容乱码

3. 手动迁移全流程

3.1 目标环境预配置

  1. 新服务器需匹配PHP版本(通过php -v核对)
  2. MySQL版本差异处理:
    • 5.7→8.0需运行mysql_upgrade
    • 反向迁移需禁用caching_sha2_password插件

3.2 文件系统迁移

使用rsync实现增量同步:

rsync -avz --delete -e "ssh -p 22" \ --exclude='wp-config.php' \ /var/www/html/ user@newserver:/path/to/newroot

3.3 数据库迁移特殊处理

导入时需注意:

/* 先创建同名数据库 */ CREATE DATABASE new_wp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; /* 导入时禁用外键检查 */ SET FOREIGN_KEY_CHECKS = 0; source wp_db_backup.sql; SET FOREIGN_KEY_CHECKS = 1;

4. 插件辅助方案对比

4.1 主流插件性能测试

插件名称大文件处理多站点支持断点续传迁移速度
All-in-One WP2.4GB/h
Duplicator Pro优秀4.1GB/h
WPvivid Backup中等3.2GB/h

4.2 Duplicator实战配置

  1. 打包时勾选"Archive Engine"使用ZIP+PHP模式
  2. 设置分卷大小为200MB(避免PHP内存限制)
  3. 必选"Database Script > Replace GUIDs"选项

5. 迁移后必检清单

5.1 链接修复方案

在wp-config.php添加:

define('WP_HOME','https://newdomain.com'); define('WP_SITEURL','https://newdomain.com');

然后执行SQL替换:

UPDATE wp_options SET option_value = replace(option_value, 'old.com', 'new.com'); UPDATE wp_posts SET post_content = replace(post_content, 'old.com', 'new.com'); UPDATE wp_postmeta SET meta_value = replace(meta_value, 'old.com', 'new.com');

5.2 权限修复命令

find /path/to/wordpress -type d -exec chmod 755 {} \; find /path/to/wordpress -type f -exec chmod 644 {} \; chown -R www-data:www-data /path/to/wordpress

6. 灾难恢复方案

6.1 数据库崩溃应急

当出现"Error establishing a database connection"时:

  1. 检查wp-config.php中的DB_NAME是否含特殊字符
  2. 使用mysqlcheck -r -u root -p wordpress_db修复表
  3. 极端情况下从备份恢复单个wp_options表

6.2 文件损坏处理

通过WordPress官方文件校验:

wget https://wordpress.org/latest.tar.gz tar -xzvf latest.tar.gz rsync -av --dry-run wordpress/wp-admin/ /path/to/broken/wp-admin/

7. 高级技巧与自动化

7.1 增量备份方案

使用LVM快照创建一致性备份:

lvcreate --size 1G --snapshot --name wp_snap /dev/vg00/lv_wordpress mkdir /mnt/snapshot mount /dev/vg00/wp_snap /mnt/snapshot tar -czf /backups/wp_incr_$(date +%s).tar.gz -C /mnt/snapshot .

7.2 邮件通知脚本

备份完成后自动发送校验报告:

add_action('wp_backup_complete', function($backup_file){ $checksum = md5_file($backup_file); wp_mail('admin@domain.com', '备份完成通知 - '.site_url(), "备份文件:{$backup_file}\nMD5校验码:{$checksum}\n文件大小:".filesize($backup_file)."字节"); });

8. 典型故障排除实录

8.1 媒体库文件丢失

现象:迁移后图片显示为空白图标 解决方案:

  1. 检查upload_path设置:
    SELECT * FROM wp_options WHERE option_name = 'upload_path';
  2. 重建文件索引:
    wp media regenerate --yes

8.2 固定链接失效

修改.htaccess规则为:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>

最后提醒:每次重大更新前,养成创建还原点的习惯。我在实际运维中会保留最近7天的每日备份+3个关键版本快照,这个习惯至少挽救过20次数据危机。对于电商类站点,建议采用实时数据库复制+文件监控同步的方案,这将是后续我们探讨的高阶话题。

← 返回列表