无法为MySQL的root用户设置密码

3

我正在尝试在本地主机上运行MySQL。这在我之前从未发生过,但在安装时sudo apt-get install mysql-server没有要求我输入初始密码。

在寻找“重置”密码的答案并与目录权限作斗争后,我目前处于以下状态:

mysqld_safe解决方案:

  • 重新启动计算机后,mysql -u root -p会要求我输入密码,而在我输入密码后,它会显示ERROR 1698(28000):Access denied for user 'root' @ 'localhost'
  • 如果我尝试使用mysql -u root(不需要密码)则会显示ERROR 2002 (HY000):Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
  • 如果我按照其他人发布的关于通过mysqld_safe --skip-grant-tables重置密码的建议进行操作,则会遇到一些小问题:
    • 首先我运行sudo service mysql stop
    • 然后sudo mysql_safe --skip-grant-tables将显示mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
    • 如果我执行sudo mkdir -p /var/run/mysqldsudo chown mysql /var/run/mysqld,可以解决该问题
    • 之后,运行mysqld_safe会显示消息Starting mysqld daemon with databases from /var/lib/mysql,然后停顿。无法通过Ctrl+C退出
    • 现在我可以使用mysql -u root在新的终端窗口中进行连接并获得mysql>提示符。
    • 我可以使用use mysql; update user set authentication_string=password('0000') where user='root';flush privileges;设置新密码,它会告诉我成功更新了包含消息Rows matched: 1 Changed: 1 Warnings: 1的行
    • 警告仅说明:'PASSWORD' is deprecated and will be removed in a future release.
    • 完成所有操作后,我回到起点:进程仍挂起,所以我必须重新启动,因为killall mysqld_safeno process found。在重启并输入我的新密码0000后,我将被拒绝访问。

系统是Linux 4.15.0-48-generic#51-Ubuntu SMP

mysqladmin解决方案

如果我运行mysqladmin -u root password '0000'(不使用sudo),会得到以下错误信息:

mysqladmin: 连接到 'localhost' 服务器失败

错误:'root'@'localhost' 的访问被拒绝

如果我使用sudo运行它,会得到以下警告信息:

mysqladmin: [Warning] 在命令行界面上使用密码可能存在安全风险。

警告:由于密码将以明文形式发送到服务器,请使用ssl连接以确保密码安全。

最后一个警告并没有告诉我密码是否已更改;它是否被拒绝了或者是否已成功更改(因为这只是一个警告而不是错误,我认为它应该可以通过),但无论哪种情况,尝试使用0000连接仍然显示“访问被拒绝”。
如何解决此问题?非常感谢您的建议。
1个回答

0

我并没有直接解决使用mysql时出现的问题。对我来说,可接受的解决方案是切换到不同的数据库软件,但它仍然是一个MySQL系统,并且让我恢复了工作状态。所以如果有人像我一样遇到现有的解决方案无法正常工作,也许这个方法能帮你重新开始编写代码。

我所做的是:

  1. 从我的系统中清除mysql
  2. 手动删除/etc/mysql/var/lib/mysql(不知道这个步骤是否必要)
  3. apt cleanapt autoremoveapt update
  4. 安装mariadb
  5. 按照这些指示消除超时错误
  6. 使用mysqld_safe --skip-grant-tables方法创建一个拥有所有权限的新用户,因为使用root连接始终会失败

PHP + MariaDB现在再次工作正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接