A quick look at MySQL EE, free for developers

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:

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:

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:

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:

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:

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:

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:

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:

More Info:

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:

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:

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:

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.

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Leave a Reply

Your email address will not be published. Required fields are marked *

As MySQL Community Manager, I am an employee of Oracle and the views expressed on this blog are my own and do not necessarily reflect the views of Oracle.

You can find articles I wrote on Oracle’s blog.