当前位置:   article > 正文

MySQL之体系结构_mysql体系结构

mysql体系结构

一、 MySQL系统体系结构
1.MySQL系统体系结构
1.1 数据库
1.2 数据库实例
1.3 MySQL体系结构
1.4 逻辑存储结构
1.5 MySQL物理存储结构
二、 MySQL主要文件
1.慢查询日志
1.1 慢查询日志相关参数:
1.2 慢查询日志测试
2. 通用日志(generic_log)与审计
1.1 通用日志作用
1.2 审计插件
1.3 mcafee Audit Plugin安装

一、 MySQL系统体系结构

1.MySQL系统体系结构

1.1 数据库

  • 数据库(数据库文件)是一个或者一组二进制文件,通常来说存在与文件系统之上。

1.2 数据库实例

  • 由数据库后台进程/线程以及一个共享内存区组成
  • 共享内存可以被运行的后台进程/线程所共享
  • 数据库实例才是真正用来操作数据库文件
  • 注意:MySQL中,数据库实例和数据库是一一对应的。没有Oracle的一对多(RAC)的机制。

1.3 MySQL体系结构

  • 单进程多线程结构

  • 不会影响MySQL的性能,看程序如何写。(多进程程序,进程间通信开销大于多线程)

  • 存储引擎的概念

    • 可以理解成文件系统,例如FAT32, NTFS, EXT4。
    • 一个表是一个分区,引擎就是分区的文件系统 存储引擎的对象就是
    • show tables; 可以看到每个表对应的是上面引擎(Engine)
    • 除了特殊情况,我们现在就只考虑INNODB
  • 体系结构图

    体系结构

1.4 逻辑存储结构

  • MySQL逻辑存储结构
    • instance
    • database
    • schema
    • table
    • view
    • 一个DB对应一个schema
    • 一个DB对应一个文件夹
    • 一个表对应一组文件
  1. |--> table1 --- | view1 |
  2. MySQL Instance -----> Database ----> Schema ---> |--> table2 --- | view2 |
  3. |--> table3 --- | View3 |
  4. 注意: MySQL中一个Database对应一个Schema

1.5 MySQL物理存储结构

  • MySQL配置文件
    • datadir
      • 存储数据二进制文件的路径
  • 表结构的组成
    • frm:表结构定义文件 MYI:索引文件
    • MYD:数据文件 可以用hexdump -c XXX.frm查看二 进制文件(意义不大)
    • show create table tablename;
    • mysqlfrm (utilities工具包)
shell> mysqlfrm --diagnostic /data/mysql_data/aaa/.a.frm #可将frm文件转成create table的语句 
  • 错误日志文件
    • log_err 建议配置成统一的名字,方便定位错误
  • 慢查询日志文件
    • 将运行超过某一个时间阈值的SQL语句记录到文件
      • MySQL < 5.1 :以秒为单位
      • MySQL >= 5.1 : 以毫秒为单位
      • MySQL >= 5.5 : 可以将慢查询日志记录到表
      • MySQL >= 5.6 : 以更细的粒度记录慢查询
      • MySQL >= 5.7 : 增加timestamps支持
    • slow_query_log_file
      • 建议配置成统一的名字,用于优化查询
  • 通用日志作用
    • 可以记录数据库所有相关操作
    • 参数:general_log
    • 默认文件名:机器名.log
    • 同样可以将日志保存到表
    • mysql.general_log
    • 开启性能下降明显

二、 MySQL主要文件

1.慢查询日志

1.1 慢查询日志相关参数:

  • slow_query_log

    • 是否开启慢查询日志
  • slow_query_log_file

    • 慢查询日志文件名, 在my.cnf我们已经定义为slow.log,默认是 机器名-slow.log
  • long_query_time

    • 制定慢查询阈值, 单位是秒,且当版本 >=5.5.X,支持毫秒。例如0.5即为500ms
    • 大于该值,不包括值本身。例如该值为2,则执行时间正好等于2的SQL语句不会记录
  • log_queries_not_using_indexes

    • 没有使用索引的SQL记录到慢查询日志
      • 如果一开始因为数据少,查表快,耗时的SQL语句没被记录,当数据量大时,该SQL可能会执行很长时间
      • 需要测试阶段就要发现问题,减小上线后出现问题的概率
  • log_throttle_queries_not_using_indexes

    • 限制每分钟内,在慢查询日志中,去记录没有使用索引的SQL语句的次数;版本需要>=5.6.X
      • 因为没有使用索引的SQL可能会短时间重复执行,为了避免日志快速增大,限制每分钟的记录次数
  • min_examined_row_limit

    • 扫描记录少于该值的SQL不记录到慢查询日志
      • 结合去记录没有使用索引的SQL语句的例子,有可能存在某一个表,数据量维持在百行左右,且没有建立索引。这种表即使不建立索引,查询也很快,扫描记录很小,如果确定有这种表,则可以通过此参数设置,将这个SQL不记录到慢查询日志。
  • log_slow_admin_statements

    • 记录超时的管理操作SQL到慢查询日志,比如ALTER/ANALYZE TABLE
  • log_output

    • 慢查询日志的格式,[FILE | TABLE | NONE],默认是FILE;版本>=5.5
    • 如果设置为TABLE,则记录的到mysql.slow_log
  • log_slow_slave_statements

    • 在从服务器上开启慢查询日志
  • log_timestamps

    • 写入时区信息。可根据需求记录UTC时间或者服务器本地系统时间

1.2 慢查询日志测试

  • 查看慢查询记录的相关参数

    • 终端A
  1. root@gczheng 00:01: [(none)]> select version();
  2. +------------+
  3. | version() |
  4. +------------+
  5. | 5.7.18-log |
  6. +------------+
  7. 1 row in set (0.00 sec)
  8. root@gczheng 00:02: [(none)]> show variables like "slow%";
  9. +---------------------+------------------------+
  10. | Variable_name | Value |
  11. +---------------------+------------------------+
  12. | slow_launch_time | 2 |
  13. | slow_query_log | ON | --slow_query_log已打开
  14. | slow_query_log_file | /r2/mysqldata/slow.log | --slow日志位置
  15. +---------------------+------------------------+
  16. 3 rows in set (0.01 sec)
  17. root@gczheng 00:03: [(none)]> show variables like "long_query%";
  18. +-----------------+----------+
  19. | Variable_name | Value |
  20. +-----------------+----------+
  21. | long_query_time | 1.000000 | -- my.cnf 中该值设置为2
  22. +-----------------+----------+
  23. 1 row in set (0.01 sec)
  24. root@gczheng 00:03: [(none)]> show variables like "min_ex%";
  25. +------------------------+-------+
  26. | Variable_name | Value |
  27. +------------------------+-------+
  28. | min_examined_row_limit | 0 | -- my.cnf中未配置,默认值为0
  29. +------------------------+-------+
  30. 1 row in set (0.00 sec)
  • 查看慢查询日志

    • 终端B
  1. [root@rhel7 mysqldata]# tail -f /r2/mysqldata/slow.log
  2. bin/mysqld, Version: 5.7.18-log (MySQL Community Server (GPL)). started with:
  3. Tcp port: 3306 Unix socket: /r2/mysqldata/mysql.sock
  4. Time Id Command Argument
  • 进行模拟耗时操作

    • 终端A
  1. root@gczheng 00:11: [(none)]> select sleep(8);
  2. +----------+
  3. | sleep(8) |
  4. +----------+
  5. | 0 |
  6. +----------+
  7. 1 row in set (8.00 sec)
  • 最终产生慢查询日志

    • 终端B
  1. [root@rhel7 mysqldata]# tail -f /r2/mysqldata/slow.log
  2. bin/mysqld, Version: 5.7.18-log (MySQL Community Server (GPL)). started with:
  3. /usr/local/mysql/bin/mysqld, Version: 5.7.18-log (MySQL Community Server (GPL)). started with:
  4. Tcp port: 3306 Unix socket: /r2/mysqldata/mysql.sock
  5. Time Id Command Argument
  6. # Time: 2017-11-23T00:11:20.876205+08:00
  7. # User@Host: root[root] @ localhost [] Id: 3
  8. # Query_time: 8.000251 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
  9. #这个就是min_examined_row_limit
  10. #设置的意义。如my.cnf中设置该值为100
  11. #则这条语句因为Rows_examined < 100,而不会被记录
  12. SET timestamp=1511367080;
  13. select sleep(8);

注意
如果在终端A中set global min_examined_row_limit = 100;, 然后执行select sleep(8),会发现该记录仍然被记录到慢查询日志中。原因是因为set global min_examined_row_limit设置的是全局变量,此次会话不生效。

但是我们上面set global slow_query_log = 1;却是在线生效的,这点有所不通

  • mysqldumpslow
  1. [root@rhel7 mysqldata]# mysqldumpslow slow.log
  2. Reading mysql slow query log from slow.log
  3. Count: 2 Time=15.88s (31s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@localhost
  4. select sleep(N)
  5. Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows=0.0 (0), 0users@0hosts
  6. bin/mysqld, Version: N.N.N-log (MySQL Community Server (GPL)). started with:
  7. [root@rhel7 mysqldata]# mysqldumpslow --help
  8. Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
  9. Parse and summarize the MySQL slow query log. Options are
  10. --verbose verbose
  11. --debug debug
  12. --help write this text to standard output
  13. -v verbose
  14. -d debug
  15. -s ORDER what to sort by (al, at, ar, c, l, r, t), 'at' is default
  16. al: average lock time
  17. ar: average rows sent
  18. at: average query time
  19. c: count
  20. l: lock time
  21. r: rows sent
  22. t: query time
  23. -r reverse the sort order (largest last instead of first)
  24. -t NUM just show the top n queries
  25. -a don't abstract all numbers to N and strings to 'S'
  26. -n NUM abstract numbers with at least n digits within names
  27. -g PATTERN grep: only consider stmts that include this string
  28. -h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
  29. default is '*', i.e. match all
  30. -i NAME name of server instance (if using mysql.server startup script)
  31. -l don't subtract lock time from total time

如果在线上操作,不需要mysqldumpslow去扫整个slow.log, 可以去 tail -n 10000 slow.log > last_10000_slow.log(10000这个数字根据实际情况进行调整),然后进行mysqldumpslow last_10000_slow.log

  • 慢查询日志存入表
  1. mysql> show variables like "log_output%";
  2. +---------------+-------+
  3. | Variable_name | Value |
  4. +---------------+-------+
  5. | log_output | FILE |
  6. +---------------+-------+
  7. 1 row in set (0.00 sec)
  8. mysql> set global log_output="table"; --设置为输出为表
  9. Query OK, 0 rows affected (0.00 sec)
  10. mysql> show variables like "log_output";
  11. +---------------+-------+
  12. | Variable_name | Value |
  13. +---------------+-------+
  14. | log_output | TABLE |
  15. +---------------+-------+
  16. 1 row in set (0.00 sec)
  17. mysql> show variables like "slow_query_log";
  18. +----------------+-------+
  19. | Variable_name | Value |
  20. +----------------+-------+
  21. | slow_query_log | ON |
  22. +----------------+-------+
  23. 1 row in set (0.00 sec)
  24. mysql> select sleep (11); --执行语句
  25. +------------+
  26. | sleep (11) |
  27. +------------+
  28. | 0 |
  29. +------------+
  30. 1 row in set (11.00 sec)
  31. mysql> select * from mysql.slow_log;
  32. +----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+-------------------+-----------+
  33. | start_time | user_host | query_time | lock_time | rows_sent | rows_examined | db | last_insert_id | insert_id | server_id | sql_text |thread_id |
  34. +----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+-------------------+-----------+
  35. | 2017-11-23 16:58:23.873261 | root[root] @ localhost [] | 00:00:11.000196 | 00:00:00.000000 | 1 | 0 | | 0 | 0 | 168 | select sleep (11) | 314459 |
  36. +----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+-------------------+-----------+
  37. 1 row in set (0.00 sec)
  38. --显示表结构
  39. mysql> show create table mysql.slow_log \G;
  40. *************************** 1. row ***************************
  41. Table: slow_log
  42. Create Table: CREATE TABLE `slow_log` (
  43. `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  44. `user_host` mediumtext NOT NULL,
  45. `query_time` time(6) NOT NULL,
  46. `lock_time` time(6) NOT NULL,
  47. `rows_sent` int(11) NOT NULL,
  48. `rows_examined` int(11) NOT NULL,
  49. `db` varchar(512) NOT NULL,
  50. `last_insert_id` int(11) NOT NULL,
  51. `insert_id` int(11) NOT NULL,
  52. `server_id` int(10) unsigned NOT NULL,
  53. `sql_text` mediumblob NOT NULL,
  54. `thread_id` bigint(21) unsigned NOT NULL
  55. ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' --ENGINE=CSV 这里使用的是CSV的引擎,性能较差
  56. 1 row in set (0.00 sec)
  57. ERROR:
  58. No query specified
  59. -- 建议将slow_log表的存储引擎改成MyISAM
  60. mysql> alter table mysql.slow_log engine = innodb;
  61. ERROR 1580 (HY000): You cannot 'ALTER' a log table if logging is enabled --无法转化为innodb引擎
  62. mysql> alter table mysql.slow_log engine = myisam;
  63. ERROR 1580 (HY000): You cannot 'ALTER' a log table if logging is enabled -- 提示我正在记录日志中,不能转换myisam引擎
  64. mysql> set global slow_query_log = 0; -- 先停止记录日志
  65. Query OK, 0 rows affected (0.01 sec)
  66. mysql> alter table mysql.slow_log engine = innodb;
  67. ERROR 1579 (HY000): This storage engine cannot be used for log tables --显示不支持innodb引擎
  68. mysql> alter table mysql.slow_log engine = myisam; -- 转换表的myisam引擎
  69. Query OK, 2 rows affected (5.05 sec)
  70. Records: 2 Duplicates: 0 Warnings: 0
  71. mysql> set global slow_query_log = 1; -- 再开启记录日志
  72. Query OK, 0 rows affected (0.00 sec)
  73. mysql> show create table mysql.slow_log;
  74. --表结构
  75. ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log' -- ENGINE转换成myisam引擎

使用TABLE的优势在于方便查询,但是记住当在备份的时候,不要备份慢查询日志的表,避免备份过大。
使用FILE也可以,需要定时清除该文件,避免单文件过大。


2. 通用日志(generic_log)与审计

1.1 通用日志作用

  • 当需要查找某条特定SQL语句,且该SQL语句执行较快,无法记录到slow_log中时,可以开启通用日志generic_log,进行全面记录, 可用于审计Audit

  • A终端设置开启关闭通用日志

  1. mysql> set global general_log=on; --开启通用日志
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> show create table mysql.general_log\G --显示通用日志表结构
  4. *************************** 1. row ***************************
  5. Table: general_log
  6. Create Table: CREATE TABLE `general_log` (
  7. `event_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  8. `user_host` mediumtext NOT NULL,
  9. `thread_id` bigint(21) unsigned NOT NULL,
  10. `server_id` int(10) unsigned NOT NULL,
  11. `command_type` varchar(64) NOT NULL,
  12. `argument` mediumblob NOT NULL
  13. ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
  14. 1 row in set (0.00 sec)
  15. mysql> show variables like '%general_log%';
  16. +------------------+------------------------------------------------------+
  17. | Variable_name | Value |
  18. +------------------+------------------------------------------------------+
  19. | general_log | ON |
  20. | general_log_file | /r2/soft/dbtest/mysql-5.7.18/mysqldata/localhost.log | --日志位置
  21. +------------------+------------------------------------------------------+
  22. 2 rows in set (0.00 sec)
  23. mysql> set global general_log=off; --关闭日志
  • B终端显示日志
  1. [root@localhost-m(252) /r2/soft/dbtest/mysql-5.7.18/mysqldata]# tail -f localhost.log
  2. SUM_TIMER_WRITE_LOW_PRIORITY,
  3. SUM_TIMER_WRITE_NORMAL,
  4. SUM_TIMER_WRITE_EXTERNAL
  5. FROM performance_schema.table_lock_waits_summary_by_table
  6. WHERE OBJECT_SCHEMA NOT IN ('mysql', 'performance_schema', 'information_schema')
  7. 2017-11-23T17:17:28.819250+08:00 315487 Quit
  8. 2017-11-23T17:17:29.304861+08:00 315489 Connect gcdb@192.168.48.168 on using TCP/IP
  9. 2017-11-23T17:17:29.305015+08:00 315489 Query select @@version_comment limit 1
  10. 2017-11-23T17:17:29.305307+08:00 315489 Query show global status where Variable_name in ("Com_select","Com_insert","Com_update","Com_delete","Innodb_buffer_pool_read_requests","Innodb_buffer_pool_reads","Innodb_rows_inserted","Innodb_rows_updated","Innodb_rows_deleted","Innodb_rows_read","Threads_running","Threads_connected","Threads_cached","Threads_created","Bytes_received","Bytes_sent","Innodb_buffer_pool_pages_data","Innodb_buffer_pool_pages_free","Innodb_buffer_pool_pages_dirty","Innodb_buffer_pool_pages_flushed","Innodb_data_reads","Innodb_data_writes","Innodb_data_read","Innodb_data_written","Innodb_os_log_fsyncs","Innodb_os_log_written")
  • 通用日志会记录所有操作,性能下降明显。所以如果需要审计,需要Audit Plugin

1.2 审计插件

  1. - MariaDB Audit 插件
  2. - MySQL社区版本目前没有提供Audit的功能,企业版本提供了该功能。MariaDB 提供了开源的Audit插件,且MySQL也能使用。
  3. - [官方注册下载插件](https://mariadb.com/my_portal/download/audit_plugin)
  4. - Mcaffer插件下载
  5. - https://bintray.com/mcafee/mysql-audit-plugin/release#files 点击Files文件
  6. - [audit-plugin-mysql-5.7-1.1.4-725-linux-x86_64.zip](https://bintray.com/mcafee/mysql-audit-plugin/download_file?file_path=audit-plugin-mysql-5.7-1.1.4-725-linux-x86_64.zip)

1.3 mcafee Audit Plugin安装

MySQL5.7.18 安装mcaffer audit-plugin-mysql-5.7-1.1.4-725 版本审计插件步骤如下:

  1. --显示插件目录
  2. root@gczheng 23:16: [(none)]> show global variables like 'plugin%';
  3. +---------------+------------------------------+
  4. | Variable_name | Value |
  5. +---------------+------------------------------+
  6. | plugin_dir | /usr/local/mysql/lib/plugin/ |
  7. +---------------+------------------------------+
  8. 1 row in set (0.01 sec)
  • 安装审计插件
  1. --解压plugin
  2. [root@rhel7 software]# unzip audit-plugin-mysql-5.7-1.1.4-725-linux-x86_64.zip
  3. Archive: audit-plugin-mysql-5.7-1.1.4-725-linux-x86_64.zip
  4. creating: audit-plugin-mysql-5.7-1.1.4-725/
  5. creating: audit-plugin-mysql-5.7-1.1.4-725/lib/
  6. inflating: audit-plugin-mysql-5.7-1.1.4-725/lib/libaudit_plugin.so
  7. inflating: audit-plugin-mysql-5.7-1.1.4-725/COPYING
  8. inflating: audit-plugin-mysql-5.7-1.1.4-725/THIRDPARTY.txt
  9. inflating: audit-plugin-mysql-5.7-1.1.4-725/README.txt
  10. inflating: audit-plugin-mysql-5.7-1.1.4-725/plugin-name.txt
  11. creating: audit-plugin-mysql-5.7-1.1.4-725/utils/
  12. inflating: audit-plugin-mysql-5.7-1.1.4-725/utils/offset-extract.sh
  13. --拷贝到插件目录
  14. [root@rhel7 software]# cp audit-plugin-mysql-5.7-1.1.4-725/lib/libaudit_plugin.so /usr/local/mysql/lib/plugin/
  15. [root@rhel7 software]# cd /usr/local/mysql/lib/plugin/
  16. [root@rhel7 plugin]# ll libaudit_plugin.so
  17. -rw-r--r-- 1 root root 1542249 Nov 23 23:16 libaudit_plugin.so
  18. --mycnf添加plugin-load=AUDIT=libaudit_plugin.so
  19. [root@rhel7 plugin]# vim /etc/my.cnf
  20. [mysqld]
  21. ......
  22. plugin-load=AUDIT=libaudit_plugin.so --添加配置文件load模式,另外还有install模式:INSTALL PLUGIN AUDIT SONAME 'libaudit_plugin.so';
  23. ......
  24. --重启MySQL
  25. [root@rhel7 plugin]# service mysqld restart
  26. Shutting down MySQL......... SUCCESS!
  27. Starting MySQL........ SUCCESS!
  • 测试插件
  1. --显示插件
  2. root@gczheng 23:25: [(none)]> show plugins;
  3. +----------------------------+----------+--------------------+--------------------+---------+
  4. | Name | Status | Type | Library | License |
  5. +----------------------------+----------+--------------------+--------------------+---------+
  6. | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
  7. .......
  8. | ngram | ACTIVE | FTPARSER | NULL | GPL |
  9. | AUDIT | ACTIVE | AUDIT | libaudit_plugin.so | GPL |
  10. +----------------------------+----------+--------------------+--------------------+---------+
  11. 45 rows in set (0.00 sec)
  12. root@gczheng 23:25: [(none)]> show global status like 'AUDIT_version'; --显示审计日志版本
  13. +---------------+-----------+
  14. | Variable_name | Value |
  15. +---------------+-----------+
  16. | Audit_version | 1.1.4-725 |
  17. +---------------+-----------+
  18. 1 row in set (0.00 sec)
  19. root@gczheng 00:00: [(none)]> show variables like "audit%"\G; -- 查看和audit相关的参数
  20. *************************** 1. row ***************************
  21. Variable_name: audit_before_after
  22. Value: after
  23. *************************** 2. row ***************************
  24. Variable_name: audit_checksum
  25. Value:
  26. *************************** 3. row ***************************
  27. Variable_name: audit_client_capabilities
  28. Value: OFF
  29. *************************** 4. row ***************************
  30. Variable_name: audit_delay_cmds
  31. Value:
  32. *************************** 5. row ***************************
  33. Variable_name: audit_delay_ms
  34. Value: 0
  35. *************************** 6. row ***************************
  36. Variable_name: audit_force_record_logins
  37. Value: OFF
  38. *************************** 7. row ***************************
  39. Variable_name: audit_header_msg
  40. Value: ON
  41. *************************** 8. row ***************************
  42. Variable_name: audit_json_file
  43. Value: OFF
  44. *************************** 9. row ***************************
  45. Variable_name: audit_json_file_bufsize
  46. Value: 1
  47. *************************** 10. row ***************************
  48. Variable_name: audit_json_file_flush
  49. Value: OFF
  50. *************************** 11. row ***************************
  51. Variable_name: audit_json_file_retry
  52. Value: 60
  53. *************************** 12. row ***************************
  54. Variable_name: audit_json_file_sync
  55. Value: 0
  56. *************************** 13. row ***************************
  57. Variable_name: audit_json_log_file
  58. Value: mysql-audit.json
  59. *************************** 14. row ***************************
  60. Variable_name: audit_json_socket
  61. Value: OFF
  62. *************************** 15. row ***************************
  63. Variable_name: audit_json_socket_name
  64. Value: /var/run/db-audit/mysql.audit__r2_mysqldata_3306
  65. *************************** 16. row ***************************
  66. Variable_name: audit_json_socket_retry
  67. Value: 10
  68. *************************** 17. row ***************************
  69. Variable_name: audit_json_socket_write_timeout
  70. Value: 1000
  71. *************************** 18. row ***************************
  72. Variable_name: audit_offsets
  73. Value:
  74. *************************** 19. row ***************************
  75. Variable_name: audit_offsets_by_version
  76. Value: ON
  77. *************************** 20. row ***************************
  78. Variable_name: audit_password_masking_cmds
  79. Value: CREATE_USER,GRANT,SET_OPTION,SLAVE_START,CREATE_SERVER,ALTER_SERVER,CHANGE_MASTER,UPDATE
  80. *************************** 21. row ***************************
  81. Variable_name: audit_password_masking_regex
  82. Value: identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/|\s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)(?<!\\)['|"]
  83. *************************** 22. row ***************************
  84. Variable_name: audit_record_cmds
  85. Value:
  86. *************************** 23. row ***************************
  87. Variable_name: audit_record_objs
  88. Value:
  89. *************************** 24. row ***************************
  90. Variable_name: audit_sess_connect_attrs
  91. Value: ON
  92. *************************** 25. row ***************************
  93. Variable_name: audit_socket_creds
  94. Value: ON
  95. *************************** 26. row ***************************
  96. Variable_name: audit_uninstall_plugin
  97. Value: OFF
  98. *************************** 27. row ***************************
  99. Variable_name: audit_validate_checksum
  100. Value: ON
  101. *************************** 28. row ***************************
  102. Variable_name: audit_validate_offsets_extended
  103. Value: ON
  104. *************************** 29. row ***************************
  105. Variable_name: audit_whitelist_cmds
  106. Value: BEGIN,COMMIT,PING
  107. *************************** 30. row ***************************
  108. Variable_name: audit_whitelist_users
  109. Value:
  110. 30 rows in set (0.00 sec)
  111. root@gczheng 00:05: [(none)]> set global audit_json_log_file='/r2/mysqldata/audit.log'; --配置审计日志路径
  112. Query OK, 0 rows affected (0.00 sec)
  113. root@gczheng 00:04: [(none)]> set global audit_json_file=ON; -- 打开审计功能
  114. Query OK, 0 rows affected (0.00 sec)
  115. root@gczheng 00:11: [(none)]> show variables like "audit_json%";
  116. +---------------------------------+--------------------------------------------------+
  117. | Variable_name | Value |
  118. +---------------------------------+--------------------------------------------------+
  119. | audit_json_file | ON |
  120. | audit_json_file_bufsize | 1 |
  121. | audit_json_file_flush | OFF |
  122. | audit_json_file_retry | 60 |
  123. | audit_json_file_sync | 0 |
  124. | audit_json_log_file | /r2/mysqldata/audit.log |
  125. | audit_json_socket | OFF |
  126. | audit_json_socket_name | /var/run/db-audit/mysql.audit__r2_mysqldata_3306 |
  127. | audit_json_socket_retry | 10 |
  128. | audit_json_socket_write_timeout | 1000 |
  129. +---------------------------------+--------------------------------------------------+
  • 查看审计日志
  1. [root@rhel7 ~]# tailf /r2/mysqldata/audit.log
  2. {"msg-type":"activity","date":"1511453256465","thread-id":"26","query-id":"1562","user":"gcdb","priv_user":"gcdb","ip":"192.168.1.10","host":"192.168.1.10","connect_attrs":{"_os":"Win64","_client_name":"libmysql","_pid":"12056","_thread":"5756","_platform":"x86_64","program_name":"MySQLWorkbench","_client_version":"5.6.23"},"client_port":"14462","cmd":"show_keys","objects":[{"db":"information_schema","name":"/r2/mysqldata/#sql_10da1_0","obj_type":"TABLE"}],"query":"SHOW INDEX FROM `information_schema`.`TABLES`"}
  • 以上仅为基本功能操作,详细的细粒度控制请参考Mcafee文档

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/792011
推荐阅读
相关标签
  

闽ICP备14008679号