9 10 月, 2025 | No Comments »

🧩 一、问题背景

迁移服务器或修改数据库后,我的 WordPress 打开页面提示:

Error establishing a database connection

同时,有时根目录报 403 Forbidden
/wordpress/ 页面却能正常访问。
这说明 WordPress 的数据库配置或 Nginx 设置存在问题。


🔍 二、问题分析

通过一系列排查后,发现了几个关键原因:

  1. wp-config.php 中的数据库信息不匹配
  2. MySQL 用户权限只授权了 localhost,没有给 127.0.0.1
  3. Nginx 配置文件中 root 路径错误
  4. PHP 连接数据库时未正确使用 socket

🔧 三、解决步骤

1️⃣ 修复 MySQL 用户与权限

登录数据库:

mysql -uroot -p

执行:

CREATE DATABASE wordpress DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'LH2004lh-';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;

2️⃣ 编辑 wp-config.php

路径:/var/www/html/wordpress/wp-config.php

define('DB_NAME', 'wordpress');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'LH2004lh-');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', '');
$table_prefix = 'wp_';
define('WP_DEBUG', false);

3️⃣ 重写 Nginx 配置(/etc/nginx/conf.d/lhws.top.conf)

server {
    listen 80;
    server_name lhws.top www.lhws.top;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name lhws.top www.lhws.top;

    ssl_certificate /etc/letsencrypt/live/lhws.top/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/lhws.top/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/html/wordpress;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    error_page 403 /403.html;
    error_page 404 /404.html;
}

4️⃣ 数据库连接测试文件(testdb.php)

<?php
$db_socket = '/var/lib/mysql/mysql.sock';
$conn = new mysqli(null, 'wpuser', 'LH2004lh-', 'wordpress', null, $db_socket);
if ($conn->connect_error) {
    die("❌ 数据库连接失败!<br>错误信息: " . $conn->connect_error);
}
echo "✅ 数据库连接成功!";
$conn->close();
?>

✅ 四、结果验证

  • 访问 https://lhws.top/testdb.php 显示 ✅ 数据库连接成功!
  • WordPress 前台与后台全部恢复正常
  • 403/404 问题消失,HTTPS 强制跳转生效

💡 五、经验总结

  • WordPress 的数据库连接是通过 mysqli,必须确认 socket 与用户权限匹配
  • 推荐使用 localhost + Unix socket(比 TCP 更稳定)
  • Nginx 的 root 路径必须精确指向 WordPress 目录
  • 一定记得在修改后重启服务: systemctl restart nginx systemctl restart php-fpm

✅ 最终结果:
网站完全恢复,数据库连接稳定,HTTPS 正常跳转。
一次从“Error establishing a database connection”到“网站重生”的完整修复!

Posted in Uncategorized
9 10 月, 2025 | No Comments »

🧩 一、问题背景

前段时间我的网站突然变得非常卡,后台操作经常报错,甚至 Nginx 都无法启动。
我用 df -h 查看磁盘后发现:

根目录 / 的磁盘使用率接近 100%。

这说明服务器磁盘已经被日志、缓存、或临时文件塞满。
于是我开始着手清理整个系统空间。


🔍 二、问题排查

执行以下命令,查看各目录占用情况:

df -h
du -sh /* | sort -h

结果发现 /var/log//var/cache//tmp/ 等目录空间异常大。
尤其是日志文件(.log.gz)以及历史缓存。


🧹 三、清理步骤

1️⃣ 清理日志文件

rm -f /var/log/*.log
journalctl --vacuum-time=3d

这会清理旧日志,仅保留最近三天的。

2️⃣ 清理缓存与临时文件

yum clean all
rm -rf /var/cache/*
rm -rf /tmp/*

3️⃣ 删除旧内核(CentOS / Anolis OS)

dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)

4️⃣ 清理 Certbot 旧证书(如有更换域名)

rm -rf /etc/letsencrypt/live/OLD_DOMAIN
rm -rf /etc/letsencrypt/archive/OLD_DOMAIN

✅ 四、结果验证

再次执行:

df -h

发现空间恢复充足,从原来的 100% 降到了 30% 左右。
整个系统运行恢复正常,WordPress 后台也不再报错。


💡 五、经验总结

  • 定期清理 /var/log//var/cache//tmp/
  • 启用日志轮转或压缩机制。
  • 对于小型服务器(1GB~2GB),建议每月检查一次磁盘使用情况。
  • 使用 ncdu(若安装)能更直观地查看占用大户。

✅ 最终结果:
系统运行恢复正常,Nginx/PHP 服务稳定,WordPress 后台顺畅无卡顿。
一次完整的“空间救援”行动,完美收官!

Posted in Uncategorized
21 9 月, 2025 | No Comments »

第一步:网络连通性检查

目标:确保两台服务器之间网络通畅

bash

# 检查网络连通性
ping 目标服务器IP
telnet 目标服务器IP 3306

# 验证防火墙设置
systemctl status firewalld
iptables -L -n

关键点

  • 确认3306端口对外开放
  • 检查云服务商安全组规则
  • 验证内网/公网连通性

第二步:创建同步账户

目标:建立专门用于数据复制的数据库账户

sql

-- 在主服务器上创建复制用户
CREATE USER 'replica_user'@'从服务器IP' IDENTIFIED BY '强密码';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'从服务器IP';
FLUSH PRIVILEGES;

权限要求

  • REPLICATION SLAVE 权限
  • 指定从服务器IP地址增强安全性
  • 使用强密码策略

第三步:数据同步

目标:将主服务器数据完整迁移到从服务器

bash

# 主服务器创建数据备份
mysqldump -u用户名 -p密码 --master-data --single-transaction --all-databases > backup.sql

# 传输备份文件到从服务器
scp backup.sql 用户名@从服务器IP:/tmp/

# 从服务器导入数据
mysql -u用户名 -p密码 < /tmp/backup.sql

注意事项

  • 使用--master-data记录二进制日志位置
  • --single-transaction确保数据一致性
  • 备份期间避免大量数据写入

第四步:启动主从复制

目标:配置并启动复制进程

sql

-- 在从服务器上执行
CHANGE MASTER TO
MASTER_HOST='主服务器IP',
MASTER_USER='replica_user',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=123456;

START SLAVE;

验证命令

sql

SHOW SLAVE STATUS\G
-- 检查Slave_IO_Running和Slave_SQL_Running状态
-- 确认Seconds_Behind_Master值为0

常见问题与解决方案

问题类型表现解决方法
网络连接Connection timed out检查安全组、防火墙设置
权限问题Access denied确认复制用户权限和主机设置
数据不一致同步中断或错误重新初始化数据同步
版本兼容语法错误确保主从MySQL版本兼容
Posted in Uncategorized
17 9 月, 2025 | 1 Comment »

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

Posted in Uncategorized