我刚刚用 Ubuntu 18 设置了一个新的 vps,我全新安装了 mysql-server:
sudo apt-get update
sudo apt-get install mysql-server
sudo mysql_secure_installation
在此菜单中,我输入了我的新的 root 密码(并确认)删除匿名用户?是禁止 root 远程登录?是删除测试数据库并访问它?是立即重新加载权限表?是
完成了!...或者没有
我尝试使用 mysql -u root -p 登录,但它一直告诉我访问被拒绝,有一瞬间我很困惑,然后我意识到我可能需要使用 sudo 登录,所以我这样做了。
但是现在,使用“mysql -u root”或“mysql -u root -p”(使用任何密码)我可以正常登录?!
我完全惊呆了。我尝试做了很多不同的事情,比如使用查询来更改 root 密码,但似乎都不起作用。我总是可以用任何密码(或无密码)登录。这是一个全新的 mysql 安装(我现在已经删除并重新安装了 3 次,看看我是否做了不同的事情。)
我注意到的唯一不同之处在于,在有关如何安装 mysql-server 的在线教程中,“mysql_secure_installation”中的第一个问题应该询问您是否要为 root 设置密码,但我没有被要求输入密码,只是提示我输入新密码。
我尝试在谷歌上搜索这个问题,但只能找到相反的“解决方案”(人们要么无法登录,要么想要设置一个始终正确的密码)
我不知道接下来该去哪里...
答案1
在查看了“可能重复”之后,我离解决方案更远了,但最终我还是找到了解决方案。但首先我必须启动 mysqld_safe 才能再次无需密码访问 mysql:但现在我遇到了更大的麻烦!我无法连接到 Mysqld 安全套接字。这是我在 stackoverflow 上找到的其他人发布的解决方案:
我发现当 mysql 服务停止时 mysql.sock 会被删除,而 mysqld_safe 无法创建它(我找不到原因),所以我的解决方案是备份 sock 文件夹并在启动 mysqld_safe 之前恢复
启动服务器 $ sudo service mysql start
转到 sock 文件夹 $ cd /var/run
备份 sock $ sudo cp -rp ./mysqld ./mysqld.bak
停止服务器 $ sudo service mysql stop
恢复 sock $ sudo mv ./mysqld.bak ./mysqld
启动 mysqld_safe $ sudo mysqld_safe --skip-grant-tables --skip-networking &
初始化 mysql shell mysql -u root
之后,我尝试使用给出的各种示例再次重置密码..都没有起作用,但解决方案是在插件中,“可能重复”建议将插件设置为'',但这不起作用。
但是,对我而言有效的是将其设置为本机 mysql 密码,然后运行以下命令:
use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root'; # THIS LINE
flush privileges;
quit;
现在 MySQL 可以按预期运行:我可以从任何用户(使用 sudo 时不一定需要)登录到 mysql root,并且不再接受所有密码。(我不知道有某种身份验证插件,这不是我第一次设置 mysql 数据库,但这个插件对我来说是全新的)