13.4-13.6 MySQL用戶管理,經常使用語句,數據庫備份與恢復

13.4 MySQL用戶管理mysql

大綱linux

blob.png

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語句

大綱

blob.png

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;

blob.png

這裏的*這個是用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就是起到了模糊匹配的做用

blob.png

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數據庫備份恢復

大綱

blob.png

1 備份庫

將庫的數據備份重定向至某一個文件

[root@AliKvn ~]# mysqldump -uroot -paminglinux mysql > /tmp/mysqlbak.sql

Warning: Using a password on the command line interface can be insecure.

mysqlmysql庫,此處是庫名


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  < 備份文件

相關文章
相關標籤/搜索