全新的 MYSQL 安装,用户“root”的访问被拒绝
Posted
技术标签:
【中文标题】全新的 MYSQL 安装,用户“root”的访问被拒绝【英文标题】:Fresh MYSQL install, Access denied for user 'root' 【发布时间】:2014-03-07 06:25:44 【问题描述】:我有一个旧的 Lamp 服务器,我想搬到一台新机器上,所以我做了一个 mysqldump,在新机器上安装了 Ubuntu Server 13.10,在安装过程中安装了 Lamp,然后从旧的 Lamp 服务器导入了我的旧 mysql 数据库.令我惊讶的是,在 mysql 导入之后,一切似乎都运行良好。
然后我尝试设置一个 cron 作业,每小时将所有数据库 mysqldump 到备份服务器。为了确保它正常工作,我尝试在新服务器上手动运行 mysqldump 以确保它正常工作(而不是等待 cron 作业运行)。无论如何,mysqldump 功能不起作用,由于某种原因,我现在根本无法访问 mysql。我试过了:
mysql -u root -p
并得到“ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)”
另外,我的 php 脚本也不能访问 mysql 数据库。所以我被锁定了。
我不知道为什么运行 mysqldump(或 crontab)会锁定我,所以我认为这与从我的旧灯服务器(运行旧版本的 mysql)导入所有数据库有关。
在很大程度上,我仍然是一个 linux 新手,所以任何帮助都将不胜感激!
【问题讨论】:
看看这里***.com/questions/19220085/… 我不得不使用 'sudo' 作为 root ...如果你想摆脱 sudo ***.com/a/37241990/839273,可以看这里 【参考方案1】:我仍然不知道为什么我被锁定了,但为了解决这个问题,我必须重置 mysql root 密码,我按照以下说明进行操作这个网站(但我为 Ubuntu 13.10 修改了它们):https://help.ubuntu.com/community/MysqlPasswordReset
使用此命令停止 mysql 守护进程:
sudo pkill mysqld
使用该命令的 --skip-grant-tables 选项启动 mysqld 守护进程
sudo /usr/sbin/mysqld --skip-grant-tables &
使用该命令启动mysql客户端进程
mysql -u root
在 mysql 提示符下执行此命令可以更改任何密码
FLUSH PRIVILEGES;
然后重置/更新您的密码
SET PASSWORD FOR root@'localhost' = PASSWORD('password');
如果你有一个可以从任何地方连接的 mysql root 帐户,你也应该这样做:
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
一旦您收到指示查询成功(受影响的一个或多个行)的消息,刷新权限:
FLUSH PRIVILEGES;
然后停止mysqld进程并以经典方式重新启动它:
sudo pkill mysqld
sudo service mysql restart
其中一些步骤可能是不必要的,但这就是我在从旧灯服务器导入 mysqldump 文件后在 Ubuntu Server 13.10 上成功重置 mysql root 用户密码的方法
【讨论】:
对于 mysql 5.7.X,密码列已更改为 authentication_string,其余的对我有用:)【参考方案2】:我的问题是我只能从以 root 身份登录的 CLI 访问 mysql。
【讨论】:
但这是为什么呢?【参考方案3】:一旦你杀死了mysqld进程,你需要创建一个/var/run/mysqld目录供MySQL进程用来存储和访问一个socket文件:
$ sudo mkdir -p /var/run/mysqld
$ sudo chown mysql:mysql /var/run/mysqld
很多答案都缺少这一点。然后,您可以使用 --skip-grant-tables 选项成功启动 mysql 进程。你可以运行命令:
$ jobs
在继续之前确认进程正在运行。
N/B 这是在 Ubuntu 18.04
上【讨论】:
以上是关于全新的 MYSQL 安装,用户“root”的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
用户“root@localhost”的访问被拒绝(使用密码:否)
用户'root'@'localhost'的MYSQL访问被拒绝