> 数据库 > MySQL >

修改MySQL数据库中root用户的密码及访问权限

一:整理了以下四种在MySQL中修改root密码的方法,可能对大家有所帮助!

方法1: 用SET PASSWORD命令

  mysql -u root

  mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

方法2:用mysqladmin

  mysqladmin -u root password "newpass"

  如果root已经设置过密码,采用如下方法

  mysqladmin -u root password oldpass "newpass"

方法3: 用UPDATE直接编辑user表

  mysql -u root

  mysql> use mysql;

  mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';

  mysql> FLUSH PRIVILEGES;

在丢失root密码的时候,可以这样

  mysqld_safe --skip-grant-tables&

  mysql -u root mysql

  mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='root';

  mysql> FLUSH PRIVILEGES;

 

二:MySQL服务访问权限

mysql默认只能从本地连接,查看了/etc/mysql/my.cnf找到bind-address才发现配置的是127.0.0.1(bind-address=127.0.0.1),直接改为bind-address=192.168.0.xxx(本机ip),然后再查看3306端口打开了,ok,可以正常连接了。

所以除了给账户权限以外 还有修改 /etc/mysql/my.cnf 找到 bind-address = 127.0.0.1 修改为

bind-address = 0.0.0.0 
       重启mysql : 
       sudo /etc/init.d/mysql restart
       否则会报 ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x' (111)

环境:RHEL 5.3

安装了MySQL之后,MySQL的root用户默认是不开放远程访问权限的。为了开放它,只需要两步:

用Linux系统的root用户登录系统,然后:

(1)开放3306端口的远程连接权限:

在“-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited”这一行的上面(注意,一定是上面),添加如下一行:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT


然后重启iptables:

[root@localhost ~]# service iptables restart


(2)为MySQL的root用户添加远程访问权限:

[root@localhost ~]# mysql

mysql> grant all on *.* to root@'%' identified by 'your_password';                
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye

[root@localhost ~]# /etc/init.d/mysql restart

 搞定。


localhost是什么?localhost与127.0.0.1之间的关系
 

localhost 代表的是本地的意思 
一般来说 代表IP地址的话就是127.0.0.1 
也就是说 我 ping 127.0.0.1 == ping localhost

127.0.0.1是代表自己机器的回路地址,无论是否联网,自己机器都是127.0.0.1,127段是保留区段。

localhost与127.0.0.1的关系:
localhost可以看成主机名,127--可以看成主机ip,中间曾在一个主机名到ip地址的映射! 
如果你在mysql中连接数据库,要用localhost而不能用127.0.0.1。因为mysql中对于用户的登陆位置是有限定的,具体见mysql数据库(database名字就是mysql)里面的user表,里面存放的ip和存放的域名是不一样的,mysql进行匹配时不会自动将ip转换成域名的。你授权一个用户从这个ip访问,不等于授权他从这个余名访问。 
1、mysql -h 127.0.0.1 的时候,使用TCP/IP连接, 
      mysql server 认为该连接来自于127.0.0.1或者是"localhost.localdomain" 。
2、mysql -h localhost 的时候,是不使用TCP/IP连接的,而使用Unix socket; 
     此时,mysql server则认为该client是来自"localhost" 。

(责任编辑:IT)