Introduction to the Percona MySQL Audit Log Plugin_MySQL
Percona has developed a MySQL Audit Log plugin that is now included in Percona Server since the recent5.5and5.6releases. This implementation is alternative to the MySQL Enterprise Audit Log Plugin: Percona re-implemented the Audit Plugin code as GPL as Oracle’s code was closed source. This post is a quick introduction to this plugin.
Installation
There are two ways to install the Percona MySQL Audit Plugin:
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
INSTALL PLUGINaudit_logSONAME'audit_log.so'; |
or in my.cnf
[mysqld]plugin-load="audit_log=audit_log.so"
[mysqld] plugin-load="audit_log=audit_log.so" |
Verify installation
mysql> SHOW PLUGINS/G...*************************** 38. row *************************** Name: audit_logStatus: ACTIVE Type: AUDITLibrary: audit_log.soLicense: GPL38 rows in set (0.00 sec)
mysql>SHOWPLUGINS/G ...***************************38.row*************************** Name: Status: Type:Library: License:38rowsinset(0.00 |
Configuration
Let’s see variables provided by the Percona MySQL Audit Plugin:
mysql> show global variables like 'audit%';+--------------------------+--------------+| Variable_name | Value |+--------------------------+--------------+| audit_log_buffer_size | 1048576 || audit_log_file | audit.log || audit_log_flush | OFF || audit_log_format | OLD || audit_log_policy | ALL || audit_log_rotate_on_size | 0 || audit_log_rotations | 0 || audit_log_strategy | ASYNCHRONOUS |+--------------------------+--------------+7 rows in set (0.00 sec)
mysql>showglobalvariableslike'audit%'; +--------------------------+--------------+ |Variable_name |Value | +--------------------------+--------------+ | |audit_log_file |audit.log | | | |audit_log_policy |ALL | | | | +--------------------------+--------------+ 7rowsinset(0.00 |
The Percona MySQL Audit Plugin can log using the memory buffer to deliver better performance. Messages will be written into memory buffer first and then flushed to file in background. A certain amount of events can be lost in case of server crash or power outage. Another option is to log directly to file without using memory buffer. There is also an option to fsync every event.
Set audit_log_strategy to control log flushing:
- ASYNCHRONOUS log using memory buffer, do not drop events if buffer is full
- PERFORMANCE log using memory buffer, drop events if buffer is full
- SEMISYNCHRONOUS log directly to file, do not fsync every event
- SYNCHRONOUS log directly to file, fsync every event
audit_log_buffer_size specifies the size of memory buffer, it makes sense only for ASYNCHRONOUS and PERFORMANCE strategy.
Variable audit_log_file specifies the file to log into. It’s value can be path relative to datadir or absolute path.
The Percona MySQL Audit Plugin can automatically rotate log file based on size. Set audit_log_rotate_size to enable this feature. File is rotated when log grew in size to specified amount of bytes. Set audit_log_rotations to limit the number of log files to keep.
It is possible to log only logins or only queries by setting audit_log_policy value.
Log file format
Lets see how audit records look like
OLD format (audit_log_format = OLD):
<audit_record utc></audit_record>
"RECORD"="2_2014-04-21T12:34:32" "TIMESTAMP"="2014-04-21T12:34:32 UTC" "CONNECTION_ID"="1" "STATUS"="0" "USER"="root""PRIV_USER"="root" "OS_LOGIN"="""PROXY_USER"="" "HOST"="localhost" "IP"="" "DB"=""/> |
NEW format (audit_log_format = NEW):
<audit_record> <name>Connect</name> <record>17481_2014-04-21T12:39:03</record> <timestamp>2014-04-21T12:39:05 UTC</timestamp> <connection_id>4</connection_id> <status>0</status> <user>root</user> <priv_user>root</priv_user> <os_login></os_login> <proxy_user></proxy_user> <host>localhost</host> <ip></ip> <db>test</db></audit_record>
|
The difference is that the audit record in the OLD format was written as a single element with attributes, while in the NEW format it is written as a single element with sub-elements.
A good idea of what each sub-element means can be found in Audit Plugin API documentation here:https://dev.mysql.com/doc/refman/5.6/en/writing-audit-plugins.html.
Performance
Lets compare performance of different audit_log_strategy modes. I used readonly sysbench on my laptop for it. Workload is CPU-bound with dataset fit in buffer pool and I set number of sysbench threads to the amount for which count of transactions per seconds is maximum.
I got TPS drop for PERFORMANCE and ASYNCHRONOUS strategies around 7%, 9% for SEMISYNCHRONOUS and 98% for SYNCHRONOUS which shows that syncing every logged statement to disk is not the best thing for performance.
Conclusion
Of course any software has bugs and this plugin has plenty of them. Please give it a try and provide us your feedback. Report any issues here:https://bugs.launchpad.net/percona-server.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



The article discusses using MySQL's ALTER TABLE statement to modify tables, including adding/dropping columns, renaming tables/columns, and changing column data types.

InnoDB's full-text search capabilities are very powerful, which can significantly improve database query efficiency and ability to process large amounts of text data. 1) InnoDB implements full-text search through inverted indexing, supporting basic and advanced search queries. 2) Use MATCH and AGAINST keywords to search, support Boolean mode and phrase search. 3) Optimization methods include using word segmentation technology, periodic rebuilding of indexes and adjusting cache size to improve performance and accuracy.

Article discusses configuring SSL/TLS encryption for MySQL, including certificate generation and verification. Main issue is using self-signed certificates' security implications.[Character count: 159]

Article discusses popular MySQL GUI tools like MySQL Workbench and phpMyAdmin, comparing their features and suitability for beginners and advanced users.[159 characters]

Article discusses strategies for handling large datasets in MySQL, including partitioning, sharding, indexing, and query optimization.

Full table scanning may be faster in MySQL than using indexes. Specific cases include: 1) the data volume is small; 2) when the query returns a large amount of data; 3) when the index column is not highly selective; 4) when the complex query. By analyzing query plans, optimizing indexes, avoiding over-index and regularly maintaining tables, you can make the best choices in practical applications.

The difference between clustered index and non-clustered index is: 1. Clustered index stores data rows in the index structure, which is suitable for querying by primary key and range. 2. The non-clustered index stores index key values and pointers to data rows, and is suitable for non-primary key column queries.

Yes, MySQL can be installed on Windows 7, and although Microsoft has stopped supporting Windows 7, MySQL is still compatible with it. However, the following points should be noted during the installation process: Download the MySQL installer for Windows. Select the appropriate version of MySQL (community or enterprise). Select the appropriate installation directory and character set during the installation process. Set the root user password and keep it properly. Connect to the database for testing. Note the compatibility and security issues on Windows 7, and it is recommended to upgrade to a supported operating system.
