技术分享 MySQL 启动失败的常见原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术分享 MySQL 启动失败的常见原因相关的知识,希望对你有一定的参考价值。

参考技术A mysql 启动失败的最常见的原因有两类,分别是无法访问系统资源和参数设置错误造成的,下面分别分析如下。

MySQL 不能访问启动需要的资源是造成而 MySQL 无法启动的一个常见原因,如:文件,端口等。由于 linux 中用于启动 mysqld 进程的 mysql 用户通常是不能登陆的,可以使用类似下面的命令检查文件的访问权限。

找出问题后,修改对应文件或目录的权限或属主后通常可以解决问题。但有时 mysql 用户有访问文件和目录的权限,但仍然会被拒绝访问,例如下面这个例子:

测试说明 mysql 用户有这个目录的访问权限,但创建文件还是失败,这种情况让很多人困惑,这个时候通常是 mysqld 进程的访问被 linux 的 selinux 或 apparmor 给阻止了,大家可以看到创建的表不是在 mysql 的默认目录下面,因此 selinux 或 apparmor 的 policy 里面没有包含这个目录的访问权限,此时只要对应的修改 policy 就行了,当然把 selinux 或 apparmor 停了也行。

有时虽然对系统资源有访问的权限,但系统资源已经被占用:

这个故障产生的原因是另外一个 mysqld 进程已经启动并占用了对应的文件。

参数设置错误造成 MySQL 无法启动的原因也非常常见,此时先要检查 MySQL 启动时会调用的参数,下面的命令可以查询 MySQL 启动时调用参数文件的顺序:

知道了 MySQL 参数文件的调用顺序,我们就可以检查对应的参数文件,找出其中的错误,如果觉得参数文件的可读性不强,可以使用下面的命令显示 mysqld 程序将要调用的参数:

注意这个命令显示完参数后就退出,不会真正运行 mysqld。这个命令和 my_print_defaults mysqld 完全是等价的,只不过后者的显示方式是一行一个参数。

然后开始对可疑的参数进行调试,我个人喜欢加的参数和顺序如下:

看这个例子:

看这个例子,我们很容易知道是需要我们同时设置参数 GTID_MODE 和 ENFORCE_GTID_CONSISTENCY 同时为 on 才行。

CentOS6.9-zabbix3.2启动失败原因及页面没有mysql选择项

 环境内核信息:
[[email protected]01 ~]# uname -a

Linux lodboyedu-01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
zabbix启动失败的原因
启动时出这 个错误:
[[email protected] zabbix-3.2.7]# /etc/init.d/zabbix_server start
/usr/local/sbin/zabbix_server not installed!  
解决方案:
1. 首先复制的启动脚本是core目录下的,并不是core5下面的
[[email protected] zabbix-3.2.7]# \cp /server/tools/zabbix-3.2.7/misc/init.d/fedora/core/* /etc/init.d/
2. 复制过来之后,修改启动脚本中的目录信息
[[email protected] zabbix-3.2.7]# vim /etc/init.d/zabbix_server       zabbix_agentd也要这样改,两个文件一样     
BASEDIR=/usr/local/zabbix    ----根据个人情况来改,zabbix软件路径
启动
[[email protected] zabbix-3.2.7]# /etc/init.d/zabbix_server start
Starting zabbix_server:                                    [  OK  ]
[[email protected] zabbix-3.2.7]# /etc/init.d/zabbix_agentd start
Starting zabbix_agentd:                                    [  OK  ]

zabbix页面没有mysql选择项

php编译中少了参数
/application/php-5.5.32/bin/php -i |grep configure ----- 查看历史的编译记录
[[email protected] php-5.5.32]# ./configure -h |grep mysql  ----查看帮助
--with-mysql=DIR Include MySQL support. DIR is the MySQL base
mysqlnd the MySQL native driver will be used

--with-mysql-sock=SOCKPATH
--with-mysqli=FILE Include MySQLi support. FILE is the path
to mysql_config. If no value or mysqlnd is passed

--enable-embedded-mysqli
--with-pdo-mysql=DIR PDO: MySQL support. DIR is the MySQL base directory
If no value or mysqlnd is passed as DIR, the
--enable-mysqlnd Enable mysqlnd explicitly, will be done implicitly
--disable-mysqlnd-compression-support
Disable support for the MySQL compressed protocol in mysqlnd
--with-zlib-dir=DIR mysqlnd: Set the path to libz install prefix
连接不到mysql数据库的原因:
缺少 --with-mysqli=mysqlnd 模块参数

解决方案:

添加该编译参数

/server/tools/php-5.5.32/ext/mysqli/目录下执行:
[[email protected] mysqli]# ./configure --with-mysqli=mysqlnd --with-php-config=/application/php-5.5.32/bin/php-config 
[[email protected] mysqli]# make && make install

编译完成后修改php.ini中的参数,没有这个参数就加上

[[email protected] php]# vim lib/php.ini
extension="mysqli.so"

然后到网页中强制刷新一下,就有选择mysql的一项了

 

以上是关于技术分享 MySQL 启动失败的常见原因的主要内容,如果未能解决你的问题,请参考以下文章

mysql启动错误

技术分享|手机取证之“MFSocket推送失败”解决方案

技术分享 MySQL:一文弄懂时区&time_zone

技术分享第30期:手机取证之“MFSocket安装失败”解决方案

技术分享 | 带你解决4个ROS开发常见的问题

mysql5.7.19版本的主从复制问题分享