MySQL client plugins extend the functionality of MySQL client applications. A key component of every plugin is its descriptor, defined in section 4.4-2.3 of the MySQL documentation. This descriptor provides essential information about the plugin to the MySQL client API. Let’s explore the structure and significance of these descriptors.
The Structure of a MySQL Client Plugin Descriptor
Each client plugin descriptor begins with a common set of members, followed by type-specific members. This common structure, st_mysql_client_plugin
, is defined in the client_plugin.h
file:
struct st_mysql_client_plugin {
int type;
unsigned int interface_version;
const char *name;
const char *author;
const char *desc;
unsigned int version[3];
const char *license;
void *mysql_api;
int (*init)(char *, size_t, int, va_list);
int (*deinit)();
int (*options)(const char *option, const void *);
};
Let’s break down each member:
type
: Identifies the plugin type (e.g., authentication, logging). Defined inclient_plugin.h
.interface_version
: Specifies the plugin interface version. Ensures compatibility between the plugin and the MySQL client library.name
: The plugin’s name, used to reference it (e.g., with--default-auth
).author
: The plugin author’s name.desc
: A brief description of the plugin’s functionality.version
: An array holding the plugin’s major, minor, and patch version numbers.license
: Indicates the plugin’s licensing terms (e.g., GPL).mysql_api
: Reserved for internal use; should be set toNULL
.init
: An initialization function executed when the plugin loads. Handles setup and returns an error message if initialization fails.deinit
: A deinitialization function executed when the plugin unloads. Performs cleanup tasks.options
: A function to handle plugin-specific options passed from the client.
Declaring a Client Plugin
Plugins are declared using the mysql_declare_client_plugin()
and mysql_end_client_plugin
macros:
mysql_declare_client_plugin(plugin_type)
... common members ...
... type-specific members ...
mysql_end_client_plugin;
The plugin_type
argument automatically sets the type
and interface_version
members. For example:
mysql_declare_client_plugin(AUTHENTICATION)
"my_auth_plugin", "Author Name", "My Authentication Plugin",
{1, 0, 0}, "GPL", NULL, my_auth_init, my_auth_deinit,
my_auth_options, my_auth_main
mysql_end_client_plugin;
This declares an authentication plugin named “my_auth_plugin.” Note the my_auth_main
function, a type-specific member for authentication plugins, handling server communication.
Loading Client Plugins
Client programs load plugins using mysql_options()
to set MYSQL_DEFAULT_AUTH
and MYSQL_PLUGIN_DIR
:
char *plugin_dir = "/path/to/plugin/dir";
char *default_auth = "my_auth_plugin";
mysql_options(&mysql, MYSQL_PLUGIN_DIR, plugin_dir);
mysql_options(&mysql, MYSQL_DEFAULT_AUTH, default_auth);
This code snippet directs the client to load the “my_auth_plugin” from the specified directory.
Conclusion
MySQL client plugin descriptors, detailed in section 4.4-2.3, play a vital role in extending MySQL client functionalities. They provide a structured way to define plugin properties and behaviors, enabling seamless integration with the MySQL ecosystem. Understanding their structure and purpose is crucial for developing and utilizing MySQL client plugins effectively.