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。