Error establishing a database connection之php升级报错

       今天由于我要进行其他网站的配置我将云虚拟主机的php版本进行了升级 ,从php5.2 升级到php7.1

       等我再登陆我的个人WordPress网址时发现

Error establishing a database connection

        根据我多年的经验来说,这必然是个数据库问题(此处为废话,一看报错内容就知道)。接下来就开始了排雷之旅。

1.查看数据库主机的端口是否放行

        一般出现这种问题,首先要想到端口问题,如果端口没有打开,你肯定是没办法访问的。端口的设置各个服务器平台设置不一样,可以根据自己的服务器平台进行相关设置,问题解决即可。

       如果没有相关经验不知道怎么设置,你可以快速检验一下。使用服务器平台提供的数据库访问工具或者wdcp控制面板进行连接访问,如果能访问成功就说明端口没问题。PS:如果是云虚拟主机的话就不能用控制面板了,只能用供应商提供的访问工具。

      我用云服务器供应商提供的工具,输入数据库的host、username、password信息成功的访问到了数据库,很明显端口没问题,密码也没问题。

      我进行检查之后发现不是端口的问题,继续排雷…………

2.磁盘空间满了

        是的,你的vps磁盘空间满了,也会导致mysql服务启动不起来,这个时候需要清理一下你的vps硬盘。在wdcp里面你可以看到磁盘的数据使用量,用putty连接你的VPS也是可以查看的。这个问题以前我亲自遇到的。

        然而这次很明显不是这个原因。

3.WordPress配置没有更改

        前文有一点忘记说明,在升级php版本的时候,由于提示之前的mysql密码不安全,进行了修改,一想肯定是配置文件没改的缘故。

解决方法是配置wordpress目录下的wp-config.php文件。

       找到文件的位置下载下来打开。可以看到有以下几个参数DB_NAME、DB_USER、DB_PASSWORD、DB_HOST 

 

/** The name of the database for WordPress */
define('DB_NAME', 'yourdbname');

/** MySQL database username */
define('DB_USER', 'yourusername');

/** MySQL database password */
define('DB_PASSWORD', 'yourpassword');

/** MySQL hostname */
define('DB_HOST', 'yourhostname');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8mb4');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

       一检查果然是数据库密码没有改。欣喜地改了,再回到主页看看是否成功。(如果是这个的原因的话肯定会成功,一般到这里就会解决问题)

       wtf。。还是不行的。无论刷新多少遍还是不成功,悲哀的我继续排雷

4.终极策略-检查错误日志

      找到服务器或主机日志的位置,日志的位置可以自行百度。我的是云主机位置在wwwlog文件夹内,有一个error_log文件,记事本打开

        我找到日志之后发现没有相关的信息,无奈自己写了一个简单的检测数据库是否连接的代码,放到我的云主机进行测试,代码如下

<?php
$link = mysqli_connect("host", "username", "password","dbname");   //连接Mysql服务器

//$link = mysqli_connect("localhost", "root", "123456");
   if($link){
	   echo "数据库连接成功";
   }else
	   echo "数据库连接失败";
?>

       很明显我的网站测试结果,肯定是数据库连接失败。接着就去看错误日志,

       如果是一般情况下正常的连接数据库测试是不会出现错误日志的,连接失败也是因为数据库host。password、dbname或username其中的一项或多项填写错误,这就需要你多次检测填写的参数是否正确了。

       然而我的云主机出现的这个问题是有错误日志的,一般到这个阶段还没有解决问题的话,用这个代码测试,肯定是会出现错误日志的。日志的内容如下:

       PHP Warning:  mysqli_connect(): (HY000/2000): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file in /data/home/yourusername/htdocs/login.php on line 2

        看到这个提示,大家就有解决思路了吧。

        问题原因:使用高版本mysql数据库导入了低版本数据引起的,其中高版本数据库的password hashes 是41位的hashes,而低版本数据库的数据存储的root 的password是16位的hashes,需要修改user表的password字段数据为41为的hashes。

       我的云主机数据库升级,但是密码没有改成41位的哈希值,如果你使用的是阿里云的话可以直接更改,选择41位。

        
       其他的服务器的话,需要代码更改

use mysql;    // 进入存储user表的数据库
set session old_passwords=0;   //修改session使用41位hashes(16为1,41的为0)
select password('root');   //查看你的password函数是否可以生成41位的hashes
set password for 'root' @'localhost' = password('root');   //使用password函数修改你的root密码为41的hashes

        改完之后,重新刷新我的网站,可以正常使用了

       问题成功解决,以此文纪念。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋雨落花生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值