天呐! 启动报错,搞了很久!一直出现这个/run/mysqld/mysqld.pid问题,我配置文件明明没有这个,而且我显示指定了其他路径还是会出现这样问题。
./mysql.server start
Starting MySQL
. * The server quit without updating PID file (/run/mysqld/mysqld.pid).
排查
输出
# mysqld --print-defaults
# mysqld would have been started with the following arguments: --init-connect=SET NAMES utf8 --basedir=/data/mysql --datadir=/data/mysql/data --socket=/tmp/mysql.sock --max_connections=200 --character-set-server=utf8 --default-storage-engine=INNODB --sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES --log-error=/data/mysql/data/error.log --lower_case_table_names=1 --pid-file=/data/mysql/data/mysqld.pid --pid-file=/run/mysqld/mysqld.pid --basedir=/usr --bind-address=127.0.0.1 --expire_logs_days=10 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
会发现有两个pid-file,这导致后面的pid-file覆盖我了我前一个!
然后查看这些包含my.cnf的配置文件,发现/etc/mysql/my.cnf确实有/run/mysqld/mysqld.pid!赶紧注释或者删除和这个文件。我用的是/etc/my.cnf。
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/my.cnf
最后在/etc/my.cnf配置文件中,显示定义我们的pid输出路径,其实显示定义也没关系
[mysqld]
pid-file=/data/mysql/data/mysqld.pid
后面就启动好了
总结:mysqld --print-defaults命令是救命的存在,能够检查数据库启动用的一些配置和输出的文件路径