Details
-
New Feature
-
Status: In Testing (View Workflow)
-
Critical
-
Resolution: Unresolved
-
Q1/2026 Server Development, Q2/2026 Server Maintenance, Q2/2026 Server Development
Description
To create a system trigger on start up/shut down the following statement should be executed:
CREATE TRIGGER [IF NOT EXISTS] trigger_name AFTER STARTUP trigger_body |
CREATE TRIGGER [IF NOT EXISTS] trigger_name BEFORE SHUTDOWN trigger_body |
To drop a system trigger, the regular DROP TRIGGER statement is used.
The SUPER privilege is required to create or drop a system trigger.
A system trigger is created in the schema that is current at the moment the CREATE TRIGGER statement executed.
Metadata of system trigger is stored at the table mysql.event. To store system trigger metadata this table is extended with the following columns:
kind, when, ddl_type
The table mysql.event has the primary on columns (`db`,`name`). In result, it is not possible to create an event and a system trigger with name in the same database. Attempt to do it will fail with the error ER_TRG_EVENT_CONFLICTS_NAME
Implementation of the statements
SHOW TRIGGERS
|
SHOW CREATE TRIGGER |
are modified to handle system triggers.
The utility program mariadb-dump is patched to support dumping of system triggers.
In case server is started on the data dictionary with broken structure of the table mysql.event (for example, missed some columns required for storing trigger's metadata), running of server will be failed with error complaining on wrong structure of the table mysql.event.
To fix the issue, start server with the option --skip-grant-tables.
The another case is attempt to start up server on the data dictionary created by previous version of MariaDB server (without support of system triggers). Starting the server on previous version of the table mysql.event result in success running the server but with disabled feature for system triggers.
Attachments
Issue Links
- causes
-
MDEV-40064 Memory leak with unparseble trigger for startup body
-
- Open
-
-
MDEV-40067 mysqldump --sys-triggers creates unloadable dump
-
- Open
-
-
MDEV-40071 Assertion `ret == false' failed in mysql_drop_sys_or_ddl_trigger
-
- Open
-
-
MDEV-40072 Server crashes in my_hash_first/name_hash_search after load_system_triggers
-
- Open
-
-
MDEV-40074 Create or replace does not work for trigger for startup/shutdown
-
- Open
-
-
MDEV-40076 ASAN global-buffer-overflow in reconstruct_create_trigger_stmt
-
- Open
-
-
MDEV-40083 Compound triggers for startup/shutdown are stored without END, which leads to silent non-firing after restart
-
- Open
-
-
MDEV-40091 ASAN: heap-use-after-free with concurrent create/drop system trigger
-
- Open
-
-
MDEV-40095 Server doesn't start if system triggers not loaded (if cannot open mysql.event)
-
- Open
-
- includes
-
MDEV-36006 Implement generalized triggers 2
-
- Closed
-
- relates to
-
MDEV-37488 Adapting innodb_buffer_pool_dump_pct from innodb_old_blocks_pct
-
- Open
-
-
MDEV-30643 Allow CONCAT in SIGNAL
-
- Open
-
- has action item
-
DOCS-6220 Loading...