(四)MySQL安全機制和日誌管理(mysql運維)

學習預覽:

(一)mysql 運維基礎篇(Linux雲計算從入門到精通)

(二)mysql 索引和視圖(數據庫運維基礎補充)

(三)mysql 觸發器、存儲過程和函數(數據庫運維基礎補充)

(四)MySQL安全機制和日誌管理(mysql運維)

(五)mysql數據備份—物理備份(完備+lvm快照+xtrabackup)+邏輯備份(mysqldump+導入導出)

(六)mysql複製技術—M-S主從配置(傳統+GTID)+M-M-S-S主從配置(GTID)

(七)mysql中間件mycat配置和部署(基於M-M-S-S)

(八) 數據庫集羣技術—Galera Cluster安裝與配置

(九)數據庫集羣技術Galera+mycat(數據庫運維學習終章)


CONTEND

一、mysql安全機制

1.1 MySQL權限表

1.2 MySQL用戶管理

1.3 MySQL權限管理

 二、MySQL日誌管理

2.1 錯誤日誌

2.2 二進制日誌(binlog)

2.3 slow log(慢日誌)


一、mysql安全機制

1.1 MySQL權限表

我們主要負責以下四種權限表的設置:

mysql.user                        Global level
            用戶字段
            權限字段
            安全字段
            資源控制字段

        mysql.db                          Database level
            用戶字段
            權限字段

        mysql.tables_priv            Table level
        mysql.columns_priv        Column level

1.2 MySQL用戶管理

(1)1.登錄和退出MySQL

 示例:
mysql -h192.168.5.240 -P 3306 -u root -p123 mysql -e 'select user,host from user'
-h 指定主機名                          [默認爲localhost]
-P MySQL服務器端口              [默認3306]
-u指定用戶名                           [默認root]
-p指定登錄密碼                       [默認爲空密碼]
此處mysql爲指定登錄的數據庫
-e接SQL語句


(2)創建用戶

以前有的版本好像可以直接用grant同時創建用戶並授權的,我這個版本並不支持,不清楚的話用help看看語法。
CREATE USER語句創建,接着授權,後面在介紹授權的細節。對了,由於MySQL8.0之後的加密規則爲caching_sha2_password.而在此之前的加密規則爲mysql_native_password。要想其他客戶端連接的話,需要加上mysql_native_password哦,如下圖:

create user 'user1'@'localhost' identified  with mysql_native_password by 'Root@123';--創建用戶

grant all on *.* to 'user1'@'localhost' ; --授權然後自己登陸試試

select * from user\G  --可以在user表中查看自己創建的用戶信息

(3)刪除用戶

drop user 'user1'@'localhost';

(4)修改用戶密碼(我發現不同版本的mysql的設置語法不太一樣,不清楚用help)

#root修改自己的密碼,直接在終端修改
[root@Centos7-host1 ~]# mysqladmin -uroot -p'Root@123' password 'Root@321'

#或者在mysql裏修改,以下兩種都可以
mysql> alter user root@localhost identified by 'Root@123';
mysql> set password for root@localhost='Root@123';


#root修改其他用戶密碼
mysql> create user 'root1'@'localhost' identified  with mysql_native_password by 'Root@123';--創建用戶

mysql> grant all on *.* to 'root1'@'localhost' ; --授權然後自己登陸試試

mysql> set password for [email protected]='Root@321' --修改密碼再重新登錄

#用戶修改自己的密碼
mysql> set password='Root@123';

1.3 MySQL權限管理

權限應用的順序:user ==> db ==> table_priv ==> columns_priv

 

示例:

create user 'admin1'@'localhost' identified with mysql_native_password by 'Root@123';

create user 'admin2'@'192.168.119.%' identified with mysql_native_password by 'Root@123';

create user 'admin3'@'192.168.119.156' identified with mysql_native_password by 'Root@123';

create user 'admin4'@'192.168.119.158' identified with mysql_native_password by 'Root@123';

grant all on *.* to admin1@localhost with grant option; --賦予admin所有權限,這個一般不建議

grant all on bbs.* to admin2@'192.168.119.%' ; --賦予admin2對bbs數據庫的管理權限

grant all on bbs.user to admin3@'192.168.119.156' ;--只賦予admin3對bbs數據庫中user表的管理權限

grant select(id),insert(name,age) on bbs.user to admin4@'192.168.119.158';--針對字段了,不過這個太變態了,很少用

 

刪除用戶很簡單: drop user admin1@'localhost';

 二、MySQL日誌管理

2.1 錯誤日誌

  配置方式:在配置文件中(my.cnf)中添加log_error=path 即可。錯誤日誌默認就是開啓的,默認存放在/var/log/mysqld.log下面,具體位置可通過查看/etc/my.conf文件得知。在運行mysql時候出現問題可通過查看該日誌助於排錯。

log-error=/var/log/mysqld.log 後面試錯誤日誌的存儲路徑#

2.2 二進制日誌(binlog)

二進制日誌作用是增量備份,數據恢復。他記錄了數據庫所有變化的操作,如DDL、DCL、DML,其實就是SQL語句

(1)配置介紹

server-id=6  #主從複製需要用到
log_bin=/var/log/binlog/mysql-bin #指定存放位置mysql-bin名稱前綴
binlog_format=row #日誌格式

#這個文件夾需要自己創的,並且授權給mysql用戶,重啓生效
[root@Centos7-host1 ~]# mkdir /var/log/binlog/
[root@Centos7-host1 ~]# chown mysql.mysql /var/log/binlog/
[root@Centos7-host1 ~]# systemctl restart mysqld

 

(2) 二進制日誌格式

  • DDL和DCL,以statement(語句)方式直接記錄SQL
  • DML(insert、update、delete),記錄的是已經提交的事物
  • SBR :statement,記錄具體語句(5.6以下版本常用)
  • RBR :Row ,記錄數據行的變化(常用)
  • MBR :mixed,混合模式(一般不用)

(3) 日誌內容

以事件(event) 作爲記錄的最小單元

以下(截取)爲一個事件,以一個at開始,到下一個at結束

[root@Centos7-host1 ~]# mysqlbinlog /var/log/binlog/mysql-bin.000001 
# at 4
#200410 18:05:57 server id 6  end_log_pos 124 CRC32 0x7eccf0b6 	Start: binlog v 4, server v 8.0.19 created 200410 18:05:57 at startup
# at 124

(4)我們可以在mysql客戶端查看二進制的基本情況(ctrl+z==>fg在shell和mysql客戶端之間切換)

#查看有哪些二進制日誌
mysql> show binary logs;
+------------------+-----------+-----------+
| Log_name         | File_size | Encrypted |
+------------------+-----------+-----------+
| mysql-bin.000001 |       178 | No        |
| mysql-bin.000002 |       155 | No        |
+------------------+-----------+-----------+

#刷新
mysql> flush logs;

mysql> show binary logs;
+------------------+-----------+-----------+
| Log_name         | File_size | Encrypted |
+------------------+-----------+-----------+
| mysql-bin.000001 |       178 | No        |
| mysql-bin.000002 |       202 | No        |
| mysql-bin.000003 |       155 | No        |
+------------------+-----------+-----------+

#查看正在使用的二進制日誌
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      155 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

#查看某二進制日誌的事件信息
mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+----------------+-----------+-------------+-----------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                              |
+------------------+-----+----------------+-----------+-------------+-----------------------------------+
| mysql-bin.000001 |   4 | Format_desc    |         6 |         124 | Server ver: 8.0.19, Binlog ver: 4 |
| mysql-bin.000001 | 124 | Previous_gtids |         6 |         155 |                                   |
| mysql-bin.000001 | 155 | Stop           |         6 |         178 |                                   |
+------------------+-----+----------------+-----------+-------------+------------------

(5)二進制日誌的截取

注意:重啓mysqld和flush logs會截斷,reset master會刪除所有的binlog,這個要謹慎,否則以後有問題就沒法恢復了。

關於截取binlog有以下幾種方法,一般選擇position截取,然後進行恢復,關於數據恢復我會在在後面備份中學習總結下哦。

截取全部
# mysqlbinlog mysql-bin.000001 
按datetime截取
# mysqlbinlog mysql-bin.000003 --start-datetime="2004-10-01 18:29:59"
# mysqlbinlog mysql-bin.000003 --stop-datetime="2004-10-02 18:29:59"
# mysqlbinlog mysql-bin.000003 --start-datetime="2004-10-01 18:29:59" --stop-datetime="2004-10-02 18:29:59"

按position截取
# mysqlbinlog mysql-bin.000003 --start-position=260
# mysqlbinlog mysql-bin.000003 --stop-position=260
# mysqlbinlog mysql-bin.000003 --start-position=260 --stop-position=360

2.3 slow log(慢日誌)

作用:記錄MYSQL運行期間執行較慢的語句,這樣可以告訴開發者哪裏有問題。

(1)配置情況

slow_query_log=1 #打開慢日誌
slow_query_log_file=/var/log/mysql_slow/slow.log #默認路徑可手動指定
long_query_time=5 #超過多長時間被定義爲慢語句

 mkdir /var/log/mysql_slow
 chown mysql.mysql /var/log/mysql_slow/
 systemctl restart mysqld

(2)查看慢日誌是否打開,slow_query_log 狀態爲ON 表示打開。

mysql> show variables like '%slow%';

+---------------------------+------------------------------+
| Variable_name             | Value                        |
+---------------------------+------------------------------+
| log_slow_admin_statements | OFF                          |
| log_slow_extra            | OFF                          |
| log_slow_slave_statements | OFF                          |
| slow_launch_time          | 2                            |
| slow_query_log            | ON                           |
| slow_query_log_file       | /var/log/mysql_slow/slow.log |
+---------------------------+------------------------------+

(3) 查看慢日誌記錄時間

當查詢語句大於等於long_query_time這個值得時間(單位S)就會被定義爲查詢慢的語句,就會被慢日誌記錄起來

mysql> show variables like '%long%';
+----------------------------------------------------------+----------+
| Variable_name                                            | Value    |
+----------------------------------------------------------+----------+
| long_query_time                                          | 5.000000 |
| performance_schema_events_stages_history_long_size       | 10000    |
| performance_schema_events_statements_history_long_size   | 10000    |
| performance_schema_events_transactions_history_long_size | 10000    |
| performance_schema_events_waits_history_long_size        | 10000    |
+----------------------------------------------------------+----------+

(4)慢日誌測試

mysql> select benchmark(500000000,2*3); #就是一個函數,讓2*3計算這麼多次
+--------------------------+
| benchmark(500000000,2*3) |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (7.88 sec)

#查看慢日誌是否有記錄
tail /var/log/mysql_slow/slow.log 

#或者用這個查詢
mysqldumpslow -s c -t 3 slow.log 

先簡單瞭解概念,後面我們在備份恢復中再詳細學習一番😀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章