1 登录和退出MySQL服务器
(1)登录
mysql 参数
mysql命令的常用参数:
参数 | 描述 |
---|---|
-h,- -host=name | 指定主机名或ip,默认是localhost |
-u,- -user=name | 指定用户名 |
-p(小写),- -password[=pwd] | 指定登录密码。如果该字段后面有一段字符,则该段字符串将作为密码直接登录。如果后面没有内容,则登录时会提示输入密码。注意该参数后面的字符串和-p之间不能有空格 |
-P(大写),- -port=# | 指定mysql服务器的端口号,默认为3306 |
-V(大写),- -version | 输出版本信息并且退出 |
数据库名 | 可以在命令的最后指定数据库名 |
-e | 指定了该参数,将在登录后执行-e后面的命令或sql语句并退出 |
例如:
C:\Users\asus>mysql -u root -p -h localhost test -e"desc book;"
Enter password: ****
+------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| bookid | int(11) | NO | | NULL | |
| bookname | varchar(255) | NO | MUL | NULL | |
| authors | varchar(255) | NO | | NULL | |
| info | varchar(255) | YES | | NULL | |
| comment | varchar(255) | YES | | NULL | |
| year_publication | year(4) | NO | MUL | NULL | |
+------------------+--------------+------+-----+---------+-------+
(2)退出服务器
输入quit或exit即可。
2 新建普通用户
2.1 使用CREATE USER语句
执行CREATE USER或GRANT语句时,服务器会修改相应的用户授权表,添加或修改用户及其权限。
CREATE USER user_specification
[,user_specification]...
user_specification:
user@host
[
IDENTIFIED BY [PASSWORD] 'password'
|IDENTIFIED WITH auth_plugin [AS 'auth_string']
]
- user:用户的名称
- host:允许登录的用户主机名称
- IDENTIFIED BY:用来设置用户的密码
- [PASSWORD]:表示使用哈希值设置密码,可选
- ‘password’:用户登录的普通明文密码
- IDENTIFIED WITH:为用户指定一个身份验证插件
- auth_plugin:插件名
- auth_string:该参数将传递给身份验证插件,由该插件解释该参数的意义
例如,创建一个用户,名为jtzeng,密码是jtzeng123,主机名是localhost:
mysql> CREATE USER 'jtzeng'@'localhost' IDENTIFIED BY 'jtzeng123';
Query OK, 0 rows affected (0.00 sec)
如果只指定用户名部分,主机名部分则默认为'%'(即对所有的主机开发权限)。
如果指定用户登录不需要密码,可以省略IDENTIFIED BY部分。
2.2 使用GRANT语句
CREATE USER语句创建的新用户没有任何权限,还需要使用GRANT语句赋予用户权限。
使用GRANT语句不仅可以创建新用户,还可以在创建的同时对用户授权。推荐使用GRANT语句来创建新用户。
GRANT privileges ON db.table
TO user@host [IDENTIFIED BY 'password'][,user[IDENTIFIED BY 'password']]
[WITH GRANT OPTION];
- privileges:表示赋予用户的权限类型
- db.table:用户权限所在的数据库中的表
- WITH GRANT OPTION:可选,表示对新建立的用户赋予GRANT权限,即该用户可以对其他用户赋予权限。
例如,新建用户testUser,密码testpwd,并授予用户对所有的数据表的SELECT和UPDATE权限:
mysql> GRANT SELECT,UPDATE ON *.* TO 'testUser'@'localhost'
-> IDENTIFIED BY 'testpwd';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT Host,User,Select_priv,Update_priv
-> FROM mysql.user
-> WHERE user='testUser';
+-----------+----------+-------------+-------------+
| Host | User | Select_priv | Update_priv |
+-----------+----------+-------------+-------------+
| localhost | testUser | Y | Y |
+-----------+----------+-------------+-------------+
1 row in set (0.00 sec)
2.3 直接操作MySQL用户表
可以使用INSERT语句向user表中直接插入一条记录来创建一个新的用户,但必须拥有对mysql.user表的INSERT权限。
INSERT INTO mysql.user(Host,User,Password,[privilegelist])
VALUES('host','username',PASSWORD('password'),privilegevaluelist);
privilegelist表示用户的权限,可以有多个权限;PASSWORD()函数为密码加密函数;privilegevaluelist为对应的权限的值,只能取值Y或N。
例子:
mysql> INSERT INTO mysql.user(Host,User,Password)
-> VALUES('localhost','customer1',PASSWORD('customer1'));
Query OK, 1 row affected, 3 warnings (0.01 sec)
mysql> SHOW WARNINGS;
+---------+------+---------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------+
| Warning | 1364 | Field 'ssl_cipher' doesn't have a default value |
| Warning | 1364 | Field 'x509_issuer' doesn't have a default value |
| Warning | 1364 | Field 'x509_subject' doesn't have a default value |
+---------+------+---------------------------------------------------+
3 rows in set (0.00 sec)
出现警告,三个字段在user表中没有默认值。
FLUSH PRIVILEGES;
重新加载授权表。
3 删除普通用户
3.1 DROP USER语句
DROP USER user[,user];
例如:
mysql> DROP USER 'jtzeng'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,password from mysql.user;
+-----------+-----------+-------------------------------------------+
| host | user | password |
+-----------+-----------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| ::1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| localhost | | |
| localhost | testUser | *22CBF14EBDE8814586FF12332FA2B6023A7603BB |
| localhost | customer1 | *73DA97747611396FD898E4A7E42B1097B0780646 |
+-----------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)
3.2 DELETE语句
DELETE FROM MYSQL.user WHERE host='hostname' and user='username';
例如:
mysql> DELETE FROM MYSQL.user WHERE host='localhost' and user='customer1';
Query OK, 1 row affected (0.00 sec)
mysql> select host,user,password from mysql.user;
+-----------+----------+-------------------------------------------+
| host | user | password |
+-----------+----------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| ::1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| localhost | | |
| localhost | testUser | *22CBF14EBDE8814586FF12332FA2B6023A7603BB |
+-----------+----------+-------------------------------------------+
5 rows in set (0.00 sec)
4 root用户修改自己密码
4.1 使用mysqladmin命令
在Windows命令行窗口输入:
mysqladmin -u username -h localhost -p password "新的密码"
例如:
mysqladmin -u root -p password "rootpwd"
Enter password:
按照提示要求输入root用户原来的密码后即可。
4.2 修改mysql.user表
UPDATE myslq.user SET Password=PASSWORD("新的密码") WHERE User="root" AND Host="localhost";
4.3 使用SET语句
直接使用SET PASSWORD语句
SET PASSWORD=PASSWORD("新的密码");
例如,设置当前用户密码:
mysql> SET PASSWORD=PASSWORD("rootpwd");
Query OK, 0 row affected (0.00 sec)
5 root用户修改普通用户密码
5.1 使用SET语句
SET PASSWORD FOR 'user'@'host'=PASSWORD('新的密码');
例如,修改testUser用户的密码为“newpwd”:
mysql> SET PASSWORD FOR 'testUser'@'localhost'=PASSWORD("newpwd");
Query OK, 0 rows affected (0.00 sec)
5.2 使用UPDATE语句
UPDATE MYSQL.user SET Password=PASSWORD("pwd")
WHERE User="username" AND Host="hostname";
例如,修改testUser用户的密码为“newpwd2”:
mysql> UPDATE MYSQL.user SET Password=PASSWORD("newpwd2")
-> WHERE User="testUser" AND Host="localhost";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
5.3 使用GRANT语句(推荐使用)
GRANT USAGE ON *.* TO 'someuser'@'%' IDENTIFIED BY 'somepassword';
例如,修改testUser用户的密码为“newpwd3”:
mysql> GRANT USAGE ON *.* TO 'testUser'@'localhost' IDENTIFIED BY 'newpwd3';
Query OK, 0 rows affected (0.00 sec)
6 普通用户修改密码
SET PASSWORD=PASSWORD("新的密码");
7 root用户密码丢的解决办法
第1步 使用- -skip-grant-tables选项启动MySQL服务
以skip-grant-tables选项启动时,MySQL服务器将不加载权限判断,任何用户都能访问数据库。
(1)windows系统下
mysqld --skip-grant-tables
或者
mysqld-nt --skip-grant-tables
(2)Linux系统下
mysqld_safe --skip-grant-tables user=mysqld
或者
/ect/init.d/mysqld start-mysqld --skip-grant-tables
第2步 使用root用户登录,重新设置密码
例子(window系统下):
(1)使用net stop mysql命令停止mysql服务器。(需要管理员身份打开命令行窗口)
C:\WINDOWS\system32>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
C:\WINDOWS\system32>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。
(2)使用mysqld - -skip-grant-tables启动服务器
C:\WINDOWS\system32>mysqld --skip-grant-tables
2016-02-28 13:09:40 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-02-28 13:09:40 0 [Note] mysqld (mysqld 5.6.24) starting as process 8864 ...
(3)命令运行之后,用户无法输入指令,此时如果在任务管理器中可以看到名称为mysqld的进程,则表示可以受用root用户登录MySQL了。此时重新打开一个命令行窗口,输入:
C:\WINDOWS\system32>mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.24 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
(4)登录成功后,可以使用UPDATE语句或mysqladmin命令重新设置root密码
第3步 加载权限表
重新加载权限表,新密码才生效
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)