MySQL启动失败最常见的原因有两种,即无法访问系统资源和参数设置错误。下面分析如下。1、无法访问系统资源MySQL无法访问启动所需的资源是MySQL无法启动的常见原因,如:文件、端口等。由于linux中用于启动mysqld进程的mysql用户通常无法登录中,您可以使用类似于以下的命令来检查文件的访问权限。发现sudo-umysqltouch/var/lib/mysql/b的问题后,修改相应文件或目录的权限或属主,通常可以解决问题。但是有时候mysql用户有访问文件和目录的权限,但是访问还是被拒绝,比如下面这个例子:mysql>systemsudo-umysqltouch/home/mysql/data/amysql>createtablet1(idintprimarykey,nvarchar(10)datadirectoryERROR1030(HY000):Goterror168fromstorageengine测试发现mysql用户可以访问该目录,但是创建文件仍然失败,这种情况让很多人感到困惑,这时候mysqld进程的访问通常被linux的selinux或者apparmor阻塞了。可以看到创建的表不在mysql的默认目录下,所以selinux或者apparmor的policy是不包含这个目录的访问权限的,这时候相应的修改policy就可以了,当然可以了也可以停止selinux或apparmor。有时候虽然可以访问系统资源,但是系统资源已经被占用了:mysqld--no-defaults--console--usermysql2020-11-03T03:36:07.519419Z0[System][MY-010116][Server]/usr/sbin/mysqld(mysqld8.0.19)startingasprocess211712020-11-03T03:36:07.740347Z1[ERROR][MY-012574][InnoDB]Unabletolock./ibdata1error:11这个失败的原因是另一个mysqld进程启动了,相应文件被占用。2、参数设置错误由于参数设置错误导致MySQL无法启动的情况也很常见。这个时候先查看一下mysql启动时会调用的参数。下面的命令可以查询MySQL启动时调用参数文件的顺序:$mysqld--verbose--help|grep"Defaultoptions"-A1Defaultoptionsarereadfromthefollowingfilesinthegivenorder:/etc/my.cnf/etc/mysql/my.cnf~/.my。cnf知道了mysql参数文件的调用顺序,我们就可以查看对应的参数文件,发现如果觉得参数文件不可读,可以使用如下命令显示mysqld程序会调用的参数:$mysqld--print-defaults/usr/sbin/mysqld将使用以下参数启动:...注意此命令在显示参数后退出,而不实际运行mysqld。此命令完全等同于my_print_defaultsmysqld,只是后者每行显示一个参数。然后开始调试可疑参数。我个人喜欢添加的参数和顺序如下:1.在mysqld之后添加第一个参数--no-defaults。该参数的作用是通知mysqld不要读取任何Parameter文件;2.第二个参数是--console,这个参数会把错误信息输出到屏幕上,这个参数带来的一个缺点就是所有的信息都输出到屏幕上,让屏幕看起来很乱,但是对于来说很方便供我们调试;3、第三个参数--log-error-verbosity=3,这个参数会显示详细的日志;4.然后后面添加某些参数,可以只添加一次A参数,然后启动mysqld,使用排除法逐步找出错误的参数。看这个例子:mysqld--no-defaults--console--log-error-verbosity=3--usermysql--gtid_mode=on2020-11-03T07:14:20.384223Z0[Note][MY-010949][Server]Basedirsetto/usr/.2020-11-03T07:14:20.384254Z0[System][MY-010116][Server]/usr/sbin/mysqld(mysqld8.0.19)startingasprocess226172020-11-03T07:14:20.400221Z0[Note][MY-012366][InnoDB]UsingLinuxnativeAIO...2020-11-03T07:14:21.632851Z0[错误][MY-010912][服务器]GTID_MODE=ONrequiresENFORCE_GTID_CONSISTENCY=ON.2020-11-03T07:14:21.6][3411]MY-010119][Server]Aborting...2020-11-03T07:14:23.026551Z0[System][MY-010910][Server]/usr/sbin/mysqld:Shutdowncomplete(mysqld8.0.19)MySQLCommunityServer-GPL。root@scutech:~#看这个例子,我们很容易知道我们需要同时设置参数GTID_MODE和ENFORCE_GTID_CONSISTENCY为on。
