集群需要mysql存儲元數據,就在前幾天還運行好好的,突然就進不去了......還是太菜,遇到的bug少。
引起這種故障的原因有很多......第一個坑比較多,大部分用戶也就用第一個就可以解決問題,我第一次也踩了第一個坑;這次出現這個問題的時候,發現不管用了,各種百度啊.....最后是發現第三個坑
1.第一個坑:密碼不對--免密模式改密碼;
2第二坑:user表有匿名用戶,把匿名用戶刪除掉即可
3第三坑:localhost不對應
2.第四坑:user表下password_expired對應字段為Y。這個的意思是過期了!!!改密碼什么的不管用啊,需要修改權限。
---------------------------------我是華麗的分割線--------------------------------------
-----------------------第一種坑:改密碼------------------------------
1.mysql安裝完成查看臨時密碼:
[root@localhost mysql]# cat /root/.mysql_secret # The random password set for the root user at Thu Sep 13 22:33:41 2018 (local time): uZlyTYGkbiE4zsjA
2.臨時密碼登錄報錯:
[root@localhost mysql]# mysql -umysql -p Enter password: ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: YES)
3.停止mysql
systemctl stop mysql
4.編輯/usr/my.cnf文件
vi /etc/my.cnf
在my.cnf文件的[mysqld]添加以下內容,用於免密登錄
skip-grant-tables
4.啟動mysql
systemctl start mysql
5.無密碼登錄
mysql -u root
6.修改密碼
use mysql ;
update mysql.user set authentication_string=password('123456') where user='xxx' ;
flush privileges;
quit
7.編輯/usr/my.cnf文件,注釋掉skip-grant-tables。
-----當修改密碼時,發現依舊不好使,這時候就要查看user表,判斷:是第2種坑?第3種坑?還是第4種坑?-------
select user,host,password,password_expired from user;
1、如果password字段為空,則有匿名用戶;
2、如果host字段沒有localhost,則localhost不對應;
3、如果root@localhost對應的password_expired有Y字樣,則密碼過期了!!需要改權限!!
下面的這三篇博客分別講述了三種情況
-------------------------------------博客1:有匿名用戶,單純改密碼不行----------------------------------------
https://www.cnblogs.com/linuxnote/p/3780244.html?utm_source=tuicool&utm_medium=referral
查看user表
mysql> use mysql;
mysql> SELECT User, Host, Password FROM mysql.user; +------+------------------+-------------------------------------------+ | User | Host | Password | +------+------------------+-------------------------------------------+ | root | localhost | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | root | liao.localdomain | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | root | 127.0.0.1 | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | GaMe | % | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | root | % | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | | localhost | | | | liao.localdomain | | +------+------------------+-------------------------------------------+
可以看到,我的數據庫中有root用戶,GaMe用戶和匿名用戶,GaMe用戶的主機使用%代表所有主機。最下面的2個是匿名用戶
解決的方法:刪除匿名用戶(僅僅為了安全也有這個必要)
mysql>use mysql; mysql>delete from user where user=''; mysql>flush privileges; //用來刷新內存,是語句立即生效。
再次修改密碼即可!
-------------------------------------博客2:localhost不對應----------------------------------
來源:https://www.linuxidc.com/Linux/2015-04/116492.htm
查看一下user表:
mysql> select user,host from user; +———–+———+ | user | host | +———–+———+ | root | 127.0.0.1 | | night | % | +———–+———+
localhost沒有映射到127.0.0.1?試試#mysql -u root -p xxxx -h 127.0.0.1,果然可以登錄。
沒有給’root’@’localhost’和’root’@’ip’授權。
grant all privileges on . to ‘root’@’localhost’ identified by ‘mypassword’ with grant option;
grant all privileges on . to ‘root’@’118.192.91.xxx’ identified by ‘mypassword’ with grant option;
再查詢一下用戶表:
然后#mysql -u root -p xxxx,登錄成功!
-----------------博客3:user表下root用戶的password_expired對應字段為Y------------
來源:http://equalxx.iteye.com/blog/2394709
1.免密登錄
2.查看user表:
mysql> select user,host, password_expired from user;
而且通過查看user表,發現root用戶的password_expired是Y,意思也就是過期了,這並不是上面update語句能改變的。
最后解決這個問題是要通過
然后就可以通過mysql -uroot -p123456順利登錄了

