MYYCMS 站群系统数据库修改密码及数据库备份恢复操作笔记

CMS程序

MYYCMS 站群系统数据库修改密码及数据库备份恢复操作笔记

最新上线了6台MYYCMS站群,目前整体排名效果不错!

最近这个月,陆续有3台MYYCMS站群服务器出现故障,最近这一台服务器因为硬盘故障,导致服务器无法启动,机房那边紧急帮忙安排了一块新的硬盘,并把旧硬盘挂载到服务器上,测试了两天,终于把旧硬盘上的MYYCMS站群数据,包括MYYCMS站群的源码、Mysql数据库文件,以及Redis数据库文件从旧硬盘转移到新硬盘,并重新配置MYYCMS站群的信息,将MYYCMS站群成功恢复,今天记录一下详细的操作过程。

  1. 一、MYYCMS站群服务器环境
  2. 二、核心结论
  3. 三、宝塔面板相关数据恢复
  4. 1. 宝塔站点配置目录
  5. 2. 宝塔面板数据库
  6. 3. 修改宝塔保存的 MySQL root 密码
  7. 四、Redis 数据恢复与排查
  8. 1. Redis 数据位置
  9. 2. 恢复 Redis 数据
  10. 3. 判断 Redis 是否恢复成功
  11. 4. Redis LOADING 报错说明
  12. 五、文章详情页 500 排查经验
  13. 1. 现象
  14. 2. 检查模型类是否存在
  15. 3. 查看 Laravel 日志
  16. 六、MySQL 数据库恢复重点
  17. 1. MySQL 8 不能只复制业务库目录
  18. 2. 正确做法:完整恢复整个 data 目录
  19. 3. 安装 rsync
  20. 4. 完整恢复 /www/server/data
  21. 5. 典型错误:redo 文件混用
  22. 七、MySQL root 密码重置
  23. 1. 为什么恢复后 root 密码又不对?
  24. 2. 停止残留 MySQL 进程
  25. 3. 用 skip-grant-tables 启动
  26. 4. 修改 root 密码
  27. 5. 关闭临时 MySQL,正常启动
  28. 八、宝塔面板同步 MySQL root 密码
  29. 九、站点数据库用户修复
  30. 十、Laravel / MYYCMS 缓存清理
  31. 十一、批量检查命令
  32. 1. 查所有站点 .env 数据库配置
  33. 2. 查 MySQL 用户
  34. 3. 查 MySQL 数据目录
  35. 4. 查业务库是否识别
  36. 5. 查 Redis DB1
  37. 6. 查 Laravel 错误日志
  38. 十二、完整恢复流程总结
  39. 阶段 1:恢复网站和宝塔站点记录
  40. 阶段 2:恢复 Redis
  41. 阶段 3:恢复 MySQL 数据
  42. 阶段 4:重置 MySQL root 密码
  43. 阶段 5:同步宝塔面板 root 密码
  44. 阶段 6:修复站点数据库用户和 Laravel 缓存
  45. 十三、重要注意事项
  46. 1. 不要混合新旧 MySQL 数据目录文件
  47. 2. 不要直接以 root 用户运行 mysqld
  48. 3. 修改 .env 后必须清理 Laravel 配置缓存
  49. 4. 宝塔保存的 root 密码和 MySQL 实际 root 密码要一致
  50. 5. 敏感信息泄露后要更换
  51. 十四、最终验证清单
  52. 十五、一句话总结

一、MYYCMS站群服务器环境

本次恢复环境:

系统:Debian 12
Web:Nginx 1.30
PHP:PHP 8.2
数据库:MySQL 8.0.45
Redis:Redis 7.4.7
面板:宝塔 V11.7
站点数量:约 2500 个
数据库目录:/www/server/data
Redis 目录:/www/server/redis
宝塔面板目录:/www/server/panel
网站目录:/www/wwwroot
旧硬盘挂载目录:/old

本次故障背景:

服务器硬盘损坏,更换新硬盘并重新安装系统与宝塔环境;
旧硬盘挂载到新系统;
需要恢复 MYYCMS 站群网站、MySQL 数据库、Redis 数据、宝塔面板站点记录。

二、核心结论

这次最关键的经验有 5 条:

1. 宝塔面板的网站列表、数据库列表,不是单纯扫描 Nginx 配置和 MySQL 文件生成的;
   宝塔自己还有 SQLite 面板数据库,宝塔面板网站、数据库相关信息存放数据库文件位置 /www/server/panel/data/default.db。

2. Redis 的 dump.rdb / AOF 恢复后,只要 Redis 能 PING、DBSIZE 正常,说明 Redis 本身基本没问题。

3. MySQL 8 不能只复制单个业务库目录或 .ibd 文件。
   必须尽量完整恢复整个 /www/server/data 目录。

4. MySQL 8 的库表元数据主要在数据字典里,不是只靠数据库目录和 .ibd 文件识别。
   MySQL 8 已移除旧式 .frm 文件元数据,相关元数据存入数据字典表中。:contentReference[oaicite:0]{index=0}

5. 完整恢复旧 /www/server/data 后,MySQL root 密码也会恢复成旧硬盘里的密码;
   如果忘记旧密码,需要用 --skip-grant-tables 重置 root 密码。

三、宝塔面板相关数据恢复

1. 宝塔站点配置目录

Nginx 站点配置:

/www/server/panel/vhost/nginx/

SSL 证书目录:

/www/server/panel/vhost/cert/

恢复示例:

rsync -a /old/server/panel/vhost/nginx/ /www/server/panel/vhost/nginx/
rsync -a /old/server/panel/vhost/cert/ /www/server/panel/vhost/cert/

如果没有 rsync:

cp -a /old/server/panel/vhost/nginx/. /www/server/panel/vhost/nginx/
cp -a /old/server/panel/vhost/cert/. /www/server/panel/vhost/cert/

2. 宝塔面板数据库

恢复好数据库文件之后,无法同步数据库,会提示错误

恢复好数据库文件之后,无法同步数据库,会提示错误

宝塔面板自己的数据库一般在:

/www/server/panel/data/default.db

里面包含:

sites      网站列表
databases  数据库列表
config     面板配置,包括 mysql_root
users      面板用户
crontab    计划任务
ftps       FTP 信息
logs       面板日志

查看表:

sqlite3 /www/server/panel/data/default.db ".tables"

查看 config 表结构:

sqlite3 /www/server/panel/data/default.db "PRAGMA table_info(config);"

查看宝塔保存的 MySQL root 密码:

sqlite3 /www/server/panel/data/default.db "SELECT id,mysql_root FROM config;"

如果显示:

1|admin

含义不是用户名是 admin,而是:

宝塔面板当前保存的 MySQL root 密码 = admin

如果 SSH 中实际 MySQL root 密码已经不是 admin,宝塔面板同步数据库就会提示密码错误。

3. 修改宝塔保存的 MySQL root 密码

image-20260527162602145

先备份:

cp -a /www/server/panel/data/default.db /www/server/panel/data/default.db.bak.$(date +%F-%H%M%S)

tar -czf /root/bt-panel-data-backup-$(date +%F-%H%M%S).tar.gz /www/server/panel/data

修改:

sqlite3 /www/server/panel/data/default.db "UPDATE config SET mysql_root='你的真实root密码' WHERE id=1;"

确认:

sqlite3 /www/server/panel/data/default.db "SELECT id,mysql_root FROM config;"

重启宝塔:

bt restart

然后再进入:

宝塔面板 → 数据库 → MySQL → 同步数据库

四、Redis 数据恢复与排查

1. Redis 数据位置

宝塔 Redis 常见目录:

/www/server/redis

查看 Redis 持久化配置:

grep -E "^(dir|dbfilename|appendonly|appendfilename|appenddirname)" /www/server/redis/redis.conf

宝塔面板 Redis 持久化配置

常见配置:

dir /www/server/redis
dbfilename dump.rdb
appendonly no

如果启用了 AOF,可能还有:

/www/server/redis/appendonlydir/

2. 恢复 Redis 数据

停止 Redis:

systemctl stop redis

复制旧数据:

rsync -a /old/server/redis/ /www/server/redis/

没有 rsync 时:

cp -a /old/server/redis/. /www/server/redis/

修复权限:

chown -R root:root /www/server/redis

启动:

systemctl start redis

3. 判断 Redis 是否恢复成功

测试:

redis-cli PING

正常返回:

PONG

检查 DB1:

redis-cli -n 1 DBSIZE

本次恢复后结果类似:

(integer) 346390

扫描 key:

redis-cli -n 1 --scan | head -n 20

本次 MYYCMS / Laravel key 格式类似:

laravel_database_seo.bj:article_with_menu_75
laravel_database_xxx.com:category_3_limit_10

4. Redis LOADING 报错说明

如果刚执行:

systemctl restart redis
redis-cli -n 1 DBSIZE

马上出现:

(error) LOADING Redis is loading the dataset in memory

这不一定是故障。说明 Redis 正在把 RDB/AOF 加载进内存。

本次日志显示:

Loading RDB produced by version 7.4.7
RDB memory usage when created 4293.41 Mb
Done loading RDB, keys loaded: 346390
DB loaded from disk: 13.833 seconds
Ready to accept connections tcp

说明 Redis 大概 14 秒加载完成。不要反复重启 Redis。

五、文章详情页 500 排查经验

1. 现象

本次测试站点:

https://www.seo.bj/

现象:

首页正常
列表页正常
文章详情页 500
案例详情页 500

Redis 中对应文章 key 存在:

redis-cli -n 1 EXISTS "laravel_database_seo.bj:article_with_menu_75"
redis-cli -n 1 TYPE "laravel_database_seo.bj:article_with_menu_75"
redis-cli -n 1 TTL "laravel_database_seo.bj:article_with_menu_75"

返回:

(integer) 1
string
(integer) -1

读取文章内容:

redis-cli -n 1 GET "laravel_database_seo.bj:article_with_menu_75" | head -c 1000

内容开头:

O:24:"App\Models\SpiderArticle":30:{...}

说明 Redis 里存的是 PHP serialize 后的 Laravel Eloquent 模型对象。

2. 检查模型类是否存在

进入站点目录:

cd /www/wwwroot/seo.bj

测试 autoload:

/www/server/php/82/bin/php -r "require 'vendor/autoload.php'; var_dump(class_exists('App\\Models\\SpiderArticle'));"

正常返回:

bool(true)

如果在错误目录执行,比如 /www/wwwlogs/free_waf_log,会报:

require(vendor/autoload.php): Failed to open stream

所以必须进入 Laravel 项目根目录执行。

3. 查看 Laravel 日志

真正的错误不在 Nginx access log,而在:

/www/wwwroot/seo.bj/storage/logs/laravel.log

查看:

cd /www/wwwroot/seo.bj
tail -n 200 storage/logs/laravel.log

本次关键错误:

SQLSTATE[HY000] [1045] Access denied for user 'z0eeg4mt05q38888'@'localhost' (using password: YES)
SQL: select `categoryid`, `id`, `viewcount` from `spider_article` where `spider_article`.`id` = 74 limit 1

结论:

Redis 没问题;
文章详情页读取 Redis 后,还会查询 MySQL 的 spider_article 表;
MySQL 用户或数据库权限异常,导致详情页 500。

六、MySQL 数据库恢复重点

1. MySQL 8 不能只复制业务库目录

错误做法:

cp -rf /old/server/data/z0eeg4mt05q38888 /www/server/data/
cp -rf /old/server/data/undo_001 /www/server/data/
cp -rf /old/server/data/undo_002 /www/server/data/

这种方式会导致:

SHOW DATABASES 看不到业务库;
宝塔同步数据库显示 0 个数据库;
甚至 MySQL 无法启动。

原因:

MySQL 8 的数据库、表、表空间信息依赖数据字典;
只复制业务库目录和 .ibd 文件,MySQL 不一定识别。

MySQL 8 移除了 .frm 等文件式元数据,表结构等信息改由数据字典表保存。

2. 正确做法:完整恢复整个 data 目录

旧目录:

/old/server/data

新目录:

/www/server/data

旧目录应包含:

auto.cnf
ibdata1
#innodb_redo/
#innodb_temp/
mysql/
mysql.ibd
undo_001
undo_002
大量业务库目录

检查:

ls -lah /old/server/data | egrep "mysql$|mysql.ibd|ibdata1|#innodb_redo|#innodb_temp|undo_001|undo_002|auto.cnf"

本次确认旧数据目录完整:

auto.cnf
ibdata1
#innodb_redo
#innodb_temp
mysql
mysql.ibd
undo_001
undo_002

MySQL 8 的 redo log 默认位于数据目录下的 #innodb_redo 目录中,不能混用不同数据目录的 redo 文件。(dev.mysql.com)

3. 安装 rsync

新系统如果没有 rsync,会报:

-bash: rsync: command not found

安装:

apt update
apt install -y rsync

Debian 12 官方源提供 rsync 包,适合本地和远程文件复制、备份和镜像同步。(packages.debian.org)

4. 完整恢复 /www/server/data

停止 MySQL:

systemctl stop mysqld
pkill -f mysqld_safe
pkill -f "/www/server/mysql/bin/mysqld"

确认没有进程:

ps aux | grep mysqld | grep -v grep

备份当前坏目录:

mv /www/server/data /www/server/data.mixed-broken.$(date +%F-%H%M%S)
mkdir -p /www/server/data

完整同步旧目录:

rsync -aH --numeric-ids --delete /old/server/data/ /www/server/data/

如果没有 rsync,可用:

cp -a /old/server/data/. /www/server/data/

修复权限:

chown -R mysql:mysql /www/server/data
find /www/server/data -type d -exec chmod 750 {} \;
find /www/server/data -type f -exec chmod 640 {} \;

清理运行时文件:

rm -f /www/server/data/*.pid
rm -f /www/server/data/*.sock
rm -f /www/server/data/*.sock.lock

启动 MySQL:

systemctl start mysqld

查看状态:

systemctl status mysqld --no-pager -l

5. 典型错误:redo 文件混用

本次曾出现错误:

The redo log file /www/server/data/#innodb_redo/#ib_redo179 comes from other data directory than redo log file /www/server/data/#innodb_redo/#ib_redo0.
Plugin initialization aborted
Failed to initialize DD Storage Engine
Data Dictionary initialization failed

原因:

/www/server/data 中混入了新 MySQL 初始化的 redo 文件和旧硬盘复制过来的 redo 文件;
数据字典、redo、undo、表空间不属于同一套实例。

解决:

不要单独复制 undo 或某些数据库目录;
直接备份当前 /www/server/data;
完整同步 /old/server/data 到 /www/server/data。

七、MySQL root 密码重置

1. 为什么恢复后 root 密码又不对?

完整恢复旧 /www/server/data 后,mysql 系统库也恢复了。

所以:

MySQL 用户表恢复成旧硬盘状态;
root 密码也恢复成旧服务器上的密码;
SSH 和宝塔面板原来保存的新密码都会失效。

这属于正常现象。

2. 停止残留 MySQL 进程

有时候:

systemctl stop mysqld

不能完全停止进程。

检查:

ps aux | grep mysqld | grep -v grep

如果看到:

mysqld_safe
mysqld

先温和停止:

kill mysqld的PID
kill mysqld_safe的PID
sleep 5

如果仍存在:

kill -9 mysqld的PID
kill -9 mysqld_safe的PID

确认:

ps aux | grep mysqld | grep -v grep

必须没有输出。

3. 用 skip-grant-tables 启动

不要直接执行:

/www/server/mysql/bin/mysqld

直接以 root 执行会报:

Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

MySQL 官方不建议用 Unix root 用户运行 mysqld,应使用普通用户,例如 mysql 用户。(dev.mysql.com)

正确方式:

/www/server/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking --user=mysql &

等待:

sleep 10

登录:

mysql -uroot

注意这里不加 -p。

MySQL 官方说明,重置 root 密码可以先停止 MySQL,然后用 --skip-grant-tables 启动,使本地可以无密码连接,完成后再恢复正常启动。

4. 修改 root 密码

进入 MySQL 后:

FLUSH PRIVILEGES;
SELECT user, host, plugin FROM mysql.user WHERE user='root';

修改 root 密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新root密码';
FLUSH PRIVILEGES;
exit;

如果存在 [email protected],也可以一起修改:

ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的新root密码';
FLUSH PRIVILEGES;

5. 关闭临时 MySQL,正常启动

关闭临时实例:

/www/server/mysql/bin/mysqladmin -uroot -p shutdown

输入新 root 密码。

如果失败,手动 kill 残留进程:

ps aux | grep mysqld | grep -v grep
kill mysqld的PID
kill mysqld_safe的PID

正常启动:

systemctl start mysqld

测试:

mysql -uroot -p -e "SHOW DATABASES;" | head -n 50

如果能看到业务库,说明恢复成功。

八、宝塔面板同步 MySQL root 密码

MySQL root 修改后,还要修改宝塔面板保存的 root 密码。

查看:

sqlite3 /www/server/panel/data/default.db "SELECT id,mysql_root FROM config;"

修改:

sqlite3 /www/server/panel/data/default.db "UPDATE config SET mysql_root='你的新root密码' WHERE id=1;"

重启宝塔:

bt restart

然后宝塔面板执行:

数据库 → MySQL → 同步数据库

九、站点数据库用户修复

如果某个站点 .env 是:

DB_HOST=127.0.0.1
DB_DATABASE=z0eeg4mt05q3ofof
DB_USERNAME=z0eeg4mt05q3ofof
DB_PASSWORD=站点数据库密码

但是 Laravel 日志报:

SQLSTATE[HY000] [1045] Access denied for user 'z0eeg4mt05q38888'@'localhost'

用 root 登录 MySQL 后执行:

CREATE USER IF NOT EXISTS 'z0eeg4mt05q38888'@'localhost' IDENTIFIED BY '站点数据库密码';
ALTER USER 'z0eeg4mt05q38888'@'localhost' IDENTIFIED BY '站点数据库密码';
GRANT ALL PRIVILEGES ON `z0eeg4mt05q38888`.* TO 'z0eeg4mt05q38888'@'localhost';

CREATE USER IF NOT EXISTS 'z0eeg4mt05q38888'@'127.0.0.1' IDENTIFIED BY '站点数据库密码';
ALTER USER 'z0eeg4mt05q38888'@'127.0.0.1' IDENTIFIED BY '站点数据库密码';
GRANT ALL PRIVILEGES ON `z0eeg4mt05q3ofof`.* TO 'z0eeg4mt05q38888'@'127.0.0.1';

FLUSH PRIVILEGES;

测试:

mysql -uz0eeg4mt05q38888 -p -h127.0.0.1 z0eeg4mt05q38888

查询表:

SELECT id, categoryid, viewcount FROM spider_article WHERE id=74 LIMIT 1;

十、Laravel / MYYCMS 缓存清理

数据库权限修复后,进入站点目录:

cd /www/wwwroot/seo.bj

清理缓存:

/www/server/php/82/bin/php artisan config:clear
/www/server/php/82/bin/php artisan cache:clear
/www/server/php/82/bin/php artisan route:clear
/www/server/php/82/bin/php artisan view:clear

重启 PHP-FPM:

/etc/init.d/php-fpm-82 restart

然后访问:

https://www.seo.bj/news/75.html

SEO笔记 - SEO技术方案与优化案例分享 | www.seo.bj
SEO笔记专注分享SEO技术方案、案例分析、SEO工具与资源,涵盖域名、服务器、CMS程序等,助力网站优化与流量提升。

十一、批量检查命令

1. 查所有站点 .env 数据库配置

find /www/wwwroot -name ".env" -type f -print0 | xargs -0 grep -H "DB_DATABASE="
find /www/wwwroot -name ".env" -type f -print0 | xargs -0 grep -H "DB_USERNAME="
find /www/wwwroot -name ".env" -type f -print0 | xargs -0 grep -H "DB_PASSWORD="

2. 查 MySQL 用户

SELECT user, host FROM mysql.user ORDER BY user, host;

3. 查 MySQL 数据目录

mysql -uroot -p -e "SHOW VARIABLES LIKE 'datadir';"

4. 查业务库是否识别

mysql -uroot -p -e "SHOW DATABASES;" | head -n 100

5. 查 Redis DB1

redis-cli PING
redis-cli -n 1 DBSIZE
redis-cli -n 1 --scan | head -n 20

6. 查 Laravel 错误日志

tail -n 200 /www/wwwroot/站点目录/storage/logs/laravel.log

或者:

grep -R "SQLSTATE\|RedisException\|Fatal error\|Uncaught\|Access denied\|Class .* not found" /www/wwwroot/ /www/wwwlogs/ -n | tail -n 100

十二、完整恢复流程总结

阶段 1:恢复网站和宝塔站点记录

rsync -a /old/server/panel/vhost/ /www/server/panel/vhost/
rsync -a /old/wwwroot/ /www/wwwroot/
chown -R www:www /www/wwwroot
bt restart

如果旧路径是 /old/www/wwwroot:

rsync -a /old/www/wwwroot/ /www/wwwroot/

阶段 2:恢复 Redis

systemctl stop redis
rsync -a /old/server/redis/ /www/server/redis/
systemctl start redis

redis-cli PING
redis-cli -n 1 DBSIZE

阶段 3:恢复 MySQL 数据

systemctl stop mysqld
pkill -f mysqld_safe
pkill -f "/www/server/mysql/bin/mysqld"

mv /www/server/data /www/server/data.bak.$(date +%F-%H%M%S)
mkdir -p /www/server/data

rsync -aH --numeric-ids --delete /old/server/data/ /www/server/data/

chown -R mysql:mysql /www/server/data
find /www/server/data -type d -exec chmod 750 {} \;
find /www/server/data -type f -exec chmod 640 {} \;

rm -f /www/server/data/*.pid
rm -f /www/server/data/*.sock
rm -f /www/server/data/*.sock.lock

systemctl start mysqld

阶段 4:重置 MySQL root 密码

systemctl stop mysqld
pkill -f mysqld_safe
pkill -f "/www/server/mysql/bin/mysqld"

ps aux | grep mysqld | grep -v grep

如果还有残留 PID:

kill -9 PID

跳过权限表启动:

/www/server/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking --user=mysql &
sleep 10
mysql -uroot

SQL:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新root密码';
FLUSH PRIVILEGES;
exit;

关闭临时实例:

/www/server/mysql/bin/mysqladmin -uroot -p shutdown

正常启动:

systemctl start mysqld

测试:

mysql -uroot -p -e "SHOW DATABASES;" | head -n 50

阶段 5:同步宝塔面板 root 密码

sqlite3 /www/server/panel/data/default.db "UPDATE config SET mysql_root='你的新root密码' WHERE id=1;"
bt restart

然后宝塔面板:

数据库 → MySQL → 同步数据库

阶段 6:修复站点数据库用户和 Laravel 缓存

CREATE USER IF NOT EXISTS '站点数据库用户'@'localhost' IDENTIFIED BY '站点数据库密码';
ALTER USER '站点数据库用户'@'localhost' IDENTIFIED BY '站点数据库密码';
GRANT ALL PRIVILEGES ON `站点数据库名`.* TO '站点数据库用户'@'localhost';

CREATE USER IF NOT EXISTS '站点数据库用户'@'127.0.0.1' IDENTIFIED BY '站点数据库密码';
ALTER USER '站点数据库用户'@'127.0.0.1' IDENTIFIED BY '站点数据库密码';
GRANT ALL PRIVILEGES ON `站点数据库名`.* TO '站点数据库用户'@'127.0.0.1';

FLUSH PRIVILEGES;

清理站点缓存:

cd /www/wwwroot/站点目录

/www/server/php/82/bin/php artisan config:clear
/www/server/php/82/bin/php artisan cache:clear
/www/server/php/82/bin/php artisan route:clear
/www/server/php/82/bin/php artisan view:clear

/etc/init.d/php-fpm-82 restart

十三、重要注意事项

1. 不要混合新旧 MySQL 数据目录文件

危险操作:

cp -rf undo_001 undo_002 /www/server/data/
cp -rf 某个业务库目录 /www/server/data/
cp -rf 某些 .ibd 文件 /www/server/data/

可能导致:

redo log file comes from other data directory
Failed to initialize DD Storage Engine
Data Dictionary initialization failed

正确方式:

完整恢复同一套 /www/server/data

2. 不要直接以 root 用户运行 mysqld

错误:

/www/server/mysql/bin/mysqld

可能报:

Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

正确:

/www/server/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &

或:

systemctl start mysqld

3. 修改 .env 后必须清理 Laravel 配置缓存

php artisan config:clear

否则 Laravel 可能继续使用旧配置。

4. 宝塔保存的 root 密码和 MySQL 实际 root 密码要一致

MySQL root 修改后,还要同步:

sqlite3 /www/server/panel/data/default.db "UPDATE config SET mysql_root='真实root密码' WHERE id=1;"
bt restart

5. 敏感信息泄露后要更换

这次排查中曾暴露:

数据库密码
Telegram Bot Token

恢复后建议:

1. 修改数据库用户密码;
2. 更新站点 .env;
3. php artisan config:clear;
4. 重启 PHP-FPM;
5. 到 BotFather 重置 Telegram Bot Token。

十四、最终验证清单

恢复完成后逐项检查:

systemctl status mysqld --no-pager -l
systemctl status redis --no-pager
systemctl status nginx --no-pager

MySQL:

mysql -uroot -p -e "SHOW DATABASES;" | head -n 50

Redis:

redis-cli PING
redis-cli -n 1 DBSIZE

宝塔:

数据库 → MySQL → 当前状态
数据库 → MySQL → 同步数据库
网站 → 站点列表

站点:

首页 200
列表页 200
文章详情页 200
案例详情页 200

Laravel 日志:

tail -n 100 /www/wwwroot/站点目录/storage/logs/laravel.log

Nginx 错误日志:

tail -n 100 /www/wwwlogs/站点域名.error.log

十五、一句话总结

这次 MYYCMS 站群系统恢复的关键不是单独恢复某个数据库文件,而是:

完整恢复宝塔面板数据 + 完整恢复 MySQL /www/server/data + 恢复 Redis 数据 + 重置 MySQL root 密码 + 同步宝塔 mysql_root + 修复站点数据库用户权限。

尤其是 MySQL 8,必须把:

mysql/
mysql.ibd
ibdata1
#innodb_redo/
#innodb_temp/
undo_001
undo_002
业务库目录

作为一整套数据目录恢复,不能拆开复制。

 


【SEO业务合作】=》面向成长型与成熟品牌,提供全职SEO与兼职SEO灵活配置,支持远程办公,高效衔接内容、技术与外链;配套SEO经费支持,以可量化目标推进,表现优秀享提成奖金与长期激励。我们聚焦关键词策略、站点结构优化、内容集群、外链生态与转化提升,覆盖站内外全流程与数据跟踪,兼顾中文搜索场景与国际引擎需求,适配电商、资讯、SaaS与本地服务等多类型网站。欢迎企业、团队与个人洽谈SEO业务合作,打造稳健、可持续的自然流量增长路径。点击查看详细合作说明
CMS程序

评论

标题和URL已复制