13.4 MySQL用户管理mysql
大纲linux
1 建立user1用户sql
mysql> grant all on *.* to'user1'@'127.0.0.1' identified by '123456a';数据库
Query OK, 0 rows affected (0.01 sec)less
解释:socket
grant all 全部的权限 ide
*.*xx库的xx表,若是是mysql库的表能够表示为mysql.*测试
@'127.0.0.1'受权指定源ip链接。全部ip通配表示为@'%',%表示全部ip大数据
2 利用user1链接MySQLspa
若是没有指定ip链接,会出现如下报错,由于mysql默认socket链接,而user1受权指定了ip链接。
[root@AliKvn ~]# mysql -uuser1 -p123456a
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES)
正确链接方式,
[root@AliKvn ~]# mysql -uuser1 -p123456a -h127.0.0.1
mysql>
2.1 受权localhost链接
利用root进入mysql修改,
[root@AliKvn ~]# mysql -uroot -paminglinux
mysql> grant all on *.* to'user1'@'localhost' identified by '123456a';
2.2 localhost至关于socket,因此在本机用user1链接mysql的话,直接链接
[root@AliKvn ~]# mysql -uuser1 -p123456a
mysql>
2.3 还能够针对性去设置用户给予权限
mysql> grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'192.168.133.1' identified by 'passwd';
3 查看用户的权限
查看当前用户的权限
mysql> show grants
查看user1的权限
mysql> show grants for user1@'127.0.0.1';
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for user1@127.0.0.1 |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user1'@'127.0.0.1' IDENTIFIED BY PASSWORD '*B012E8731FF1DF44F3D8B26837708985278C3CED' |
+-----------------------------------------------------------------------------------------------------------------------+
3.1 添加user2,并针对指定权限
mysql> grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'172.18.171.157' identified by 'passwd';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for user2@'172.18.171.157'
-> ;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for user2@172.18.171.157 |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'172.18.171.157' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDF46B68F5C8B8F25762BCCEF0' |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'172.18.171.157' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
3.2 在不知道用户密码的时候给予一样权限,例如给予172.18.171.158的user2.
咱们复制便可show grants后的信息,更改IP地址172.18.171.158,而后再分别执行便可赋予一样权限。
mysql> GRANT USAGE ON *.* TO 'user2'@'172.18.171.158' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDDF46B68F5C8B8F25762BCCEF0'
-> ;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'172.18.171.158';
Query OK, 0 rows affected (0.00 sec)
3.3 看158的用户权限信息。
mysql> show grants for user2 @'172.18.171.158'
-> ;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for user2@172.18.171.158 |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'172.18.171.158' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDF46B68F5C8B8F25762BCCEF0' |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'172.18.171.158' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
13.5 经常使用sql语句
大纲
1 查看MySQL库里的user表有多少行
select count(*) from mysql.user;
mysql> select count(*) from mysql.user;
+----------+
| count(*) |
+----------+
| 11 |
+----------+
1 row in set (0.00 sec)
count(*)表示表中共有多少行,此处是11行。
这个是用MyIsam 的engine,相对InnoDB会比较快
2 查看表里全部的内容;
mysql> select * from mysql.db\G;
这里的*这个是用InnoDB的Engine 会比较慢,因此要慎用
3 查询单个或多个字段的数据
单个
select db from mysql.db;
mysql> select db from mysql.db;
+---------+
| db |
+---------+
| test |
| test\_% |
| db1 |
| db1 |
| db1 |
+---------+
5 rows in set (0.00 sec)
多个
select db,user from mysql.db;
mysql> select db,user from mysql.db;
+---------+-------+
| db | user |
+---------+-------+
| test | |
| test\_% | |
| db1 | user2 |
| db1 | user2 |
| db1 | user2 |
+---------+-------+
5 rows in set (0.00 sec)
4 模糊查询
mysql> select * from mysql.db where host like '172.%.%';
能够利用\G整洁显示
mysql> select * from mysql.db where host like '172.%.%'\G;
其中like就是起到了模糊匹配的做用
5 插入语句
db1.t1是一个空表,利用这个表测试。
mysql> desc db1.t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(4) | YES | | NULL | |
| name | char(40) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> select * from db1.t1;
Empty set (0.01 sec)
在db1.t1插入数据:两个字段(第一个字段是id,第二个字段是name)
mysql> insert into db1.t1 values (1, 'abc');
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | abc |
+------+------+
1 row in set (0.00 sec)
能够看到已被插入2个字段,分别是1和abc.
插入数据的时候要注意,插入字符串最好加上'',数字能够不用加''。
mysql> insert into db1.t1 values (1,'234');
Query OK, 1 row affected (0.00 sec)
mysql> insert into db1.t1 values (1,234);
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | abc |
| 1 | 234 |
| 1 | 234 |
+------+------+
3 rows in set (0.00 sec)
5.1 更改表的某一行的数据
update db1.t1 set name='aaa' where id=1;
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 1 | aaa |
| 1 | aaa |
+------+------+
3 rows in set (0.01 sec)
更改db1.t1里面匹配id=1 将name改为aaa值
5.2 一样能够匹配name改id
mysql> update db1.t1 set id=2 where name='aaa';
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 2 | aaa |
| 2 | aaa |
| 2 | aaa |
+------+------+
3 rows in set (0.00 sec)
6 清空字段
mysql> delete from db1.t1 where id=2;
mysql> select * from db1.t1;
Empty set (0.00 sec)
6.1 清空表的内容,表结构保留
mysql>truncate table db1.t1;
mysql> desc db1.t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(4) | YES | | NULL | |
| name | char(40) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
6.2 彻底删除表
mysql>drop table db1.t1;
mysql> desc db1.t1;
ERROR 1146 (42S02): Table 'db1.t1' doesn't exist
6.3 干掉数据库
drop database db1;
mysql> drop database db1;
Query OK, 0 rows affected (0.00 sec)
mysql> use db1
ERROR 1049 (42000): Unknown database 'db1'
总结:
尽可能在大数据库,表少用*来查看内容。
慎用删除功能。
13.6 MySQL数据库备份恢复
大纲
1 备份库
将库的数据备份重定向至某一个文件
[root@AliKvn ~]# mysqldump -uroot -paminglinux mysql > /tmp/mysqlbak.sql
Warning: Using a password on the command line interface can be insecure.
mysql是mysql库,此处是库名
1.1 能够先创建一个新库,而后将备份的数据库恢复至新库。
通常也能够直接被封
[root@AliKvn ~]# mysql -uroot -paminglinux -e "create database mysql2"
Warning: Using a password on the command line interface can be insecure.
1.2 恢复库
[root@AliKvn ~]# mysql -uroot -paminglinux mysql2 < /tmp/mysqlbak.sql
Warning: Using a password on the command line interface can be insecure.
1.3 进入mysql2数据库
[root@AliKvn ~]# mysql -uroot -paminglinux mysql2
mysql> select database();
+------------+
| database() |
+------------+
| mysql2 |
+------------+
1 row in set (0.00 sec)
检查,正常状况下,恢复的数据几乎所有都是同样。
2 备份/恢复表
2.1 备份表
在命令中,库名后面添加表名。
[root@AliKvn ~]# mysqldump -uroot -paminglinux mysql user > /tmp/user.sql
Warning: Using a password on the command line interface can be insecure.
2.2 恢复表
[root@AliKvn ~]# mysqldump -uroot -paminglinux mysql user < /tmp/user.sql
3 备份/恢复全部表
备份
[root@AliKvn ~]# mysqldump -uroot -paminglinux -A > /tmp/mysql_all.sql
Warning: Using a password on the command line interface can be insecure.
查看备份文件
#less /tmp/mysql_all.sql
恢复方法同上同样
4 只备份表结构
mysqldump -uroot -paminglinux -d mysql > /tmp/mysql.sql
总结:
备份用mysqldump,恢复用mysql
备份
mysqldump 参数命令> 重定向至xxx文件
mysqldump针对数据库量少的数据
-A 备份全部表结构
-d 备份指定表 命令格式:库 表
恢复
mysql < 备份文件