13.4 MySQL用户管理
MySQL 创建用户以及授权
grant all on *.* to 'user1' identified by 'passwd';
grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'192.168.133.1' identified by 'passwd';
grant all on db1.* to 'user3'@'%' identified by 'passwd';
show grants;
show grants for user2@192.168.133.1;
grant 不会记录到命令历史记录里,不安全
操作过程
mysql> grant all on *.* to 'user1'@'127.0.0.1' identified by '123456a';
Query OK, 0 rows affected (0.00 sec)
[root@linux-01 ~]# mysql -uuser1 -p123456a -h127.0.0.1
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> grant all on *.* to 'user1'@'localhost' identified by '123456a';
Query OK, 0 rows affected (0.00 sec)
[root@linux-01 ~]# mysql -uuser1 -p123456a
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'192.168.106.1' identified by 'passwd';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on db1.* to 'user3'@'%' identified by 'passwd';
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for user2@'192.168.106.1';
+------------------------------------------------------------------------------------------------------------------+
| Grants for user2@192.168.106.1 |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'192.168.106.1' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDF46B68F5C8B8F25762BCCEF0' |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'192.168.106.1' |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.01 sec)
同一用户,一样密码,在两个不同IP终端登陆
mysql> GRANT USAGE ON *.* TO 'user2'@'192.168.106.2' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDF46B68F5C8B8F25762BCCEF0';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for user2@'192.168.106.2';
13.5 常用sql语句
select count(*) from mysql.user; select * from mysql.db; select db from mysql.db; select db,user from mysql.db; select * from mysql.db where host like '192.168.%'; insert into db1.t1 values (1, 'abc'); update db1.t1 set name='aaa' where id=1; truncate table db1.t1; drop table db1.t1; drop database db1;
操作过程
mysql> use db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select count(*) from mysql.user;
+----------+
| count(*) |
+----------+
| 12 |
+----------+
1 row in set (0.00 sec)
mysql> select * from mysql.db; //耗费资源大,不建议这样操作
mysql> select db from mysql.db;
+---------+
| db |
+---------+
| db1 |
| test |
| test\_% |
| db1 |
+---------+
4 rows in set (0.00 sec)
mysql> select db,user from mysql.db;
+---------+-------+
| db | user |
+---------+-------+
| db1 | user3 |
| test | |
| test\_% | |
| db1 | user2 |
+---------+-------+
4 rows in set (0.00 sec)
mysql> select * from mysql.db where host like '192.168.%';
插入数据:没有做限制时,插入数据可以是相同的ID name
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.00 sec)
mysql> insert into db1.t1 values (1, 'abc');
Query OK, 1 row affected (0.00 sec)
mysql> insert into db1.t1 values (1, '123');
Query OK, 1 row affected (0.00 sec)
mysql> insert into db1.t1 values (1, '123');
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | abc |
| 1 | abc |
| 1 | 123 |
+------+------+
3 rows in set (0.00 sec)
更新表
mysql> update db1.t1 set name='aaa' where id=1;
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 1 | aaa |
| 1 | aaa |
+------+------+
3 rows in set (0.00 sec)
mysql> update db1.t1 set id=2 where name='aaa';
Query OK, 3 rows affected (0.00 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)
删除
mysql> delete from db1.t1 where id=2;
Query OK, 3 rows affected (0.00 sec)
mysql> select * from db1.t1;
Empty set (0.00 sec)
删除清空表,truncate 清空信息,表结构保留;drop 整个清除
工作中尽量不这样操作
mysql> insert into db1.t1 values (1, '123');
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | 123 |
+------+------+
1 row in set (0.00 sec)
mysql> truncate db1.t1;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from db1.t1;
Empty set (0.00 sec)
mysql> drop table t1;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from db1.t1;
ERROR 1146 (42S02): Table 'db1.t1' doesn't exist
mysql> drop database db1;
Query OK, 0 rows affected (0.00 sec)
13.6 MySQL数据库备份恢复
备份库 mysqldump -uroot -p123456 mysql > /tmp/mysql.sql 恢复库 mysql -uroot -p123456 mysql < /tmp/mysql.sql 备份表 mysqldump -uroot -p123456 mysql user > /tmp/user.sql 恢复表 mysql -uroot -p123456 mysql < /tmp/user.sql 备份所有库 mysqldump -uroot -p -A >/tmp/123.sql 只备份表结构 mysqldump -uroot -p123456 -d mysql > /tmp/mysql.sql
操作过程
[root@linux-01 ~]# mysqldump -uroot -paminglinux mysql> /tmp/mysqlbak.sql
Warning: Using a password on the command line interface can be insecure.
[root@linux-01 ~]# mysql -uroot -paminglinux -e "create database mysql2"
Warning: Using a password on the command line interface can be insecure.
[root@linux-01 ~]# mysql -uroot -paminglinux mysql2 < /tmp/mysqlbak.sql
Warning: Using a password on the command line interface can be insecure.
[root@linux-01 ~]# mysqldump -uroot -paminglinux mysql user > /tmp/mysqluser.sql
Warning: Using a password on the command line interface can be insecure.
[root@linux-01 ~]# mysql -uroot -paminglinux mysql2 < /tmp/mysqluser.sql
Warning: Using a password on the command line interface can be insecure.
[root@linux-01 ~]# mysqldump -uroot -paminglinux mysql -A > /tmp/mysql-all.sql
Warning: Using a password on the command line interface can be insecure.