mysql5.7无法启动错误解决!(因源码编译时的疏忽引起的血案。。。)

mysql版本 : mysql Ver 14.14 Distrib 5.7.11, for Linux (x86_64) using EditLine wrapper
操作系统版本:Red Hat Enterprise Linux Server release 6.5 (Santiago)
问题详细描述:博主手动编译了mysql的源码包,解决了依赖,一切正常没有报错,之后将/usr/local/lnmp/mysql/support-files/my-default.cnf复制到/etc/my.cnf,/usr/local/lnmp/mysql/support-files/mysql.server复制到/etc/init.d/mysqld,再将/usr/local/lnmp/mysql/bin添加到环境变量中,方便命令的使用。
开始正式进行初始化

mysqld --no-defaluts --initialize --user=mysql --basedir=/usr/local/lnmp/mysql/ --datadir=/usr/local/lnmp/mysql/data/

上面使用–no-defaults的原因是,博主为了解决问题多次使用了mysql初始化,如果你的机器上第一次安装mysql完全可以去掉这个参数,如果你曾经安装过,建议加上这个参数,否则又是成吨的报错,而且这个参数必须放在第一个

目前一切正常还给了一个随机密码。
现在开始启动mysql

[root@localhost ~]# /etc/init.d/mysqld start
Starting MySQL... ERROR! The server quit without updating PID file (/usr/local/lnmp/mysql/data/localhost.localdomain.pid).

报错出现了,我显示搜索了一下这个报错,使用了[解决方法]MySql提示:The server quit without updating PID file博客的方法,但是都没有解决,我无奈下只能去查错误日志

[root@localhost data]#   cat localhost.localdomain.err | grep '\[ERROR\]'

报错文件.err前面的名字和你的主机名有关,每个人不一定相同。
输出如下:

2017-03-21T02:41:58.307719Z 0 [ERROR] Could not create unix socket lock file /usr/local/mysql/data/mysql.sock.lock.
2017-03-21T02:41:58.307725Z 0 [ERROR] Unable to setup unix socket lock file.
2017-03-21T02:41:58.307730Z 0 [ERROR] Aborting
2017-03-21T03:18:20.186519Z 0 [ERROR] Could not create unix socket lock file /usr/local/mysql/data/mysql.sock.lock.
2017-03-21T03:18:20.186534Z 0 [ERROR] Unable to setup unix socket lock file.
2017-03-21T03:18:20.186545Z 0 [ERROR] Aborting

我看到那个不能创建socket文件的报错更是奇怪了,根据上面博客的方法我把权限都给了呀,怎么可能创建不了,这难道是BUG!!!!
不,不是BUG,仔细看那一行报错:Could not create unix socket lock file /usr/local/mysql/data/mysql.sock.lock
这个目录并不是我的data目录呀,我的data目录是/usr/local/lnmp/mysql/data/,这时我终于恍然大悟,肯定是编译源码的时候疏忽了,赶快找出当时编译的时候自己都写了些什么。
如下:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data 
-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 
-DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 
-DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_SSL=yes -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all 
-DMYSQL_TCP_PORT=3306 -DWITH_BOOST=./boost/boost_1_59_0/

–DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock终于找到元凶了,我在编译的时候定义的socket文件目录定义错了,找到问题了,怎么补救呢?难道重新编译!,还是算了吧。直接修改/etc/my.cnf就好啦。

[client]
socket=/usr/local/lnmp/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/lnmp/mysql/data/mysql.sock

这样就重新定义了sock文件的目录了。

[root@localhost data]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS! 

启动成功!
现在进入数据库

[root@localhost data]# mysql -uroot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

刚才好像没把密码没有记下来。。。这就尴尬了。没事正好复习下修改mysql密码

先关闭mysql

[root@localhost data]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS! 
root@localhost data]# mysqld_safe --skip-grant-tables &

因为这个进程会占用终端,所以我们让他后台运行。
现在就可以无密码进入mysql了。

[root@localhost data]# mysql -uroot -p

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.11 Source distribution

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

修改密码

mysql> update user set authentication_string=password('******') where user='root';
Query OK, 1 row affected, 1 warning (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 1

以前用mysql的时候密码字段是password,现在改成了authentication。现在就大功告成了!
别忘了退出之后一定要将mysql相关的进程杀干净,要不会出大问题的!

[root@localhost data]# ps aux | grep mysql

root      4695  0.0  0.1 106196  1540 pts/0    S    11:39   0:00 /bin/sh /usr/local/lnmp/mysql/bin/mysqld_safe --skip-grant-tables
mysql     4807  0.0 63.1 1872888 644876 pts/0  Sl   11:39   0:00 /usr/local/lnmp/mysql/bin/mysqld --basedir=/usr/local/lnmp/mysql --datadir=/usr/local/lnmp/mysql/data --plugin-dir=/usr/local/lnmp/mysql/lib/plugin --user=mysql --skip-grant-tables --log-error=/usr/local/lnmp/mysql/data/localhost.localdomain.err --pid-file=/usr/local/lnmp/mysql/data/localhost.localdomain.pid --socket=/usr/local/lnmp/mysql/data/mysql.sock

将看到的这两个全部杀掉,再重启mysql。

你可能感兴趣的:(运维学习)