在linux云服务器安装mysql 8.3 ERROR 1045
问题不限于:
`ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
本来设置mysql密码是想设置为简单点的,殊不知这个密码策略在mysql 8 之后的版本,重启MySQL都会重新刷新密码策略-为“medium”
以上设置了策略 set global validate_password.policy=LOW; 一样重启mysql也是以medium的密码策略
网上的修改密码错误大多为mysql5的版本,鄙人大部分环境都是MySQL 8 以上 的,所以找了好半天也没解决,终于悟到是不是密码策略把我堵在门外了,明明前面没有报错的
解决
修改mysql密码之前需要在根目录下输入:
1.先去到根目录
[root@zlwc ~]# cd
*2.用vi 或者 vim命令 进入my’.cnf文件进行操作
vim /etc/my.cnf
1.键盘键入“i” 进行插入修改 --(linux命令行) 找到 [msyqld] 下面复制并用鼠标粘贴添加skip-grant-tables
*
可以不习惯linux会出错,可以按Esc 退出insert ,再按键盘上的u 可以撤销操作(长按直接回退致修改前)撤销完再Esc退出当前模式,键入i 再次修改
加上后得到
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
[mysqld]
#
skip-grant-tables
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#最大连接数
max_connections = 400
#最大错误连接数
max_connect_errors = 1000
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
~
-- INSERT --
修改完,Esc退出当前模式再输入 " : " + " w " + " q " 即:wq 修改并保存退出操作
(现在数据库就不要密码也能直接访问)
然后刷新一下:flush privileges;
(改完密码后也要再刷新一次)
一串代码能修改,且密码同时符合策略:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123xx!'
解释:我的密码是6位数,是因为在进入了MySQL后设置了这个
mysql> set global validate_password.length=6;
重点:网上很多同样的修改密码的代码但是,可能并不是最有效的。归根结底是 mysql的这个插件的策略是每次修改完(包括将密码策略修改成“low”)重新启动mysql 也是这个插件初始化改变这个密码审核策略,导致修改失败
解决问题
修改后记得刷新
flush privileges;
刷新之后再进去这个文件my.cnf 注释掉 skip-grant-tables 或者删了,我这里是注释了 ,之后你的mysql就不会是裸奔状态了
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
[mysqld]
#
#skip-grant-tables
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#最大连接数
max_connections = 400
#最大错误连接数
max_connect_errors = 1000
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
最后刷新并重新启动MySQL :输入这个
sudo systemctl restart mysqld
亲测这代码sudo systemctl restart mysqld 这是最符合MySQL 8 的
ps:
**还有很多细节没说,因为这文章对于那些找了半天找不到问题而且还有一定linux基础的人可能帮助比较大
整合了很多人的解决方案希望,说不定也是你遇到的问题!**