暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

typecho无法连接数据库问题

原创 黄舒琪 2021-07-08
1895

问题

帮朋友安装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,百度一下正确的写法吧~(说这段是因为我自己就粗心写错了哈哈哈)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论