一、安全管理
1、訪問控制
MySQL服務器的安全基礎是: 用戶應該對他們需要的數據具有適當的訪問權限,不能多也不能少。
即用戶不能對過多的數據具有過多的訪問權限。
管理訪問控制需要創建和管理用戶賬號。
在現實的日常工作中,需要創建一系列的賬號,有的用於管理,有的供用戶使用,還有的供開發人員使用。
2、管理用戶
MySQL用戶賬號和信息存儲在名爲mysql
的數據庫中。一般不需要直接訪問mysql數據庫和其中的表。在要獲得所有用戶賬號列表時才需要直接訪問。
USE mysql;
SELECT user FROM user;
2.1、創建用戶賬號
CREATE USER ben IDENTIFIED BY 'p@$$w0rd';
CREATE USER
創建了一個新用戶賬號,在創建用戶賬號時不一定需要給出口令,比不過這裏使用了IDENTIFIED BY
給出了。
重新命名一個用戶賬號:
RENAME USER ben TO bforta;
2.2、刪除用戶賬號
爲了刪除一個用戶賬號(以及其相關的權限)可以使用DROP USER語句
:
DROP USER bforta;
2.3、設置訪問權限
在創建用戶賬號後,必須接着分配訪問權限。新創建的用戶賬號沒有任何的訪問權限,它們能登錄MySQL,但是不能看到數據,不能執行任何數據庫操作。
爲了看到賦予用戶賬號的權限:
MariaDB [mysql]> SHOW GRANTS FOR kobe;
+-----------------------------------------------------------------------------------------------------+
| Grants for kobe@% |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'kobe'@'%' IDENTIFIED BY PASSWORD '*665C8C3B7EC07AEEEF14B405DE85A239BEBFA1F3' |
+-----------------------------------------------------------------------------------------------------+
輸出結果顯示用戶kobe有一個權限USAGE ON *.*
。USAGE表示根本沒有權限,即該結果表示在任意數據庫和任意表上對任何東西沒有權限。
爲了設置權限使用GRANT
語句,需要給出被授予的權限 、被授予訪問權限的數據庫或表、用戶名。
GRANT SELECT ON course.* TO kobe;
使得kobe用戶可以在course數據庫中使用SELECT權限。
MariaDB [(none)]> SHOW GRANTS FOR kobe;
+-----------------------------------------------------------------------------------------------------+
| Grants for kobe@% |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'kobe'@'%' IDENTIFIED BY PASSWORD '*665C8C3B7EC07AEEEF14B405DE85A239BEBFA1F3' |
| GRANT SELECT ON `course`.* TO 'kobe'@'%' |
+-----------------------------------------------------------------------------------------------------+
每個GRANT添加用戶的一個權限,MySQL讀取所有授權,並根據它們確定權限。
GRANT的反操作爲REVOKE用來撤銷特定的權限。
REVOKE SELECT ON course.* FROM kobe;
被撤銷的訪問權限必須存在,否則會出錯。
GRANT 和 REVOKE可在幾個層次上控制訪問權限:
整個服務器,使用 GRANT ALL 和 REVOKE ALL;
整個數據庫,使用 ON database.*;
特定的表,使用 ON database.table;
特定的列;
特定的存儲過程。
可對用戶設定的權限表:
2.4、更改口令
SET PASSWORD
更新用戶口令,新口令必須傳遞到Password()函數
進行加密。
SET PASSWORD FOR kobe = Password('n3w p@$$w0rd');
如果不指定用戶,則SET PASSWORD 更改當前用戶口令
二、數據庫維護
1、備份數據
命令行程序mysqldump
,轉儲所有數據庫內容到某個外部文件。
命令行程序mysqlhostcopy
,從一個數據庫複製所有數據。
可使用SQL語句BACKUP TABLE
或者SELECT INTO OUTFILE
轉儲所有數據到某個外部文件,這倆個語句都接受將要創建的系統文件。 數據可以用RESTORE TABLE
來複原。
在進行備份前需要使用FLUSH TABLES語句
來刷新未寫數據,以保證所有數據被寫到磁盤中。
2、進行數據庫維護
MySQL提供了一些語句來保證 數據庫正確和正確運行。
檢查表鍵是否正確ANALYZE TABLE
MariaDB [course]> ANALYZE TABLE orders;
+---------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------+---------+----------+----------+
| course.orders | analyze | status | OK |
+---------------+---------+----------+----------+
針對許多問題對錶進行檢查CHECK TABLE
。在MyISAM表上還對索引進行檢查。CHECK TABLE支持一系列的用於MyISAM表的方式。CHANGED檢查自最後一次檢查以來改動過的表,EXTENDED執行最徹底的檢查,FAST只檢查爲正常關閉的表。MEDIUM檢查所有被刪除的鏈接並進行鍵檢查。QUICK只進行快速掃描。
MariaDB [course]> CHECK TABLE orders,orderitems;
+-------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------------+-------+----------+----------+
| course.orders | check | status | OK |
| course.orderitems | check | status | OK |
+-------------------+-------+----------+----------+
如果MyISAM表訪問產生不正確和不一致的結果,可能需要用REPAIRE TABLE
來修復相應的表。
如果從一個表中刪除大量數據,應該使用OPTIMIZE TABLE
來收回所用的空間。從而優化表的性能。
3、診斷啓動問題
服務器啓動問題通常在對MySQL配置或服務器本身進行更改時出現。MySQL在這個問題發生時 報告錯誤,但由於多數MySQL服務器是作爲系統進程或服務自動啓動的,這些消息可能 看不到。
在排除系統啓動問題時,首先應該儘量手動啓動服務器,MySQL服務器自身通過在命令行上執行mysqld啓動。
下面是幾個重要的mysqld命令行選項:
--help
顯示幫助
--safe-mode
裝載減去某些最佳配置的服務器
--verbose
顯示全文信息
--version
顯示版本信息然後退出。
4、查看日誌文件
MySQL維護管理員依賴一系列的日誌文件,主要的日誌文件有以下幾種:
- 錯誤日誌。包含啓動和關閉問題以及任意關鍵錯誤的細節,此日誌通常名爲hostname.err,位於data目錄中。此日誌名可以用
--log-error
命令行選項更改。 - 查詢日誌。它記錄所有MySQL活動,在診斷問題時非常有用,此日誌文件可能會很快地變得非常大,因此不應該長期使用。通常名爲hostname.log,位於data目錄。此名字可以用
--log
命令行選項進行修改。 - 二進制日誌。它記錄更新過數據的所有語句。此日誌通常名爲hostname-bin,位於data目錄中。可以用
--log-bin
命令行選項進行修改。 - 緩慢查詢日誌。此日誌記錄執行緩慢的任何查詢。這個日誌在確定數據庫何處優化很有用,此日誌通常命名爲
hostname-slow.log
,位於data目錄中。此名字可以用--log-=slow-queries
命令行選項進行修改。
使用日誌時,可用FLUSH LOGS
語句來刷新和重新開始所有日誌文件。