或者:mysql 1045 access denied for user (using password: YES)
解决方法:
1。 改表法。
可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
mysql -u root -pvmware
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
#查看root密码是否都正确和一样,不然可能报:mysql 1045 access denied for user (using password: YES)
mysql>FLUSH PRIVILEGES;
2. 授权法。
2.1 你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2.2 如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2.3 如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2.4
我用的第一个方法,刚开始发现不行,在网上查了一下,少执行一个语句 mysql>FLUSH RIVILEGES 使修改生效.就可以了
另外一种方法,不过我没有亲自试过的,在youkuaiyun.com上找的,可以看一下.在安装mysql的机器上运行:
1、d:\mysql\bin\>mysql -h localhost -u root //这样应该可以进入MySQL服务器
2、mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION //赋予任何主机访问数据的权限
3、mysql>FLUSH PRIVILEGES //修改生效
4、mysql>EXIT //退出MySQL服务器
这样就可以在其它任何的主机上以root身份登录啦!
############################################
Mysql默认是不可以通过远程机器访问的,通过下面的配置可以开启远程访问.
其实就是两个办法,最终都是为了修改 user 表中 root 对应的 host 字段为 %
1. update user set host=’%’ where user=’root’;
flush privileges;
这种方法不用理会root的密码,经过实际测试,有些情况下执行这条语句会报下面的错误:
ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’
改成这样的就可以执行了
update user set host=’%’ where user=’root’ and host=’localhost’;
也就是把localhost改成了所有主机
如果上面命名还报错,那就查询数据库信息:
mysql> select host, user, password from user;
+-----------------------+-------+-------------------------------------------+
| host | user | password |
+-----------------------+-------+-------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost.localdomain | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| localhost.localdomain | | |
| % | root | |
| % | mysql | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------------------+-------+-------------------------------------------+
8 rows in set (0.11 sec)
我们发现,| % | root | 这一行没有密码,所以把root的密码设置进去。
update user set password=’*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9’ where user=’root’ and host=’%’;
FLUSH PRIVILEGES;
这样就搞定了!!!!!!
2. grant all on *.* to root@’%’ identified by ‘123456′;
*.* 指定给了所有数据库了。
3.修改/etc/mysql/my.conf,修改bind-address,指定为本机实际IP地址,你的my.con修改完大概是如下的样子
[mysqld]
#
# * Basic Settings
#
default-character-set=utf8
default-storage-engine=INNODBuser = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-lockinggrant all on sonardb.* to sonar@’%’ identified by ‘123456′;
grant all on sonardb.* to sonar@localhost identified by ‘123456′;
sonardb替换为你想访问的数据库名,sonar是你的想使用的用户名,123456替换为你的密码,这样就开启了远程访问功能.
bind-address = 192.168.1.107
4、用root登陆mysql执行如下命令
grant all on sonardb.* to sonar@’%’ identified by ‘123456′;
grant all on sonardb.* to sonar@localhost identified by ‘123456′;
sonardb替换为你想访问的数据库名,sonar是你的想使用的用户名,123456替换为你的密码,这样就开启了远程访问功能.