前言
- mysql 5.7.31
- centos 7.0
- win 10
现象
shell> mysql -h192.168.1.111 -uroot -pL*xx@xx$xxx
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'192.168.1.112' (using password: YES)
- 远程访问权限已开放。
- 简单密码可以访问,比如123456。改成密码
L*xx@xx$xxx
后无法访问。(这个是主要原因) - windows命令行执行成功,linux命令行执行出错。(有时也可能遇到反过来的情况,但这个只是现象不是原因)
- 自己开发的软件可以连接成功。
错误原因
密码中有命令行的特殊字符(Linux命令行中的特殊符号_特殊字符),导致命令被操作系统截断了,故发生错误。
解决办法1:用单引号或双引号将用户名和密码包裹起来
- linux用单引号将用户名和密码包裹起来,比如:
mysql -h192.168.1.111 -u'root' -p'L*xx@xx$xxx'
- windows用双引号将用户名和密码包裹起来,比如:
mysql -h192.168.1.111 -u"root" -p"L*xx@xx$xxx"
解决办法2:修改密码
- 停用mysql
- 修改my.ini,在
[mysqld]
节点下添加skip-grant-tables
配置项 - 启动mysql
- 设置新密码。PS:新密码中切记不要包含特殊字符
- 再次停用mysql
- 把my.ini文件里的skip-grant-tables去除掉
- 再次启动mysql
至此,涛声依旧。更详细做法参考这里:关于MYSQL ERROR1045 报错的解决办法。
解决办法3:修改密码
还可以这样修改密码:mysql5.6 忘记root密码后,如何找回密码?、mysql5.7 忘记root密码后,如何找回密码?
PS:新密码中切记不要包含特殊字符
解决办法4:修改密码
还可以这样修改密码:mysql中参数–init-file的作用是什么呢?
PS:新密码中切记不要包含特殊字符