虚拟主机数据库无法启动_修复实操
很多站长遇到数据库无法启动就重装MySQL,数据全丢。数据库问题大多是配置或权限问题,先备份数据(mysqldump或复制data目录),再排查。重装只在数据文件严重损坏且无备份时考虑,且要先抢救数据。
连接配置:网站config文件填主机(localhost/127.0.0.1)、端口(3306)、库名、用户名、密码。localhost走socket,127.0.0.1走TCP,有时localhost连不上换127.0.0.1。远程连接:my.cnf bind-address=0.0.0.0、GRANT授权用户@%、防火墙放行3306。
参考(MySQL管理与密码重置): ``` # 服务管理 systemctl status mysqld systemctl start mysqld systemctl restart mysqld systemctl enable mysqld
# 连接测试 mysql -u用户名 -p密码 -e "SHOW DATABASES;" mysql -u用户名 -p密码 -h 127.0.0.1 -P 3306
# 备份 mysqldump -u用户名 -p密码 库名 > backup.sql mysqldump -u用户名 -p密码 库名 | gzip > backup.sql.gz
# 还原 mysql -u用户名 -p密码 库名 < backup.sql gunzip < backup.sql.gz | mysql -u用户名 -p密码 库名
# 错误日志 tail -50 /var/log/mysqld.log tail -50 /www/server/data/$(hostname).err
# 慢查询 mysql -u root -p -e "SHOW VARIABLES LIKE 'slow_query%';" mysql -u root -p -e "SHOW PROCESSLIST;"
# 重置root密码 systemctl stop mysqld mysqld_safe --skip-grant-tables --skip-networking & mysql -u root -e "USE mysql; UPDATE user SET authentication_string=PASSWORD('新密码') WHERE User='root'; FLUSH PRIVILEGES;" systemctl restart mysqld ```
MySQL安全:root只允许localhost;应用账号只给必要权限(SELECT/INSERT/UPDATE/DELETE),不给DROP/ALTER;定期备份;phpMyAdmin改路径 + IP白名单;3306不对外暴露(除非需要远程连接);开启审计日志;强密码。数据库被拖库是最严重的安全事故。
字符集问题:数据库、表、列、连接都用utf8mb4(支持emoji和所有中文)。my.cnf [mysqld] character-set-server=utf8mb4、[client] default-character-set=utf8mb4。连接SET NAMES utf8mb4。字符集不一致导致中文乱码、emoji存不进去、排序错误。迁移数据库时确认字符集一致。

更新时间:2026-08-27 12:06:12