我正尝试从本地连接到远程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数据库服务器密码:
停止MySQL服务器进程。
使用–skip-grant-tables选项启动MySQL(mysqld)服务器/守护进程,以便它不会提示input密码。
以root用户身份连接到mysql服务器。
设置新的MySQL根帐户密码,即重置mysql密码。
退出并重新启动MySQL服务器。
具体命令:(以root用户身份login):
停止mysql服务
# /etc/init.d/mysql stop
输出:
Stopping MySQL database server: mysqld.
开始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
使用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>
设置新的MySQL root用户密码
mysql> use mysql; mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root'; mysql> flush privileges; mysql> quit
停止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
启动MySQL服务器并testing它:
# /etc/init.d/mysql start # mysql -u root -p
您可能需要授予该IP的特权,例如:
mysql>授予所有权限dbname。*到root @'%'; mysql> FLUSH PRIVILEGES;
授予所有知识产权
不幸的是mysql的权限区分主机和IP。 授予主机名权限不适用于IP,反之亦然。
确保授予您所连接的用户和主机ip /主机名的权限。