前言
前天搭建的博客网站,睡醒一觉起来网站挂逼了,其间无任何操作。主页都进不去,提示“MySQL数据库无法连接”,无论怎么刷新重启服务器都没用。
最终从中午1点搞到凌晨2点,皇天不负有心人终于解决了。其实问题很简单,只是没这方面的经验,走了很多弯路。我本人并不是搞WEB的,搞这个博客纯碎就是玩玩罢了。
处理这个问题的时候查了很久的资料,都是一些没太大意义的,无非就是让你改zb_user/c_option.php文件内的数据库相关信息,然根本就不是配置文件的问题。所以写下这篇博文记录一下,以防以后再出现这个问题,也给以后一些网友遇到此类问题提供一个参考。
解决思路
常见解决方式
zb_user/c_option.php配置有误
首先说一下zb_user/c_option.php文件部分参数的含义。ZC_DATABASE_TYPE 数据库类型
ZC_MYSQL_SERVER 数据库地址
ZC_MYSQL_USERNAME 数据库用户名
ZC_MYSQL_PASSWORD 数据库密码
ZC_MYSQL_NAME 数据库库名
ZC_MYSQL_CHARSET 字符编码格式
ZC_MYSQL_PRE 表前缀
ZC_MYSQL_PORT 数据库端口号
检查了老半天,我的配置也没有错,故排除配置文件的问题。
相关服务未启动
ZBlog依赖服务只有三个:MySQL、Apache和PHP。
运行如下命令,均显示 active (running) 运行中。
sudo systemctl status mysqld
sudo systemctl status httpd
sudo rpm -qa | grep php
另外该网站是在正常运行的状态下挂掉的。
综上所述排除了配置、依赖服务,考虑是否有可能是网站或系统环境问题?
查找问题根源
迁移网站
将云服务器上的网站和数据库均备份迁移到本地虚拟机中(云服务器和虚拟机均是Centos7系统)。
修改虚拟机网站zb_user/c_option.php配置文件参数,导入数据库脚本。
迁移完成,虚拟机浏览器中输入http://localhost/地址,可正常浏览,但进不了后台。OK先不管后台吧,进不了后台是因为备份迁移不对,正确的ZBlog网站备份和还原请浏览另一篇博文。
综上又排除了网站和数据问题,那么只剩下系统环境问题。ZBlog依赖系统环境只有三个:MySQL、Apache和PHP。
先从MySQL下手
SSH连接到云服务器,云服务器本地登录MySQL,没问题。对MySQL进行增删改查操作,也没问题。
本机远程连接MySQL,没问题。增删改查操作还是没问题。#本地连接MySQL
mysql -u root -p
#远程连接MySQL
mysql -h 123.123.123.123 -u root -p
OK,暂时先排除数据库问题。
Apache
浏览器可以访问网站,证明这个也是没有问题的。
PHP
嗯。。。这个怎么排查呢?先当它没问题好了。
对比各依赖环境版本
云服务器
MySQL:5.6
PHP:7.2
Apache:2.4
虚拟机
MySQL:5.7
PHP:7.0
Apache:2.4
嗯。。。MySQL和PHP的版本不一样,果断卸载重装一致的版本。然而问题还没解决。
确定问题
对比各依赖环境已安装的包sudo rpm -qa | grep php #查看PHP包列表
sudo rpm -qa | grep mysql #查看MySQL包列表
sudo rpm -qa | grep httpd #查看Apache包列表
对比发现云服务器的php包列表比虚拟机的PHP包列表少了几个包,将缺少的包装上。
OK了,网站正常访问了。
因此是少了某个PHP包导致无法连接数据库(为什么前一天又可以连接呢?左思右想不得而知)。
以下附上MySQL和PHP的卸载安装。
异常解决方法
卸载MySQL5.6卸载所有mysql包 sudo yum remove mysql*
查找所有mysql目录 sudo find / -name mysql
删除以上查找出来的目录sudo rm -rf /usr/share/mysql /var/lib/mysql
删除配置文件 sudo rm /etc/my.cnf
安装MySQL5.7下载PRM包wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
安装PRM包rpm -ivh mysql57-community-release-el7-11.noarch.rpm
安装mysql-community-serveryum install mysql-community-server
以不检查权限的方式启动mysqlmysqld --user=root --skip-grant-tables &
进入数据库mysql -u root
更新密码UPDATE mysql.user SET authentication_string=PASSWORD('替换为你的密码') where USER='root';
刷新 flush privileges;
设置远程登录 update mysql.user set host = ‘%’ where user = ‘root’;
提示ERROR 1820 (HY000) set password = password('替换为你的密码');
卸载PHP7.2卸载所有PHP包 sudo yum remove php72*
查找所有php相关目录 sudo find / -name php
删除所有PHP文件 sudo rm -rf /usr/lib64/php /usr/share/php /usr/bin/php /usr/lib/php
删除/etc/yum.repos.d目录下所有带php字样的文件
安装PHP7.0添加PHP70源
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
安装PHP70W和相关包sudo yum install php70w-common php70w-fpm php70w-opcache php70w-gd php70w-mysqlnd php70w-mbstring php70w-pecl-redis php70w-pecl-memcached php70w-devel php70w-xml
附上我的mysql和PHP包
【参考文档】