报错代码:
➜ ~ mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
报错原因:
① 概述:用户root访问localhost/IP被拒绝访问② 一般是数据库的用户名或者密码跟服务器上mysql设置的不一致,导致匹配失败
问题解决方案:
# 注意解决步骤:① 查看mysql配置文件② 查看 mysql 配置文件加载顺序③ 修改配置文件跳过权限验证(skip-grant-tables)④ 登录mysql客户端修改密码
注意 mac 版本方案:
① 查看 mysql 运行情况,看看在哪里
➜ ~ ps aux | grep mysql -- 查看mysql的运行进程 可以看到启动地址 amu 15262 0.0 4.9 4899000 407680 ?? S 1:14下午 0:01.18 /usr/local/opt/mysql/bin/mysqld --basedir=/usr/local/opt/mysql --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/opt/mysql/lib/plugin --log-error=liyangyang.local.err --pid-file=liyangyang.local.pid --socket=/tmp/mysql.sock
② 查看 mysql 配置文件加载情况:
➜ ~ /usr/local/opt/mysql/bin/mysqld --verbose --help | grep -A 1 'Default options' Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf# 概述: ① 服务器首先读取的是 /etc/my.cnf文件② 如果前一个文件不存在则继续读/etc/mysql/my.cnf文件,依此类推往下寻找,一直到最后一个~/.my.cnf文件③ 如果以上所有文件都不存在;则说明安装mysql之后未进行配置文件;可以自己编辑一份名为my.cnf;修改文件拥有者和所属组且赋予可执行权限即可① mkdir /usr/local/mysql/etc② vim /usr/local/mysql/etc/my.cnf -- 内容可以复制一份本地的配置文件即可③ chown -R root:root /usr/local/mysql/etc/④ chmod 755 /usr/local/mysql/etc/my.cnf
③ 查看 mysql 读取配置文件方法:
## 查看是否使用了指定目录的my.cnf ➜ ~ ps aux | grep mysql | grep 'my.cnf'## 查看mysql默认读取my.cnf的目录 ➜ ~ mysql --help | grep 'my.cnf'order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf这些就是mysql默认会搜寻my.cnf的目录,顺序排前的优先;等同于上面搜索语句
④ 免密码登录并修改密码
### mysql 5.8版本之前的修改方法:① 在mysql配置文件中,[mysqld]下添加一行,使其登录时跳过权限检查 [mysqld] skip_grant_tables② 重启mysql服务;登录mysql -uroot -p### mysql5.8版本之后修改方法:① 执行目录下执行,例如我本地运行地址:/usr/local/opt/mysql/bin/mysqld -console --skip-grant-tables --shared-memory② 新开启一个窗口:mysqld -uroot -p 直接回车(大家可以升级版本测试下)### 以上操作完毕后 进度mysql终端,修改密码:set password for root@localhost = '新密码'; 或者 update user set authentication_string='新密码' where user='root'; 或者 alter user 'root'@'localhost' identified with mysql_native_password by '新密码';### 注意:刷新mysql相关权限 flush privileges;### 最终流程: mysql> update user set authentication_string='root' where user='root'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0mysql> set password for root@localhost = 'root'; Query OK, 0 rows affected (0.02 sec)mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'root'; Query OK, 0 rows affected (0.01 sec)mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)mysql> exit Bye此时再登录时我们的密码已经更新为root