MySQL provides the MySQL Community Edition, the Open-Source version. In addition, there is the Enterprise Edition for our Commercial customers and MySQL HeatWave, our managed database service (DBaaS) on the cloud (OCI, AWS, etc.).
But do you know developers can freely use MySQL Enterprise for non-commercial use?
The full range of MySQL Enterprise Edition features is free while learning, developing, and prototyping, and can be downloaded here.
After installing it, let’s have a look at our system:
SQL > select @@version, @@version_comment;
+------------------+--------------------------------------+
| @@version | @@version_comment |
+------------------+--------------------------------------+
| 9.3.0-commercial | MySQL Enterprise Server - Commercial |
+------------------+--------------------------------------+
1 row in set (0.0002 sec
We can see that we are indeed using the latest MySQL Enterprise Server.
We (at least I do) know that MySQL EE comes with additional plugins and components. Let’s have a look:
SQL > select * from mysql.component;
+--------------+--------------------+------------------------------------+
| component_id | component_group_id | component_urn |
+--------------+--------------------+------------------------------------+
| 1 | 1 | file://component_validate_password |
+--------------+--------------------+------------------------------------+
1 row in set (0.0002 sec)
Currently, nothing special…
But let’s check on the filesystem and compare with the Community Edition:

29 more plugins and components in the Enterprise Edition.
Let’s take a quick look at those additions:
MySQL Enterprise Audit
audit_log.so
The MySQL Enterprise Audit is a plugin that enables standard, policy-based monitoring and logging of connection and query activity executed on the MySQL Server.
More Info:
- https://www.mysql.com/products/enterprise/audit.html
- https://dev.mysql.com/doc/refman/9.3/en/mysql-enterprise-audit.html
- https://dev.mysql.com/doc/refman/9.3/en/audit-log.html
MySQL Enterprise Authentication
authentication_kerberos.so
authentication_ldap_sasl.so
authentication_ldap_simple.so
authentication_openid_connect.so
authentication_pam.so
authentication_webauthn.so
MySQL Enterprise Edition provides ready-to-use external authentication modules (authentication plugins) to integrate existing security infrastructures easily, including Linux Pluggable Authentication Modules (PAM), Windows Active Directory, LDAP, OpenID Connect (OIDC) protocol, FIDO2 Web Authentication (WebAuthn) standard for devices such as smart cards, security keys, and biometric readers.
This is essential for those requiring multifactor authentication to manage the database server.
More Info:
- https://www.mysql.com/products/enterprise/security.html
- https://dev.mysql.com/doc/refman/9.3/en/mysql-enterprise-security.html
- https://dev.mysql.com/doc/refman/9.3/en/authentication-plugins.html
MySQL Enterprise Encryption
component_enterprise_encryption.so
MySQL Enterprise Edition includes a set of encryption functions that expose OpenSSL capabilities at the SQL level. These functions are enabled when the component is installed.
Let’s load this component and list the related functions:
SQL > INSTALL COMPONENT "file://component_enterprise_encryption";
Query OK, 0 rows affected (0.0019 sec)
SQL > SELECT UDF_NAME FROM performance_schema.user_defined_functions
WHERE UDF_NAME LIKE '%asymm%';
+----------------------------+
| UDF_NAME |
+----------------------------+
| asymmetric_sign |
| create_asymmetric_pub_key |
| create_asymmetric_priv_key |
| asymmetric_verify |
| asymmetric_decrypt |
| asymmetric_encrypt |
+----------------------------+
6 rows in set (0.0003 sec)
More Information:
- https://www.mysql.com/products/enterprise/encryption.html
- https://dev.mysql.com/doc/refman/9.3/en/mysql-enterprise-encryption.html
- https://dev.mysql.com/doc/refman/9.3/en/enterprise-encryption.html
MySQL Enterprise Group Replication Additions
Recently, components related to Group Replication have been added to MySQL Enterprise Edition.
Group Replication Primary Election Component
component_group_replication_elect_prefers_most_updated.so
This component handles failover by selecting the most up-to-date member of the replication group as the new primary when in single-primary mode.
More Info:
- https://dev.mysql.com/doc/refman/9.3/en/group-replication-primary-election-component.html
- https://blogs.oracle.com/mysql/post/improve-primary-selection-on-failover-in-mysql-group-replication
Group Replication Flow Control Statistics Component
component_group_replication_flow_control_stats.so
The Group Replication Flow Control Statistics component enables several global status variables that provide information on Group Replication flow control execution.
This component supports Group Replication global variables in addition to those normally present for measuring statistics relating to flow control execution.
More Info:
Group Replication Resource Manager Component
component_group_replication_resource_manager.so
The Group Replication Resource Manager component monitors secondary server lag time and memory usage, and can expel servers that lag excessively or use too many resources from the group. Allowable lag time and resource usage are configurable for both applier channels and recovery channels.
More Info:
MySQL Keyring
component_keyring_aws.so
component_keyring_encrypted_file.so
component_keyring_file.so
(also in CE)component_keyring_hashicorp.so
component_keyring_oci.so
keyring_aws.so
keyring_hashicorp.so
keyring_okv.so
MySQL Server supports a keyring that enables internal server components and plugins to store sensitive information securely for later retrieval. The MySQL Community Edition provides the component to store keyring data in a file local to the server host. This component is also available on MySQL EE, but MySQL EE provides other storage methods. Components or plugins provide these methods.
I recommend using the component ones.
More Info:
- https://dev.mysql.com/doc/refman/9.3/en/keyring.html
- https://blogs.oracle.com/mysql/post/keyring-components
- https://blogs.oracle.com/mysql/post/keyring-component-to-plugin-migration
- https://blogs.oracle.com/mysql/post/component-keyring-file
MySQL Enterprise Masking and De-identification
component_masking.so
component_masking_functions.so
data_masking.so
MySQL Enterprise Data Masking provides data masking and de-identification capabilities. Currently, the component and the plugin implementation are available, such as for keyring. I recommend using the components.
Let’s install the components:
$ mysqlsh root@127.0.0.1/mysql < /usr/share/mysql-9.3/masking_functions_install.sql
SQL > select component_urn from mysql.component;
+----------------------------------------+
| component_urn |
+----------------------------------------+
| file://component_validate_password |
| file://component_enterprise_encryption |
| file://component_masking |
| file://component_masking_functions |
+----------------------------------------+
4 rows in set (0.0002 sec)
Let’s have a quick look at the added functions:
SQL > SELECT UDF_NAME FROM performance_schema.user_defined_functions
WHERE UDF_NAME LIKE '%mask%' OR UDF_NAME LIKE 'gen%';
+--------------------------------+
| UDF_NAME |
+--------------------------------+
| gen_blocklist |
| masking_dictionaries_flush |
| masking_dictionary_term_remove |
| masking_dictionary_term_add |
| gen_dictionary |
| gen_rnd_canada_sin |
| gen_rnd_iban |
| gen_rnd_ssn |
| gen_rnd_email |
| gen_rnd_pan |
| gen_range |
| mask_uk_nin |
| mask_pan_relaxed |
| mask_iban |
| mask_outer |
| mask_pan |
| mask_inner |
| masking_dictionary_remove |
| mask_uuid |
| mask_canada_sin |
| gen_rnd_uk_nin |
| gen_rnd_uuid |
| gen_rnd_us_phone |
| mask_ssn |
+--------------------------------+
24 rows in set (0.0003 sec)
Now we can pick one random and test it:
SQL > select uuid(), mask_uuid(uuid())\G
*************************** 1. row ***************************
uuid(): 0827941b-317a-11f0-8771-080027987145
mask_uuid(uuid()): ********-****-****-****-************
1 row in set (0.0002 sec)
More Info:
- https://www.mysql.com/products/enterprise/masking.html
- https://dev.mysql.com/doc/refman/9.3/en/data-masking.html
MySQL Enterprise Firewall
firewall.so
MySQL Enterprise Firewall is an application-level firewall that enables database administrators to permit or deny SQL statement execution based on matching against lists of accepted statement patterns. This helps harden MySQL Server against attacks such as SQL injection or attempts to exploit applications by using them outside their legitimate query workload characteristics.
MySQL Enterprise Firewall is a plugin.
Let’s try to install it:
$ mysqlsh root@127.0.0.1/mysql < /usr/share/mysql-9.3/linux_install_firewall.sql
Now we can check if this is enabled:
SQL > SHOW GLOBAL VARIABLES LIKE 'mysql_firewall_mode';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| mysql_firewall_mode | ON |
+---------------------+-------+
1 row in set (0.0015 sec)
More Info:
- https://www.mysql.com/products/enterprise/firewall.html
- https://dev.mysql.com/doc/refman/9.3/en/firewall.html
Option Tracker
component_option_tracker.so
The Option Tracker component provides information about the MySQL server’s features and about MySQL components and plugins installed on the system.
This is a very new component, let’s try it:
SQL > INSTALL COMPONENT 'file://component_option_tracker';
Query OK, 0 rows affected (0.0026 sec)
SQL > select * from mysql_option;
+-------------------------------+----------------+---------------------------------+
| OPTION_NAME | OPTION_ENABLED | OPTION_CONTAINER |
+-------------------------------+----------------+---------------------------------+
| Binary Log | TRUE | mysql_server |
| Enterprise Data Masking | TRUE | component_masking |
| Enterprise Encryption | TRUE | component_enterprise_encryption |
| Enterprise Firewall | TRUE | firewall plugin |
| Hypergraph Optimizer | FALSE | mysql_server |
| MySQL Server | TRUE | mysql_server |
| Password validation component | TRUE | component_validate_password |
| Replication Replica | FALSE | mysql_server |
| Traditional Optimizer | TRUE | mysql_server |
+-------------------------------+----------------+---------------------------------+
9 rows in set (0.0006 sec)
More Info:
Replication Applier Metrics Component
component_replication_applier_metrics.so
The Replication Applier Metrics component adds two tables in performance_schema
:
replication_applier_metrics
: Displays statistics for the replication applier, for a given replication channel.replication_applier_progress_by_worker
: Displays statistics for the replication applier, for the worker with the given ID and channel name.
More Info:
- https://dev.mysql.com/doc/refman/9.3/en/replication-applier-metrics-component.html
- https://dev.mysql.com/doc/refman/9.3/en/performance-schema-replication-applier-metrics-table.html
Scheduler Component
component_scheduler.so
The scheduler
component provides an implementation of the mysql_scheduler
service that enables applications, components, or plugins to configure, run, and unconfigure tasks every N
seconds using the service.
More Info:
Telemetry
component_telemetry.so
telemetry_client.so
MySQL Enterprise Telemetry allows users to define, create, and collect telemetry data from MySQL to monitor its performance and behavior from various observability and management tools.
There are already various blog posts about Open Telemetry in MySQL EE.
More Info:
- https://www.mysql.com/products/enterprise/telemetry/
- https://dev.mysql.com/doc/refman/9.3/en/telemetry.html
- https://blogs.oracle.com/mysql/post/mysql-telemetry-opentelemetry-logging
- https://blogs.oracle.com/mysql/post/mysql-telemetry-tracing-with-oci-apm
- https://blogs.oracle.com/mysql/post/mysql-telemetry-metrics-with-oci-monitoring-metrics-exporter
MySQL Enterprise Thread Pool
thread_pool.so
The Thread Pool in MySQL EE provides a highly scalable thread-handling model to reduce overhead in managing client connections and statement execution threads.
The Thread Pool is a plugin.
More Info:
- https://www.mysql.com/products/enterprise/scalability.html
- https://dev.mysql.com/doc/refman/9.3/en/thread-pool.html
MySQL Enterprise Stored Programs
component_mle.so
The Multilingual Engine component (MLE) supports languages other than SQL in MySQL stored procedures and functions. This may be the most interesting EE feature for developers.
Currently, only JavaScript is supported.
More Info:
- https://www.mysql.com/products/enterprise/storedprograms.html
- https://dev.mysql.com/doc/refman/9.3/en/mle-component.html
- https://lefred.be/content/javascript-support-in-mysql-the-uuid-example/
- https://lefred.be/content/mysql-vector-datatype-create-your-operations-part-1/
As you can see, the MySQL Enterprise provides several interesting features for developers, such as data masking and JavaScript stored procedures. It also includes MEB (MySQL Enterprise Backup).
So, if you are a developer, give it a try. You can download and use it for free.