mysql - 我可以使用我的本地工具使用 root 帐户连接远程服务器的 mysql。但我无法在远程服务器 `mysql -u root -p xxx`连接

标签 mysql

我可以使用我的本地工具使用 root 帐户连接远程服务器的 mysql。但我无法在远程服务器 mysql -u root -p xxx 进行连接。

# mysql -uroot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

如果我不输入root帐户的密码,我可以直接登录。

但我无法更改任何内容,甚至无法选择数据库:

mysql> use mysql;
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql' 

我也无法停止mysql:

# /usr/bin/mysql stop 
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'stop'

即使我也无法杀死该进程。

[root@w9 templates]# ps -ef | grep mysql
root     23112 31156  0 09:44 pts/1    00:00:00 grep --color=auto mysql
root     31453     1  0 7月02 ?       00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql    31660 31453  0 7月02 ?       00:19:05 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
[root@w9 templates]# ps -ef | grep mysql | grep -v grep
root     31453     1  0 7月02 ?       00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql    31660 31453  0 7月02 ?       00:19:05 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
[root@w9 templates]# kill -QUIT 31453
[root@w9 templates]# ps -ef | grep mysql | grep -v grep
root     31453     1  0 7月02 ?       00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql    31660 31453  0 7月02 ?       00:19:05 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
[root@w9 templates]# 

之后我kill -9 mysql。

<小时/>

我不知道问题是否是由我的命令引起的:

use mysql;

update user set host = '%' where user ='root' and host='localhost';

最佳答案

正如你所说,你可以通过kill -9 PID强制终止你的mysql进程。

然后启动mysql安全模式:

/usr/bin/mysqld_safe --skip-grant-tables

打开另一个 ssh 连接。

在新的 ssh 连接中:

# mysql
mysql>use mysql
mysql>update user set host = 'localhost' where user ='root' and host='%';
mysql>flush privileges;
mysql>exit

现在您可以关闭安全模式窗口:

pkill -KILL -t pts/1

并通过service mysqld start重新启动mysql,如果出现与mysql.sock相关的错误,您可以在SO上找到这些问题解决方案,与此无关问题。

如果是:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

因为是强制kill mysql,所以可以rm /var/lib/mysql/mysql.sock,然后启动

如果遇到此问题:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

sudo setenforce 0 
service mysqld start

关于mysql - 我可以使用我的本地工具使用 root 帐户连接远程服务器的 mysql。但我无法在远程服务器 `mysql -u root -p xxx`连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51398716/

相关文章:

mysql - Web 应用程序数据库设计的替代方案

MySQL 搜索汉字

mysql - 如何使用存储的 MYSQL 过程中的表输出

Java:如何将 MySQL DECIMAL(39,0) IP 地址转换为字符串

mysql - 从操作系统死机的 HDD 移动 mysql 数据库

php - MYSQL使用php和html形式插入数据库

PHP/MySQL - 关于存储时间戳的困惑

mysql - 如何将 R 中的数据框导出到 MySQL 中的表

php - 使用 php 和 mysql 迭代 PDO 查询

php - PDO 多个 SELECT 语句