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 | grant all privileges on *.* to 'root'@'localhost' identified by '123456'; #123456是设定的密码 |
情况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 | mysql> use mysql; |
修改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; |
尝试
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表如下
这里的: 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