Centos6.5安装MySQL5.6

从供应商那边接手一个MySQL数据库(数据库版本为5.7.21 MySQL Community Server (GPL)),在创建账号时遇到了“ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database xxx”错误,如下所示

1、下载mysql最新的源

sudo rpm -Uvh mysql57-community-release-el6-9.noarch.rpm

 

2、安装指定的版本

  • 2.1修改源配置文件

vim /etc/yum.repos.d/mysql-community.repo

  • 2.2启用MySQL5.6的源
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
  • 2.3禁用MySQL5.7的源
# Disable to use MySQL 5.6
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

 

3、查看验证一下源的启用状态

yum repolist all | grep mysql

图片 1

clipboard.png

或者直接查看当前可使用的源包

yum repolist enabled | grep mysql

我这里禁用了MySQL5.7 启用了 MySQL5.6的

图片 2

clipboard.png

mysql> grant all on xxx.* to xxx@'192.168.%' identified by 'xxx';

ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'xxxx'

mysql> 

4、安装MySQL5.6

sudo yum install mysql-community-server

 

5、账号授予权限:

//让mysql从其他客户端(比如Navicat、SysLog等)登陆
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 
FLUSH PRIVILEGES;

//需要注意这里的% 不包括localhost,只包含具体的IP地址,具体原因这里不详述,请自行翻阅资料
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 
FLUSH PRIVILEGES;

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

GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

GRANT命令说明:
ALL PRIVILEGES: 是表示所有权限,你也可以使用select、update等权限提到的权限。
ON: 用来指定权限针对哪些库和表。
.: 中前面的号用来指定数据库名,后面的号用来指定表名。
TO: 表示将权限赋予某个用户。
root@'localhost': 表示root用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。
IDENTIFIED BY: 指定用户的登录密码。
WITH GRANT OPTION: 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其他用户授权。
备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加了一个select权限,然后又给用户添加了一个insert权限,那么该用户就同时拥有了select和insert权限。

照理说,root用户应该有任何权限,那么为什么出现这个错误呢? 查看当前用户为root@localhost,顺便查看了一下各个root账号的权限。如下所示:

6、更新用户密码

 

方法一:mysqladmin

mysqladmin -u root -p[oldpass] password newpass

 

方法二:使用表更新命令

mysql> UPDATE mysql.user SET Password=PASSWORD('新密码') WHERE User='root' and Host='127.0.0.1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> FLUSH PRIVILEGES;

需要注意一定要使用PASSWORD()函数!要不什么后果自己想。

mysql> select current_user() from dual;

+----------------+

| current_user() |

+----------------+

| root@localhost |

+----------------+

1 row in set (0.00 sec

 

mysql> select host,user from user where user='root';

+-----------+----------+

| host      | user     |

+-----------+----------+

| %         | root     |

| 127.0.0.1 | root     |

| ::1       | root     |

| localhost | root     |

+-----------+----------+

7 rows in set (0.00 sec)

 

mysql>  show grants for root@'localhost';

+--------------------------------------------------------------+

| Grants for root@localhost                                    |

+--------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'            |

| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |

+--------------------------------------------------------------+

2 rows in set (0.00 sec)

 

mysql> show grants for root@'127.0.0.1';

+---------------------------------------------------------------------+

| Grants for root@127.0.0.1                                           |

+---------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION |

+---------------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> show grants for root@'%';

+-------------------------------------------+

| Grants for root@%                         |

+-------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' |

+-------------------------------------------+

1 row in set (0.00 sec)
方法三:set password

mysql> set password for 'root'@'localhost'=PASSWORD('新密码');
Query OK, 0 rows affected (0.00 sec)

备注:更新完毕使用FLUSH PRIVILEGES;命令刷新权限,否则还是原来的密码!

本文由金沙官网线上发布于数据库,转载请注明出处:Centos6.5安装MySQL5.6

您可能还会对下面的文章感兴趣: