问题
帮朋友安装typecho博客,环境是CentOS7、Nginx1.17、php5、mysql5.7。typecho安装过程中出现如下问题:
对不起,无法连接数据库,请先检查数据库配置再继续进行安装
由于typecho不打印详细的php报错,所以同样是“无法连接数据库”,原因却千差万别。因此在这里整理一下排错步骤,方便遇到同样问题的同学,找到自己出问题的原因。
排错步骤
1.确认是否是 数据库信息填写错误
最容易想到的报错原因,就是在install界面填写的数据库配置信息不对。检查一下,在typecho安装页面,填写的数据库名称、数据库用户名、数据库用户密码是否正确;
2.确认是否是 数据库服务存在问题
如果信息正确,那么考虑是否是mysql的服务的问题,比如,数据库服务没有运行、你自定义的数据库端口和填写不一致等等。运行下列命令:
netstat -utnlp | grep mysql
2.1如果命令运行有结果,显示的端口号和你在typecho安装页面填写的端口一致,说明mysql服务运行和监听是正常的。
2.2如果没有结果,是mysql服务没有启动,或者防火墙禁掉了mysql的运行端口。
关掉防火墙,然后用你安装mysql的那个linux系统用户启动一下mysql服务。
…/support-files/mysql.server start
…是你安装mysql时配置的mysql根目录(basedir),一般是/usr/local/mysql或者/etc/mysql。
2.3如果有结果,但显示的端口号,和你在typecho安装页面填写的端口不一致,说明你端口号填错了,请以这个命令运行结果中显示的端口为准。
3.确认是否是 数据库实例/数据库用户存在问题
如果数据库服务正常,再考虑是不是数据库实例出了问题,比如忘了创建数据库实例、填写的数据库用户权限不足等等。
如果忘了创建数据库实例(就是你填写的数据库名其实并不存在),那就创建一下,并且保障你填的那个数据库用户,的确有你填的那个数据库的完全权限。下面是创建数据库实例、创建数据库用户、赋予权限的命令。
假设,你在typecho安装页填的数据库名是AAA,数据库用户名是BBB,密码是CCC:
//linux系统命令,进入mysql:
mysql -u root -p
//sql命令,创建一个新数据库AAA;
create database if not exists AAA default charset utf8 collate utf8_general_ci;
// sql命令,创建一个 新用户BBB,密码是CCC:
create user ‘BBB’@’%’ identified by ‘CCC’;
//sql命令,数据库AAA的权限全部向BBB开放:
grant all on AAA.* to ‘BBB@’%’;
//sql命令,刷新权限
flush privileges;
4.确认是否是 php-fpm和数据库的连接存在问题
如果数据库确确实实建好了、数据库用户也分配好了权限、mysql服务也正常启动、端口也没毛病,还是连接不上数据库,可能是php.ini配置的问题。php-fpm默认使用socket连接数据库,而socket文件(mysql.sock)的位置是从php.ini文件中读取的。但mysql.sock文件的实际位置,是mysql配置决定的,所以php.ini默认的socket位置可能不对,导致找不到socket、连接不上。
这个有解决两个办法:
4.1.直接把typecho安装页面中,数据库地址 “localhost” 改为 “127.0.0.1” 。
这就相当于不用socket连接而用TCP/IP连接。这一方法mysql可能也需要调整一下,让mysql以tcp/ip的方式监听你指定的那个端口(一般是3306)。这一方案我没有测试。
4.2.修改php.ini文件,指向正确的mysql.sock位置。
首先看看你的mysql.sock文件在哪,可以用find命令查,也可以查看mysql的配置文件my.cnf(一般在目录/etc下面)中socket字段是怎么写的。假设,你查到mysql.sock的位置是/ABC/mysql.sock,那么你应该修改php.ini文件,使它指向正确的mysql.sock位置。vim php.ini,找到mysql.default_socket这一字段,取消它的注释,并改为
mysql.default_socket = /ABC/mysql.sock
如果你也不知道php.ini文件在哪,可以find / -name ‘php.ini’。
当然,在typecho安装界面,解释器选择mysql原生,才需要修改php.ini的mysql.default_socket字段,如果解释器选择pdo,那需要修改的字段就变成php.ini文件中pdo对应的socket字段了。
以上就是我想到的可能导致 “对不起,无法连接数据库,请先检查数据库配置再继续进行安装 ” 的所有可能的原因了。
顺便提一下安装时可能出现的另一种问题:安装typecho后立即进入nginx未知报错页面。这有可能是Nginx配置文件里,location后面的(或者fastcgi_split_path_info后面的)正则表达式没写对,导致path_info不能正确传递到fastcgi,百度一下正确的写法吧~(说这段是因为我自己就粗心写错了哈哈哈)




