数据库16mysql之初始密码

mysql个人见过3种不同的初始密码方式

情况01:安装时提示输入密码(红色的框框)

这是最常见情况,基本上也不会遇到什么问题,毕竟自己输的密码,留意记下来即可。

情况02:安装时会print出随机密码(或写入特定文件)

曾经遇到过一两次。使用随机密码可登录进去,登录进去后修改。也不会有什么幺蛾子。

情况03:安装时没输入提示,也没随机密码

近期第一次遇到,这种情况,折腾了好一会。
场景:arm(aarch64架构)上的ubuntu(linarolinux)
直接安装mysql-server(sudo apt-get install mysql-server)
细节看安装了2个软件,一个是mysql-server(版本5.5)一个是default-mysql-server(版本1.0)。

安装后启动服务:net service start mysql(ps -fe|grep mysql,可以发现启动的是/usr/sbin/mysqld)
客户端连接:mysql -u root(mysql - u root -p)
问题:登录不进去,提示root@localhost deny(类似密码不对)

解决方法:(ubuntu,linarolinux,aarch64架构)
启动服务:cd /usr/sbin/ && sudo ./mysqld –skip-grant-tables
连接:cd /usr/bin/ && sudo ./mysql -u root
之后update mysql.user表进行密码重置(此时可发现初始密码为空,但为何空密码无法log进去呢(指正常的net service start mysql启动方式,启动后使用空密码无法登录))

退出后发现使用net service start mysql启动方式,和新录入的密码还是进去不。

解决方法:

1
2
grant all privileges on *.* to 'root'@'localhost' identified by '123456';  #123456是设定的密码  
flush privileges;

情况04:安装时没输入提示,也没随机密码,任意密码可登入

这是ubuntu18上安装默认mysql是遇到问题,mysqlserver5.7.x
1.查看mysql监听IP和端口是否正常。
netstat -anpt
监听得地址如果是:::3306或者是0.0.0.0:3306,表示监听所有IP地址,这监听状态是正常。若出现127.0.0.0:3306,说明监听的本地地址。
2.直接输mysql,从服务器进入数据库,查看mysql下的user表

1
2
3
4
5
6
7
8
9
10
11
mysql> use mysql;
mysql> select host,user,authentication_string,plugin from user;
+-----------+------------------+-------------------------------------------+-----------------------+
| host | user | authentication_string | plugin |
+-----------+------------------+-------------------------------------------+-----------------------+
| localhost | root | | auth_socket |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| localhost | debian-sys-maint | *CE1DA9A6E250643912DD52CF0FFCDD58416D426C | mysql_native_password |
+-----------+------------------+-------------------------------------------+-----------------------+
4 rows in set (0.00 sec)

修改user为root的host为%,表示允许所有服务器访问。
设置authentication_string的值,就是root的密码。
将plugin改为mysql_native_password。

1
mysql> update user set host='%' , authentication_string=PASSWORD('密码') , plugin='mysql_native_password' where user='root';

3.检查一下控制台安全组规则,是否开启了3306端口,未开启添加安全组。
4.重启mysql服务

1
root@iZuf63gpxv4kgzve2n8mkqZ:# service mysql restart

情况05:安装时没输入提示,也没随机密码,但空密码无法进入

版本:mysql Ver 8.0.27-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

处理:

1
sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

末尾加上:skip-grant-tables
重启mysql: sudo service mysql restart
此时通过: mysql -uroot -p,空密码即可成功进入系统。
此时查看各用户密码发现:root密码为空

1
select host,user,authentication_string,plugin from user;

del31

尝试

1
update mysql.user set authentication_string=password('root') where user = 'root';

报错:

1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('root') where user = 'root'' at line 1

但:

1
update mysql.user set authentication_string='root' where user = 'root';

却不报错,且成功更新, 说明password函数引发问题
先搞明白怎么回事,因而去mysql官网看到mysql版本8.0已经取消了password字段和password()函数,并且不在支持SET PASSWORD =PASSWORD(‘auth_string’)语法。

在5.7以前修改密码:(使用update修改user表)

1
update mysql.user set password=password('root') where host='localhost' and user='root';

在5.7修改密码:(由于废除了password字段,须要使用authentication_string)

1
update mysql.user set authentication_string=password('root') where host='localhost' and user='root';

而在8.0已经不能用possword函数和set…语句,只能用:

1
alter user 'root'@'localhost' identified with mysql_native_password by 'root';

如遇报错:

1
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

先执行flush privileges

最后别忘了删掉/etc/mysql/mysql.conf.d/mysqld.cnf 中的skip-grant-tables,重启service

补充,mysql5.7还有另一种报错情况,现象也是:安装时没输入提示,也没随机密码,但空密码无法进入
其user表如下
del01
这里的: auth_socket。如果您安装5.7并且没有为root用户提供密码,它将使用auth_socket插件。该插件不关心,也不需要密码。它只检查用户是否使用UNIX套接字进行连接,然后比较用户名
如果我们要配置密码,我们需要在同一命令中同时更改插件并设置密码。首先更改插件然后设置密码将不起作用,它将再次回退到auth_socket。
因此,正确的方法是运行以下命令:

1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

参考

mysql server5.5root密码_【MySQL 忘记密码】MySQL忘记密码怎么解决 mysql5.5 windows7:https://blog.csdn.net/weixin_42299169/article/details/113131595
Navicat for MySQL破解,以及连接数据库出现错误:1045-Access denied for user ‘root’@’localhost’或者@“ip”解决方法:https://blog.csdn.net/qq_29984105/article/details/81635232
mysql5.7.27 无法在远程连接打开:https://blog.csdn.net/G925010178/article/details/99776025
MySQL5.7.9版本后废除了Password字段和Password()函数+MySQL登陆不了如何修改登陆密码?:www.javashuo.com/article/p-sdszlubd-np.html
解决ubuntu 16.04安装mysql5.7.17后,登录时出现ERROR 1045 (28000): Access denied for user ‘root’@’localhost’问题:https://www.jianshu.com/p/5496d1329f6f
使用“plugin:auth_socket”更改MySQL 5.7中的用户密码:https://blog.csdn.net/weixin_41918841/article/details/82997651

数据库系列
数据库01mysql常用操作速查
数据库02mongodb异常错误
数据库03mongodb占用磁盘空间过大
数据库04sqlite转mysql
数据库05redis常用命令整理
数据库06redis事务
数据库07redis分布式锁
数据库08redis其他
数据库09mysql常用查询实例
数据库10mysql之坑
数据库11mysql之坑null专题
数据库12经验之谈
数据库13mysql执行计划
数据库14mysql的redolog与binlog
数据库15mysql报错2006
数据库16mysql之初始密码
数据库17mysql锁机制
数据库18mysql事务和MVCC

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×