mysql有时候登录会被拒绝,可能是密码不对或密码已过期,怎么判断密码过期了呢?
使用命令行登录:
mysql -hlocalhost -uroot -p
成功之后,查询数据库的用户信息:
select host, user, plugin, authentication_string from mysql.user;
结果显示,如果plugin这列的值是caching_sha2_password则表示该用户的密码已过期,不能通过客户端访问,Navicat会1251错误。
修改要使用账号的信息:
alter user 'root'@'%' identified with mysql_native_password by 'admin';
root@%是host是%,用户是root,修改的密码是admin,成功之后,在查询
select host, user, plugin, authentication_string from mysql.user;
plugin这列显示mysql_native_password,则表示修改成功,就可以通过第三方客户端访问了。
(密码过期,第三方客户端不能访问,但通过程序能不能访问,没有测过)
使用docker创建的mysql实例:
[root@bogon docker]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=admin -d -p 3306:3306 mysql
创建一个名为mysql01,root用户密码是admin,端口映射3306:3306的mysql镜像
但有个问题,通过最新版本的mysql镜像创建的mysql实例,不能通过第三方客户端连接
所以需要按上面的步骤修改数据库
问题是怎么通过命令行连接到mysql
1. 保证mysql01的容器启动;
2. 执行
[root@bogon docker]# docker exec -it mysql02 bash
通过docker命令创建一个可以连接到mysql02这个容器的命令行
然后就可以使用
root@0ee68bef2bfc:/# mysql -hlocalhost -uroot -p
连接到mysql实例,之后就按上面的办法,使第三方客户端可访问这个docker实例的mysql库。
(执行docker exec -it mysql02 bash)之后,bash的命令提示符变了,仔细去体会这个变化的地方,能助于我理解docker exec这个命令,在执行docker exec命令之后进入的bash,可以使用exit命令退出docker的bash,回到服务器)