一键LNMP脚本安装后可能出现mysql无法启动处理
lnmp现在已经是标配了,不过这个东东手动部署的话还是有些麻烦的,配置文件太多,因此现在的方式很多是使用的一键脚本,这样会方便很多,不过相对的,如果有问题的话,排查起来也会稍显麻烦,比如最近就发现一个问题。
lnmp安装完成后,一切看来都很正常,很惬意,然后用apt-get安装freeradius,接着问题来了,mysql先是登录不了,无论是用phpmyadmin还是直接从终端用mysql -u root -p,都无法进入,然后重启mysql服务,问题来了,报错了,如图:
根据这个报错,我去提示的路径下找了,并没有这个pid文件,也就是没有生成,然后去看my.cnf文件,查看mysql的error日志在哪里,然后看日志,发现有这样的提示:
问了下度娘,说要重置一下mysql,
1 |
/usr/local/mysql/bin/mysql_install_db --user=mysql |
注意:/usr/local/mysql/bin/mysql_install_db –user=mysql相对于我来说,mysql_install_db文件在/usr/local/mysql/bin/下。
请使用find / -name mysql_install_db找出文件的路径。
1 |
find / -name mysql_install_db |
但是很有可能报错,找不到bin目录中的my_print_defaults
错误信息:
1 2 3 4 |
FATALERROR:Couldnotfind./bin/my_print_defaults If you are using a binary release, you must run this script from within the directory the archive extracted into. If you compiled MySQL yourself you must run 'make install' first. |
或
1 2 3 4 5 6 7 8 9 |
[root@bogon scripts]# /usr/local/mysql/scripts/mysql_install_db --user=mysql& [1] 16874 [root@bogon scripts]# FATAL ERROR: Could not find ./bin/my_print_defaults If you compiled from source, you need to run 'make install' to copy the software into the correct location ready for operation. If you are using a binary release, you must either be at the top level of the extracted archive, or pass the --basedir option pointing to that location. |
解决方法:
1 |
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data &(这点非常重要) |
操作后发现又有个报错……
继续度娘,发现是说有个语言的路径没有设置,根据解释“加入language配置项,由于使用二进制分发包进行安装的,而默认的情况下,mysql会到/usr/local/mysql/share/english下查找该文件”,于是更改my.cnf,在[mysqld]下添加language = /usr/local/mysql3306/share/english
1 2 |
[mysqld] language = /usr/local/mysql/share/english |
启动正常后,如果登录mysql的时候报错
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) |
首先看一下权限,
/usr/local/mysql 目录的权限不对:
1 |
chown -R mysql:mysql /usr/local/mysql |
再看my.cnf中设置的路径
原因1-配置文件错误:
检查etc下面的my.cnf如下内容:
1 2 3 4 5 6 7 8 9 |
[client] #password = your_password port = 3306 socket = /usr/mysql-data/mysql.sock # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3306 socket = /usr/mysql-data/mysql.sock |
原因2-启动文件错误:
需要修改MySQL启动脚本/etc/rc.d/init.d/mysql,
其中datadir= ? 一行检查下!
原因3-前提是你在使用php连接时候报错!
在/etc/php.ini修改mysql.default_socket的值设置为:
1 |
mysql.default_socket=/var/lib/mysql/mysql.sock |
回到终点设置个连接:
1 |
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock |
(在/etc/php.ini中mysql.default_socket这个文件中,关于mysql.default_socket的值的说明是这样的,
;Default socket name for local MySQL connects. If empty, uses the built-in MySQL defaults.
这个值一开始是空的,也就是说,如果我们不主动去修改的话,php将会使用内建在mysql中的默认值)
补充一下,按照上面的排查方式还是有问题的话,注意用find命令查找一下my.cnf这个文件
1 |
find / -name my.cnf |
如果有很多的话,mysql会按顺序读取配置文件/etc/my.conf,/etc/mysql/my.conf,/usr/etc/my.con,~/.my.conf
/etc/my.conf中的
1 2 3 4 5 6 |
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock |
/etc/mysql/my.conf中socket=/var/run/mysqld/mysqld.sock 配置重复,导致/etc/mysql/my.conf中的[client]覆盖了/etc/my.conf中的[client]设置,所以连接不正确,就会出现这个错误
最简单的办法是删除这个文件
mv /etc/mysql/my.conf /etc/mysql/mysql.conf_backup
完成后重启mysql服务即可正常。
近期评论