Skip to content

Commit 18f7dfe

Browse files
committed
Allow mysql_upgrade to enable event after table is corrected
new features: set event_scheduler=ON|OFF will now try to init event scheduler if it's not enabled set event_scheduler=default will try to enable it based on the value of the event_scheduler when mysqld was started
1 parent 95faf34 commit 18f7dfe

13 files changed

+188
-109
lines changed

client/mysql_upgrade.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,7 @@ static const char *expected_errors[]=
865865
"ERROR 1060", /* Duplicate column name */
866866
"ERROR 1061", /* Duplicate key name */
867867
"ERROR 1054", /* Unknown column */
868+
"ERROR 1290", /* RR_OPTION_PREVENTS_STATEMENT */
868869
0
869870
};
870871

mysql-test/r/events_restart.result

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ change column body body longtext character set utf8 collate utf8_bin;
1818
use events_test;
1919
select @@event_scheduler;
2020
@@event_scheduler
21-
DISABLED
21+
OFF
2222
show events;
2323
ERROR HY000: Cannot proceed because system tables used by Event Scheduler were found damaged at server start
2424
select event_name from information_schema.events;
@@ -40,12 +40,12 @@ ERROR HY000: Cannot proceed because system tables used by Event Scheduler were f
4040
drop event intact_check;
4141
ERROR HY000: Cannot proceed because system tables used by Event Scheduler were found damaged at server start
4242
set global event_scheduler=on;
43-
ERROR HY000: Cannot proceed because system tables used by Event Scheduler were found damaged at server start
43+
ERROR HY000: Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.
4444
set global event_scheduler=off;
45-
ERROR HY000: Cannot proceed because system tables used by Event Scheduler were found damaged at server start
45+
ERROR HY000: Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.
4646
show variables like 'event_scheduler';
4747
Variable_name Value
48-
event_scheduler DISABLED
48+
event_scheduler OFF
4949
Make sure that we still can create and drop databases,
5050
and no warnings are produced.
5151
drop database if exists mysqltest_database_not_exists;
@@ -58,6 +58,22 @@ Error 1545 Failed to open mysql.event
5858
Restore the original mysql.event table
5959
drop table mysql.event;
6060
rename table event_like to mysql.event;
61+
check that we can now enable events without restart
62+
set global event_scheduler=original;
63+
Warnings:
64+
Note 1408 Event Scheduler: Loaded 3 events
65+
select @@global.event_scheduler;
66+
@@global.event_scheduler
67+
ON
68+
set global event_scheduler=on;
69+
select @@global.event_scheduler;
70+
@@global.event_scheduler
71+
ON
72+
show events;
73+
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
74+
events_test abc1 root@localhost SYSTEM RECURRING # 1 SECOND # # ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
75+
events_test abc2 root@localhost SYSTEM RECURRING # 1 SECOND # # ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
76+
events_test abc3 root@localhost SYSTEM RECURRING # 1 SECOND # # ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
6177
Now let's restart the server again
6278
use events_test;
6379
select @@event_scheduler;

mysql-test/r/mysql_upgrade-6984.result

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,4 @@ Phase 6/6: Running 'FLUSH PRIVILEGES'
5757
OK
5858
update mysql.user set password='' where user='root';
5959
flush privileges;
60+
set global event_scheduler=OFF;

mysql-test/r/skip_grants.result

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ DROP FUNCTION f1;
5959
DROP FUNCTION f2;
6060
DROP FUNCTION f3;
6161
set global event_scheduler=1;
62-
ERROR HY000: The MariaDB server is running with the --event-scheduler=DISABLED or --skip-grant-tables option so it cannot execute this statement
62+
Warnings:
63+
Note 1408 Event Scheduler: Loaded 0 events
64+
set global event_scheduler=0;
6365
select count(*) from information_schema.COLUMN_PRIVILEGES;
6466
count(*)
6567
0

mysql-test/t/events_restart.test

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ drop event intact_check_1;
7171
drop event intact_check_2;
7272
--error ER_EVENTS_DB_ERROR
7373
drop event intact_check;
74-
--error ER_EVENTS_DB_ERROR
74+
--error ER_STARTUP
7575
set global event_scheduler=on;
76-
--error ER_EVENTS_DB_ERROR
76+
--error ER_STARTUP
7777
set global event_scheduler=off;
7878
show variables like 'event_scheduler';
7979
--echo Make sure that we still can create and drop databases,
@@ -84,6 +84,16 @@ drop database mysqltest_db1;
8484
--echo Restore the original mysql.event table
8585
drop table mysql.event;
8686
rename table event_like to mysql.event;
87+
88+
--echo check that we can now enable events without restart
89+
set global event_scheduler=original;
90+
select @@global.event_scheduler;
91+
set global event_scheduler=on;
92+
select @@global.event_scheduler;
93+
--sorted_result
94+
--replace_column 6 # 9 # 10 #
95+
show events;
96+
8797
--echo Now let's restart the server again
8898

8999
--source include/restart_mysqld.inc

mysql-test/t/mysql_upgrade-6984.test

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ connect(con1,localhost,root,foo,,,);
1919

2020
update mysql.user set password='' where user='root';
2121
flush privileges;
22-
22+
# Load event table
23+
set global event_scheduler=OFF;

mysql-test/t/skip_grants.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ DROP FUNCTION f3;
112112
#
113113
# Bug #26807 "set global event_scheduler=1" and --skip-grant-tables crashes server
114114
#
115-
--error ER_OPTION_PREVENTS_STATEMENT
116115
set global event_scheduler=1;
116+
set global event_scheduler=0;
117117

118118
#
119119
# Bug#26285 Selecting information_schema crahes server

scripts/mysql_system_tables_fix.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,8 @@ ALTER TABLE event ADD body_utf8 longblob DEFAULT NULL
597597
AFTER db_collation;
598598
ALTER TABLE event MODIFY body_utf8 longblob DEFAULT NULL;
599599

600+
# Enable event scheduler if the event table was not up to date before.
601+
set global event_scheduler=original;
600602

601603
#
602604
# TRIGGER privilege

0 commit comments

Comments
 (0)