5

I had an old lamp server that I wanted to move to a new machine, so I did a mysqldump, installed Ubuntu Server 13.10 on a new machine, installed lamp during installation, then imported my old mysql databases from the old lamp server. Everything seemed to work perfect right after the mysql import, to my surprise.

Then I tried setting up a cron job to mysqldump all databases every hour to a backup server. Just to make sure it worked, I tried manually running mysqldump on the new server just to make sure it worked (instead of waiting for the cron job to run). Anyways, the mysqldump function would not work, and for some reason now I can't access mysql at all. I tried:

mysql -u root -p

and get "ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)"

Also, none of my PHP scripts can access mysql databases as well. So I am locked out.

I don't know why running mysqldump (or crontab) would lock me out, so I'm thinking it has to do with importing all the databases from my old lamp server (which was running an older version of mysql).

I'm still a linux newbie for the most part so any help would be appreciated!

4

3 回答 3

11

我仍然不知道为什么我被锁定了,但为了解决这个问题,我必须重置 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 用户密码的方式

于 2014-02-10T19:00:23.917 回答
6

我的问题是我只能从以 root 身份登录的 CLI 访问 mysql。

于 2017-08-24T10:28:22.863 回答
5

一旦你杀死了 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上

于 2018-12-11T12:56:13.140 回答