MySQL:升级到 5.5 后我无法以 root 身份登录

Posted

技术标签:

【中文标题】MySQL:升级到 5.5 后我无法以 root 身份登录【英文标题】:MySQL: I cannot login as root after upgrading to 5.5 【发布时间】:2011-12-17 05:44:10 【问题描述】:

我已经按照tutorial 升级到 mysql 5.5。

完成所有步骤后,我执行$ mysql -u root -pXXXX 并显示:

Error 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES).

该教程前段时间对我有用,但现在我遇到了这个问题。我已经重新安装了 ubuntu+mysql 5.1 并且执行“mysql -u root -pXXXX”没有问题,但是升级到 5.5 后我再次遇到上述错误..

这是我的 /etc/my.cnf:

# The following options will be passed to all MySQL clients
[client]
#password    = your_password
port        = 3306
socket        = /var/run/mysqld/mysqld.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
user            = mysql
socket        = /var/run/mysqld/mysqld.sock
port        = 3306
basedir         = /usr/local/mysql
datadir         = /usr/local/mysql/data
tmpdir          = /tmp
log_error       = /var/log/mysql/error.log
skip-external-locking
...

有什么想法吗?

编辑: 解决了,好吧.. 我只需要备份用户“root”,因为我要在升级到 5.5 之前删除数据库。

问候

贾维

【问题讨论】:

【参考方案1】:

在 Ubuntu 18.04 中,作为 root 用户:

# service mysql stop
# mkdir /etc/run/mysql && chown -R mysql:mysql /etc/run/mysql
# mysqld_safe --skip-grant-tables --user=mysql &

这将在不验证 root 用户的情况下启动 mysql。然后,在另一个终端/ssh 窗口中,您可以启动 mysql 客户端并更改 root 用户密码:

# mysql -u root
mysql> FLUSH PRIVILEGES;
mysql> use mysql;
mysql> UPDATE user SET authentication_string = PASSWORD('NeWPaSSWoRD') WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

然后,在第一个终端中停止 mysqld_safe 进程。将下面的“processid”替换为/var/run/mysqld/mysqld.pin的内容。

# kill -9 "processid"

启动mysql并再次尝试登录。

# service mysql start
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26-0ubuntu0.18.04.1-log (Ubuntu)
mysql>

【讨论】:

【参考方案2】:

回复:CENTOS

确保您已将 mysql 设置为开机自动启动:

chkconfig --list mysqld

如果没有,则将mysql添加到启动脚本中:

chkconfig --levels 345 mysqld on

...然后重新启动。

如果这仍然不起作用,这对我有用:

/etc/init.d/mysqld 停止

mysqld_safe --skip-grant-tables &

mysql -u root

mysql>使用mysql;

mysql> 更新用户设置密码=PASSWORD("newrootpassword") where User='root';

mysql> 刷新权限;

mysql>退出

/etc/init.d/mysqld 停止

/etc/init.d/mysqld 启动

【讨论】:

【参考方案3】:

让自己免于头疼...您的问题可能是您缺少密码周围的引号。特别是因为您实际上可以通过 -p 开关登录而不使用您的 .my.cnf。

[client]
user = myusername
password = "mypassword"
host = localhost

http://dev.mysql.com/doc/refman/5.5/en/option-files.html

【讨论】:

【参考方案4】:

只是说你真的用错了密码……

也许你必须重置root密码,虽然我不知道为什么(也许更新程序覆盖了它?),这是过程:

    确保没有运行 mysqld 守护程序。 进入你的 mysql/bin 目录 用mysqld_safe --skip-grant-tables 启动一个mysql 守护进程(注意PID) 启动命令行mysql:mysql 用您的编辑执行这个小脚本:

[代码] 使用mysql; 更新user SET Password=PASSWORD('YOUR_NEW_PASSWORD_HERE') WHERE User = 'root'; 出口; [/代码]

现在你只需要杀死你的mysqld_safe(还记得PID吗?..)并正常启动守护进程。

【讨论】:

谢谢,但 root 用户已经消失。我正在寻找信息来创建一个新的,但我没有找到任何东西..有什么想法吗? 这真的很奇怪。您可以在安全的 mysql shell 中发出命令:GRANT ALL PRIVILEGES ON *.* TO root@'127.0.0.1' IDENTIFIED BY 'your-password-here';

以上是关于MySQL:升级到 5.5 后我无法以 root 身份登录的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 5.5 & 5.7 源码包如何升级到MySQL 5.7.26

markdown 在Ubuntu上将mysql 5.5升级到5.7

MySQL从5.5升级到5.6,TIMESTAMP的变化

MySQL 从 5.5 升级到 5.6,日期空条件失败

mysql 5.5升级到5.7版本操作流程

MySQL主从架构由5.5版本升级到5.6方案