mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
e6b505fd3c
There were two problems:
(1) If user wanted same time zone information on all nodes in the Galera
cluster all updates were not replicated as time zone information was
stored on MyISAM tables. This is fixed on Galera by altering time zone
tables to InnoDB while they are modified.
(2) If user wanted different time zone information to nodes in the Galera
cluster TRUNCATE TABLE for time zone tables was replicated by Galera
destroying time zone information from other nodes. This is fixed
on Galera by introducing new option for mysql_tzinfo_to_sql_symlink
tool --skip-write-binlog to disable Galera replication while
time zone tables are modified.
Changes to be committed:
modified: mysql-test/r/mysql_tzinfo_to_sql_symlink.result
modified: mysql-test/suite/wsrep/r/mysql_tzinfo_to_sql_symlink.result
new file: mysql-test/suite/wsrep/r/mysql_tzinfo_to_sql_symlink_skip.result
new file: mysql-test/suite/wsrep/t/mysql_tzinfo_to_sql_symlink_skip.test
modified: sql/tztime.cc
This is 10.4 version of commit fa74088838
155 lines
6 KiB
Text
155 lines
6 KiB
Text
#
|
|
# MDEV-5226 mysql_tzinfo_to_sql errors with tzdata 2013f and above
|
|
#
|
|
# Verbose run
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone ENGINE=InnoDB;
|
|
ALTER TABLE time_zone_name ENGINE=InnoDB;
|
|
ALTER TABLE time_zone_transition ENGINE=InnoDB;
|
|
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
|
|
END IF|
|
|
\d ;
|
|
TRUNCATE TABLE time_zone;
|
|
TRUNCATE TABLE time_zone_name;
|
|
TRUNCATE TABLE time_zone_transition;
|
|
TRUNCATE TABLE time_zone_transition_type;
|
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
|
SET @time_zone_id= LAST_INSERT_ID();
|
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('GMT', @time_zone_id);
|
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
|
;
|
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/garbage' as time zone. Skipping it.
|
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/ignored.tab' as time zone. Skipping it.
|
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
|
SET @time_zone_id= LAST_INSERT_ID();
|
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('posix/GMT', @time_zone_id);
|
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
|
;
|
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/posix/garbage' as time zone. Skipping it.
|
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/posix/ignored.tab' as time zone. Skipping it.
|
|
Warning: Skipping directory 'MYSQLTEST_VARDIR/zoneinfo/posix/posix': to avoid infinite symlink recursion.
|
|
ALTER TABLE time_zone_transition ORDER BY Time_zone_id, Transition_time;
|
|
ALTER TABLE time_zone_transition_type ORDER BY Time_zone_id, Transition_type_id;
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone ENGINE=Aria;
|
|
ALTER TABLE time_zone_name ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition_type ENGINE=Aria;
|
|
END IF|
|
|
\d ;
|
|
# Silent run
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone ENGINE=InnoDB;
|
|
ALTER TABLE time_zone_name ENGINE=InnoDB;
|
|
ALTER TABLE time_zone_transition ENGINE=InnoDB;
|
|
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
|
|
END IF|
|
|
\d ;
|
|
TRUNCATE TABLE time_zone;
|
|
TRUNCATE TABLE time_zone_name;
|
|
TRUNCATE TABLE time_zone_transition;
|
|
TRUNCATE TABLE time_zone_transition_type;
|
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
|
SET @time_zone_id= LAST_INSERT_ID();
|
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('GMT', @time_zone_id);
|
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
|
;
|
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/garbage' as time zone. Skipping it.
|
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
|
SET @time_zone_id= LAST_INSERT_ID();
|
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('posix/GMT', @time_zone_id);
|
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
|
;
|
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/posix/garbage' as time zone. Skipping it.
|
|
ALTER TABLE time_zone_transition ORDER BY Time_zone_id, Transition_time;
|
|
ALTER TABLE time_zone_transition_type ORDER BY Time_zone_id, Transition_type_id;
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone ENGINE=Aria;
|
|
ALTER TABLE time_zone_name ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition_type ENGINE=Aria;
|
|
END IF|
|
|
\d ;
|
|
#
|
|
# Testing with explicit timezonefile
|
|
#
|
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
|
SET @time_zone_id= LAST_INSERT_ID();
|
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('XXX', @time_zone_id);
|
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
|
;
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone ENGINE=Aria;
|
|
ALTER TABLE time_zone_name ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition_type ENGINE=Aria;
|
|
END IF|
|
|
\d ;
|
|
#
|
|
# Testing --leap
|
|
#
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone_leap_second ENGINE=InnoDB;
|
|
END IF|
|
|
\d ;
|
|
TRUNCATE TABLE time_zone_leap_second;
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone_leap_second ENGINE=Aria;
|
|
END IF|
|
|
\d ;
|
|
ALTER TABLE time_zone_leap_second ORDER BY Transition_time;
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone ENGINE=Aria;
|
|
ALTER TABLE time_zone_name ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition_type ENGINE=Aria;
|
|
END IF|
|
|
\d ;
|
|
#
|
|
# MDEV-6236 - [PATCH] mysql_tzinfo_to_sql may produce invalid SQL
|
|
#
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone ENGINE=InnoDB;
|
|
ALTER TABLE time_zone_name ENGINE=InnoDB;
|
|
ALTER TABLE time_zone_transition ENGINE=InnoDB;
|
|
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
|
|
END IF|
|
|
\d ;
|
|
TRUNCATE TABLE time_zone;
|
|
TRUNCATE TABLE time_zone_name;
|
|
TRUNCATE TABLE time_zone_transition;
|
|
TRUNCATE TABLE time_zone_transition_type;
|
|
ALTER TABLE time_zone_transition ORDER BY Time_zone_id, Transition_time;
|
|
ALTER TABLE time_zone_transition_type ORDER BY Time_zone_id, Transition_type_id;
|
|
\d |
|
|
IF (select count(*) from information_schema.global_variables where
|
|
variable_name='wsrep_on') = 1 THEN
|
|
ALTER TABLE time_zone ENGINE=Aria;
|
|
ALTER TABLE time_zone_name ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition ENGINE=Aria;
|
|
ALTER TABLE time_zone_transition_type ENGINE=Aria;
|
|
END IF|
|
|
\d ;
|