新安装MYSQL,用户'root'访问被拒绝。

5

我有一台旧的lamp服务器,想将其迁移到新设备上。为此,我进行了mysqldump操作,并在新设备上安装了Ubuntu Server 13.10,安装时也同时进行了lamp的安装,然后从旧的lamp服务器导入了我的旧mysql数据库。令我惊讶的是,所有东西似乎在mysql导入之后都能完美地工作。

接着,我尝试设置一个cron job以便每小时将所有数据库都mysqldump到一个备份服务器。为了确保它能正常工作,我尝试手动在新服务器上运行mysqldump以确保它可以工作(而不是等待cron job运行)。但出现问题了,mysqldump函数无法正常工作,而且由于某种原因我现在无法访问mysql了。我尝试了:

mysql -u root -p

当我运行mysqldump或crontab时,出现了“ERROR 1045 (28000):针对用户'root'@'localhost'的访问被拒绝(使用密码:YES)”的错误提示,同时我的PHP脚本也无法访问mysql数据库。我被锁定了。

我不知道为什么会被锁定,但我猜测与从旧的lamp服务器(该服务器运行较旧版本的mysql)导入所有数据库有关。

由于我还是一个Linux新手,因此非常感谢您提供任何帮助!


1
请看这里:https://dev59.com/kXfZa4cB1Zd3GeqPUq1g - soulemane moumie
我必须使用'sudo'来获取root权限...如果你想摆脱sudo,可以在这里看看https://dev59.com/VVoU5IYBdhLWcg3wp4L7#37241990 - Kuba
3个回答

11

我仍然不知道为什么会被锁定,但为了解决此问题,我不得不重置mysql根密码。我按照这个网站上的指示进行操作(但我对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:

FLUSH PRIVILEGES;

然后停止mysqld进程,并使用经典方式重新启动它:

sudo pkill mysqld
sudo service mysql restart

有些步骤可能是不必要的,但这就是我在从旧的lamp服务器导入mysqldump文件后成功重置了Ubuntu Server 13.10上mysql root用户密码的方法。


对于mysql 5.7.X,密码列已更改为authentication_string,其余部分对我而言都可以正常工作 :) - Salvador P.

6
在我的情况下,问题是我只能在以root用户登录的CLI中访问mysql。

但这是为什么呢? - Houman

6

一旦您杀死了mysqld进程,您需要创建一个/var/run/mysqld目录,供MySQL进程存储和访问套接字文件使用:

$ sudo mkdir -p /var/run/mysqld
$ sudo chown mysql:mysql /var/run/mysqld

在很多答案中缺少的是这一点。然后,您可以成功地使用--skip-grant-tables选项启动mysql进程。您可以运行以下命令:

$ jobs

在继续之前,请确认该进程正在运行。

N/B 这是在Ubuntu 18.04上的操作。


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