Mysql – 拒绝用户'root'的访问@'xxxx'

我正尝试从本地连接到远程mysql数据库。 最初,我甚至无法打到MySQL数据库。 但是,在注释my.cnf文件中的binding_address并重新启动mysql服务器之后,我现在可以点击它了。

但是现在,我得到一个Access拒绝错误

mysql -u root -h xxxx -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'xxxx' (using password: YES) 

我的IP被列入黑名单吗? 我可以改变,因为我有远程框上的pipe理员权限。 来人帮帮我。

请仔细检查以确保root用户可以访问本地主机以外的主机/ IP。

mysql>使用mysql;
mysql> SELECT主机FROM用户WHERE user ='root';

如果返回“localhost”只有一行,则需要授予您连接的IP的权限。

mysql> GRANT SELECT,INSERT ON mydatabase。* TO'root'@'10.0.0.1';

将mydatabasereplace为要访问的数据库(或放入通配符),然后将IPreplace为客户端连接的地址或子网。

业务的第一顺序是获得完全的权限。 如果你不行,把这行join你的my.cnf并重新启动mysql:

 skip-grant-tables 

我build议做一些小小的调查,看看你有什么用户:

 SELECT user,host,password FROM mysql.user WHERE user = 'root' ORDER BY host ASC; 

这将显示您的用户列表,如下所示:

 mysql> SELECT user,host,password FROM mysql.user WHERE user = 'root' ORDER BY host ASC; +------+------------+-------------------------------------------+ | user | host | password | +------+------------+-------------------------------------------+ | root | 127.0.0.1 | | | root | ::1 | | | root | localhost | *E0AD777475E6713F9B04317EE38888D61042DAC1 | | root | randym-mbp | | +------+------------+-------------------------------------------+ 4 rows in set (0.01 sec) 

你需要在列表中看到localhost。 如果你不这样做,像这样添加它:

 GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION; 

否则,只需更新密码,如下所示:

 SET PASSWORD FOR root@'localhost' = PASSWORD('your_password'); FLUSH PRIVILEGES; 

然后从my.cnf中删除skip-grant-tables并重新启动mysql。

mysql中的密码是按IP设置的。 通常他们只能通过本地主机进行访问,特别是对于root用户。 validation权限表中是否存在root@%条目设置。

如果您确实需要允许远程root用户访问,那么考虑更改用户名,以免人们轻易猜测您的服务器超级用户帐户。

对于类Unix系统,下面的解决scheme为我重设根密码: http : //www.cyberciti.biz/tips/recover-mysql-root-password.html

JIST:

通过以下五个简单步骤恢复MySQL数据库服务器密码:

  1. 停止MySQL服务器进程。

  2. 使用–skip-grant-tables选项启动MySQL(mysqld)服务器/守护进程,以便它不会提示input密码。

  3. 以root用户身份连接到mysql服务器。

  4. 设置新的MySQL根帐户密码,即重置mysql密码。

  5. 退出并重新启动MySQL服务器。

具体命令:(以root用户身份login):

  1. 停止mysql服务

     # /etc/init.d/mysql stop 

    输出:

     Stopping MySQL database server: mysqld. 
  2. 开始MySQL服务器W / O密码:

    使用mysqld_safe:

     mysqld_safe --skip-grant-tables & 

    输出:

     [1] 5988 Starting mysqld daemon with databases from /var/lib/mysql mysqld_safe[6025]: started 
  3. 使用mysql客户端连接到mysql服务器:

     # mysql -u root 

    输出:

     Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> 
  4. 设置新的MySQL root用户密码

     mysql> use mysql; mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root'; mysql> flush privileges; mysql> quit 
  5. 停止MySQL服务器:

     # /etc/init.d/mysql stop 

    输出:

     Stopping MySQL database server: mysqld STOPPING server from pid file /var/run/mysqld/mysqld.pid mysqld_safe[6186]: ended [1]+ Done mysqld_safe --skip-grant-tables 
  6. 启动MySQL服务器并testing它:

     # /etc/init.d/mysql start # mysql -u root -p 

您可能需要授予该IP的特权,例如:

mysql>授予所有权限dbname。*到root @'%'; mysql> FLUSH PRIVILEGES;

授予所有知识产权

不幸的是mysql的权限区分主机和IP。 授予主机名权限不适用于IP,反之亦然。

确保授予您所连接的用户和主机ip /主机名的权限。