mysql用户管理常用语句数据分备份恢复
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql用户管理常用语句数据分备份恢复相关的知识,希望对你有一定的参考价值。
mysql用户管理
创建用户并授权
-
指定登录ip
使用root用户登录录创建授权新用户:
mysql> grant all on . to ‘user1‘@‘127.0.0.1‘ identified by ‘123456‘;
// all 所有操作(增删查改)
// 第一个 通配所有库名,第二个通配所有表名
// user1 为用户名
// 127.0.0.1 指定登录ip,可用通配符%表示所有ip。
// ‘123456’ 为user1用户的登录密码
Query OK, 0 rows affected (0.00 sec)使用user1用户登录,验证:
[[email protected] ~]# mysql -uuser1 -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘user1‘@‘localhost‘ (using password: YES)
// 登录失败,因为mysql默认使用socket登录。需要指定地址。
[[email protected] ~]# mysql -uuser1 -h127.0.0.1 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
.....
mysql>
// 登录成功。其中grant语句是不会记录到命令历史中的。 -
指定登录socket
使用root用户重新对user1用户授权:
mysql> grant all on . to ‘user1‘@‘localhost‘ identified by ‘123456‘;退出root用户,使用user1 用户登录:
[[email protected] ~]# mysql -uuser1 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
.....
mysql>
// 因为指定登录主机为localhost,所以该用户默认使用(监听)本地mysql.socket文件,不需要指定IP即可登录。
针对具体的权限授权
使用root用户登录:
mysql> grant SELECT,UPDATE,INSERT on db1.* to ‘user2‘@‘192.168.159.132‘ identified by ‘123456‘;
// 创建user2用户,并授权其针对db1库中的所有表有SELECT,UPDATE,INSERT 权限。
// user2用户仅能通过ip 192.168.159.132 登录。
Query OK, 0 rows affected (0.00 sec)
查看用户授权信息:
mysql> show grants;
// 查看当前用户的授权信息
mysql> show grants for [email protected];
// 查看指定用户的授权信息
更改授权
使用情况:user2用户不仅需要在192.168.159.132上登录,还需要在192.168.159.133上登录,这时候就需要把授权的命令全部在执行一遍
查看user2具有哪些权限:
mysql> show grants for user2@‘192.168.159.132‘;
+--------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘user2‘@‘192.168.159.132‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO ‘user2‘@‘192.168.159.132‘
+--------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
执行user2的授权命令:
// 将ip改成192.168.159.133
mysql>GRANT USAGE ON *.* TO ‘user2‘@‘192.168.159.132‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘
mysql> GRANT SELECT, INSERT, UPDATE ON `db1`.* TO ‘user2‘@‘192.168.159.132‘;
查看[email protected]的授权:
mysql> show grants for [email protected]‘192.168.159.133‘;
+--------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘user2‘@‘192.168.159.133‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO ‘user2‘@‘192.168.159.133‘
+--------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
// 授权成功后,user3用户就可以在192.168.159.133对db1进行操作。(如不能远程链接,检查以下防火墙规则。)
// user2在两个ip上登录使用的是用一个密码。
// 重新授权时,权限行的内容和操作的库表能修改。
常用sql语句
先用mysql用户登录mysql
mysql> use db1; //切换到db1库
Database changed
mysql> show tables; //查看当前库中有哪些表。
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
+---------------+
1 row in set (0.00 sec)
mysql> select count(*) from mysql.user;
// 查看mysql库中的user表有几行
+----------+
| count(*) |
+----------+
| 15 |
+----------+
1 row in set (0.00 sec)
mysql> select * from mysql.db \G;
// 查看mysql库的db表中的所有内容
// * 表示所有内容,\G是为了让输出内容整齐
*************************** 1. row ***************************
Host: %
Db: test
User:
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: N
Execute_priv: N
Event_priv: Y
Trigger_priv: Y
......
// 这种操作平时尽量不要用,内容多的情况下select*会比较占资源。
mysql> select db from mysql.db;
// 查看db这个字段,在mysql库的db表中
+---------+
| db |
+---------+
| test |
| test\_% |
| db1 |
| db1 |
| db1 |
| db1 |
| db1 |
| db1 |
+---------+
8 rows in set (0.00 sec)
mysql> select db,user from mysql.db;
// 查看db和user字段,在mysql库的db表中
// 需要查看的字段之间用逗号隔开
+---------+-------+
| db | user |
+---------+-------+
| test | |
| test\_% | |
| db1 | user2 |
| db1 | user3 |
| db1 | user4 |
| db1 | user2 |
| db1 | user3 |
| db1 | user2 |
+---------+-------+
8 rows in set (0.00 sec)
mysql> select * from mysql.db where host like ‘192.168.%‘\G;
// 查看所有IP匹配192.168.%的内容,从mysql库的db表中
// like 匹配,
*************************** 1. row ***************************
Host: 192.168.159.131
Db: db1
User: user2
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: N
Create_priv: N
Drop_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Execute_priv: N
Event_priv: N
Trigger_priv: N
......
mysql> create table t1(`id` int(4),`name` char(40));
// 在db1库下创建表ti
// 有id和name两个字段
Query OK, 0 rows affected (0.39 sec)
mysql> insert into db1.t1 values(1,‘abc‘);
// 向t1表中添加一行数据
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.t1;
// 查看t1表中的内容
+------+------+
| id | name |
+------+------+
| 1 | abc |
+------+------+
1 row in set (0.00 sec)
// 添加数据时,字符串尽量加单引号。
mysql> update db1.t1 set name=‘aaa‘ where id=1;
// 更新表中id为1的那一行name 的内容。
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
+------+------+
1 row in set (0.00 sec)
mysql> delete from db1.t1 where id=1;
// 删除表中id为1那一行的内容
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.t1;
Empty set (0.00 sec)
mysql> truncate db1.t1;
// 清空表中的内容,表结构还在
Query OK, 0 rows affected (0.09 sec)
mysql> drop table t1;
// 删除表,整个表都删除,包括内容和表结构
Query OK, 0 rows affected (0.04 sec)
mysql> drop database db1;
// 删除库,整个库都删除,包括表
Query OK, 0 rows affected (0.13 sec)
// 平时尽量少用truncate和drop。
mysql> use mysql;
mysql> delete from user where User=‘user1‘ and Host=‘127.0.0.1‘;
// 删除用户,在删除用户前需先指定用户表
Query OK, 1 row affected (0.06 sec)
mysql数据库备份恢复
-
备份恢复库
[[email protected] ~]# mysqldump -uroot -p123456 mysql >/tmp/mysqlbak.sql
// 备份指定库(mysql库)到/tmp/mysqlbak.sql文件中[[email protected] ~]# mysqldump -uroot -p123456 -A >/rmp/mysqlbak_all.sql
// 备份所有库到/tmp/mysqbak_all.sql 文件中[[email protected] ~]# mysql -uroot -p123456 mysql< /tmp/mysqlbak.sq
// 恢复到mysql库中。也可以恢复到新的库中(需新建库) -
备份恢复表
[[email protected] ~]#mysql -uroot -p123456 mysql user > /tmp/user.sql
// 备份指定表。在库名后空格跟表名就行[[email protected] ~]#mysqldump -uroot -p123456 -d mysql > /tmp/mysql_tb.sql
// 只备份表结构[[email protected] ~]#mysql -uroot -p123456 mysql < /tmp/user.sql
// 恢复的时候不需要加表名// 数据量小用mysqldump备份还可以,备份量大不适用。
以上是关于mysql用户管理常用语句数据分备份恢复的主要内容,如果未能解决你的问题,请参考以下文章
2.MySQL用户管理,常用SQL语句,MySQL数据库备份与恢复
13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复