mysql修改密码(linux为例)
摘要:笔者在学习mysql的时候尝试修改mysql密码,发现网上的很多方法用不了,出现如下报错,便多花了一些时间去测试解决,最终发现是由于不同版本的mysql修改密码方式也不尽相同,在网上很多地方都没有说明,这里附上一些方案。
--sql修改密码报错(语法报错)
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 '("lm123") where user = "root"' at line 1
1.系统层面修改
# linux命令
# mysqladmin -uroot -p旧密码 password 新密码(引号不是必须)
# 8.0及5.7版本可以(5.6没有linux环境测试,有需要可自行测试)
mysqladmin -uroot -p123456 password lm123
2.改用户表:update语句
-- 密码的密文由mysql的内置函数password产生
--password函数可接收"明文密码"字符串,产生"密文字符串"
--root修改密码也就是先使用内置函数password产生密文,然后使用新密文替换旧密文.密码修改完成
-- 需要使用password函数时会报错:Password hash should be a 41-digit hexadecimal number
-- 1.先使用数据库mysql
use mysql;
-- 2.修改表内容:
-- 5.6版本,密码列字段为password
update user set password = password("lm123")
where user = "root";
-- 5.7版本,密码列字段为authentication_string
update user set authentication_string = password("lm123")
where user = "root";
-- 8.0,不再使用password函数,直接转化为密文,5.7版本也可用
update user set authentication_string = "lm123"
where user = "root";
3.set password语句
-- 8.0,无需password函数,5.7可用
set password for root @localhost='lm1234'
-- 5.6版本,使用password函数转换密文,5.7可用
set password for root @localhost=password('lm=1234');
4.alter语句
--5.7及8.0.x可用,5.6版本无法使用
alter user root@localhost identified by 'lm123';
最后提供忘记密码修改方法
# 跳过密码验证
# MySQL 8.0.x 版本推荐使用命令
mysqld --console --skip-grant-tables --shared-memory
# 低版本,停止mysql服务后,输入
# mysqld --skip-grant-tables
# 新建窗口,找到mysql二进制文件,以无密码方式登录
cd /usr/local/mysql/bin
./mysql <<EOF
--刷新权限
flush privileges;
--重置密码(可选上面提供的修改方法)
set password for root@localhost='lm123';
EOF