linux下mysql的用户管理及访问问题_MySQL
linux下有一个很神奇的东西叫yum,只要有源,用yum来安装是一件非常容易的事,什么都不用管,它会为你解决好一些软件依赖的问题。一键安装mysql:
[root@localhost ~]# yum install mysql-server mysql-devel
安装完成后我们就可以使用mysql了:
[root@localhost ~]# /etc/init.d/mysqld startStarting mysqld: [OK][root@localhost ~]# mysql -u root -pEnter password: Welcome to the MySQL monitor.Commands end with ; or /g.Your MySQL connection id is 2Server version: 5.1.73 Source distributionCopyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '/h' for help. Type '/c' to clear the current input statement.mysql> create database db_test;Query OK, 1 row affected (0.02 sec)mysql> grant all on *.* to "user"@"localhost" identified by "123";Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)mysql> quitBye
上面的操作都成功了,包括了登录到mysql,新建数据库和新建一个用户,其实在这个过程中我也遇到了几个问题,花了一些时间,这个后面会说到。先看看mysql的主要配置文件信息:
[root@localhost ~]# cat /etc/my.cnf [mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid
datadir=/var/lib/mysql是mysql数据库的数据库文件存放位置,我刚才新建的数据库db_test也在这个目录下。log-error=/var/log/mysqld.log是数据库输出的日志,数据库日志也是在/var/log目录下。mysql默认的监听端口是3306。
2.mysql的用户管理
安装好mysql后,mysql会自动提供一个空密码的root用户,这个root不是linux的root,而空密码的root用户可以这样登录:mysql -u root没有后面的-p,-u是指用户,-p是指通过密码登录,然后就会提示输入密码。由于安全起见,刚开始应修改密码为一个非空密码,也可以避免以后操作的出错,因为我遇到了好几个问题都是和空密码有联系的。root修改密码:
[root@localhost ~]# mysqladmin -u root -p password 123Enter password:
将root的密码改为123,因为我是已经改过root密码的,所以这里要加上-p还得输入原来的密码。
当然除了root还可以有其他的用户,mysql中用户管理是通过一张表mysql.user,其实这也就是一张数据库表,也是可以通过sql语句来操作的,新建用户有两种方式:
mysql> select user, password from mysql.user;+------+-------------------------------------------+| user | password|+------+-------------------------------------------+| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || root | root|| root | root|| user | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |+------+-------------------------------------------+4 rows in set (0.00 sec)mysql> grant all on *.* to "test"@"localhost" identified by "123";Query OK, 0 rows affected (0.00 sec)mysql> insert into mysql.user(Host, User, Password) values("localhost", "sqluser", password("123"))ser", password("123"));Query OK, 1 row affected, 3 warnings (0.05 sec)mysql> select user, password from mysql.user; +---------+-------------------------------------------+| user| password|+---------+-------------------------------------------+| root| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || root| root|| root| root|| user| *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 || test| *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 || sqluser | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |+---------+-------------------------------------------+6 rows in set (0.01 sec)
第一种方式是grant,可以给用户指定权限,all代表所有的权限,可以改成别的如select,insert,update,delete,后面的*.*代表是所有的数据库都有权限,一般格式为:数据库名.*,test是用户名,123是密码,localhost代表匹配的主机,也可改为别的,如"",空的,代表所有主机。而第二种方式为直接修改数据库表,但是没有指定权限,为了安全起见,应该给用户相应的权限。查看user信息也是一条sql语句,当然还可以用过select * from mysql.user;查看更多的信息,这里的密码是经过加密的。删除用户也就是sql语句:delete from mysql.user where user='XXX';。
当然这样还不行,在操作完user表后,还得加上一条命令flush privileges;刷新系统权限表,不然就算添加的用户也不能用,删除的用户也可以登录。
3.访问mysql问题
访问mysql最常出现问题的就是空密码,刚开始我为了图个方便就没有修改root的密码,让它保持空的,但是在后面的操作就老是出现问题,而且是莫名其妙的问题,所以mysql安装完成后建议将密码改为非空。
问题1.Access denied for user 'root'@'localhost' (using password: NO)
Access denied for user 'root'@'localhost' (using password: YES)
我没有修改root密码,就让他保持为空的,然后通过mysql -u root来登录,登录过几次之后,莫名其妙的报了using password: NO的错误,好吧,那我就通过mysql -u root -p来登录,不用提示输入密码就直接回车,妈蛋还是报了using password: NO的错误。那我就该一下密码吧mysqladmin -u root -p password '123',报了mysqladmin: connect to server at 'localhost' failed,using password: YES的错误。
于是通过mysqld_safe的方式启动,查看了mysql.user的数据,里面的root密码的确为空啊,我靠还能不能一起开心的玩耍啊。
在网上搜了一下,很多人也遇到跟我一样的问题,解决办法就是修改user表将root的密码改为非空:
# /etc/init.d/mysql stop# mysqld_safe --user=mysql --skip-grant-tables --skip-networking mysql -u root mysqlmysql> UPDATE user SET Password=PASSWORD('123') where USER='root';mysql> FLUSH PRIVILEGES;mysql> quit# /etc/init.d/mysqld restart# mysql -uroot -pEnter password:
问题2.ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'db_mysql'
偶然的机会居然用空的root密码登录进去了,然后新建数据库db_mysql,就报了这样一个错误,我明明是root登录的,怎么变成空的了,这是个什么用户,我根本就没创建这个用户啊,然后select * from mysql.user;查看,还真有这样一个用户,用户名和密码都是空的,可是我root登录的居然变成了这样一个空用户,原因我现在都还没搞清楚,但是可以想到和root的密码为空肯定有关系,于是又搜了一下解决办法,将这个空用户删除就OK了:
# service mysqld stop# mysqld_safe --skip-grant-table新开一个终端执行# mysql -u root mysqlmysql> delete from user where USER='';mysql> FLUSH PRIVILEGES;mysql> /q
出现这些问题都和密码为空有关,当我把root密码改为非空之后,再登录进行操作就没有遇到过这些问题了,所以建议安装好mysql后就修改root密码。当然登录的时候密码输错了也会出现using password: YES的错误,这个和空密码无关。
上一篇: Mac开发环境配置
下一篇: ubuntu 终端分屏