mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-28263: mariadb-tzinfo-to-sql improve wsrep and binlog cases
The --skip-write-binlog message was confusing that it only had an effect if the galera was enabled. There are uses beyond galera so we apply SET SESSION SQL_LOG_BIN=0 as implied by the option without being conditional on the wsrep status. We also with --skip-write-binlog actually check the session @@WSREP_ON variable rather than the global server variable. Since 10.6, the wsrep_mode could replicate Aria and MyISAM, in which case no change to innodb and back is needed. By removing the conditions, we can use LOCK TABLES in a general case improving the load speed of Aria (MDEV-23326), regardless of the skip-write-binlog flag. The only case where we don't use LOCK TABLES is when we are replicating via Innodb, because wsrep_on=1 and wsrep_mode doesn't contain REPLICATE_ARIA{,MYISAM}. This uses an Innodb transaction instead. When replicating via InnoDB we change the table engine type back to what it was originally. By removing the \d and other syntax that requires parsing by the mariadb client, we can use the generated SQL more generally, like in the embedded server. We also save and restore the SQL_LOG_BIN and WSREP_ON session server variables so this can be included in the same session as other data without taking into changes in state. Remove wsrep.mysql_tzinfo_to_sql_symlink{,_skip} tests as they offered no additional coverage beyond main.mysql_tzinfo_to_sql_symlink (no server testing was done). Add galera.mariadb_tzinfo_to_sql to actually test the replication of tzinfo data through galera. The conditional executable comment around /*M!100602 ... START TRANSACTION .. LOCK TABLES.. */ is so that we can provide tzinfo files (MDEV-27113, MDBF-389) and in the case that a user uses it on a pre-10.6 server version it will still work. Both START TRANSACTION and LOCK TABLES are not supported in prepared statements in MariaDB versions earlier than 10.6.2. Reviewed by Brandon Nesterenko
This commit is contained in:
@ -1,18 +1,13 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_symlink.inc
|
||||
--source include/not_windows.inc
|
||||
--source include/not_embedded.inc
|
||||
--source include/not_psprotocol.inc
|
||||
|
||||
use mysql;
|
||||
RENAME TABLE time_zone TO time_zone_orig,
|
||||
time_zone_name TO time_zone_name_orig,
|
||||
time_zone_transition TO time_zone_transition_orig,
|
||||
time_zone_transition_type TO time_zone_transition_type_orig,
|
||||
time_zone_leap_second TO time_zone_leap_second_orig;
|
||||
CREATE TABLE time_zone LIKE time_zone_orig;
|
||||
CREATE TABLE time_zone_name LIKE time_zone_name_orig;
|
||||
CREATE TABLE time_zone_transition LIKE time_zone_transition_orig;
|
||||
CREATE TABLE time_zone_transition_type LIKE time_zone_transition_type_orig;
|
||||
CREATE TABLE time_zone_leap_second LIKE time_zone_leap_second_orig;
|
||||
CREATE TABLE time_zone LIKE mysql.time_zone;
|
||||
CREATE TABLE time_zone_name LIKE mysql.time_zone_name;
|
||||
CREATE TABLE time_zone_transition LIKE mysql.time_zone_transition;
|
||||
CREATE TABLE time_zone_transition_type LIKE mysql.time_zone_transition_type;
|
||||
CREATE TABLE time_zone_leap_second LIKE mysql.time_zone_leap_second;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-5226 mysql_tzinfo_to_sql errors with tzdata 2013f and above
|
||||
@ -27,16 +22,18 @@ CREATE TABLE time_zone_leap_second LIKE time_zone_leap_second_orig;
|
||||
--echo # Verbose run
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--exec $MYSQL_TZINFO_TO_SQL --verbose $MYSQLTEST_VARDIR/zoneinfo 2>&1
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
SELECT COUNT(*) FROM time_zone_name;
|
||||
SELECT COUNT(*) FROM time_zone_transition;
|
||||
SELECT COUNT(*) FROM time_zone_transition_type;
|
||||
SELECT COUNT(*) FROM time_zone_leap_second;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-28263: mariadb-tzinfo-to-sql improve wsrep and binlog cases
|
||||
--echo #
|
||||
|
||||
--echo # Run on zoneinfo directory
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo 2>&1
|
||||
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo 2>/dev/null | $MYSQL -S $MASTER_MYSOCK -u root mysql
|
||||
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo > $MYSQL_TMP_DIR/tz.sql
|
||||
--disable_query_log
|
||||
--source $MYSQL_TMP_DIR/tz.sql
|
||||
--enable_query_log
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
SELECT COUNT(*) FROM time_zone_name;
|
||||
SELECT COUNT(*) FROM time_zone_transition;
|
||||
@ -49,13 +46,27 @@ SELECT COUNT(*) FROM time_zone_leap_second;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--exec $MYSQL_TZINFO_TO_SQL --skip-write-binlog $MYSQLTEST_VARDIR/zoneinfo 2>&1
|
||||
--exec $MYSQL_TZINFO_TO_SQL --skip-write-binlog $MYSQLTEST_VARDIR/zoneinfo 2>/dev/null | $MYSQL -S $MASTER_MYSOCK -u root mysql
|
||||
--exec $MYSQL_TZINFO_TO_SQL --skip-write-binlog $MYSQLTEST_VARDIR/zoneinfo 2>/dev/null > $MYSQL_TMP_DIR/tz.sql
|
||||
--disable_query_log
|
||||
CREATE TEMPORARY TABLE baseline AS
|
||||
SELECT VARIABLE_NAME,VARIABLE_VALUE
|
||||
FROM information_schema.global_status
|
||||
WHERE VARIABLE_NAME IN ('COM_BEGIN', 'COM_INSERT', 'COM_LOCK_TABLES', 'COM_ALTER_TABLE', 'COM_TRUNCATE');
|
||||
--source $MYSQL_TMP_DIR/tz.sql
|
||||
--enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
SELECT COUNT(*) FROM time_zone_name;
|
||||
SELECT COUNT(*) FROM time_zone_transition;
|
||||
SELECT COUNT(*) FROM time_zone_transition_type;
|
||||
SELECT COUNT(*) FROM time_zone_leap_second;
|
||||
|
||||
SELECT @wsrep_is_on, @wsrep_cannot_replicate_tz, @save_wsrep_on, @save_sql_log_bin, @@SQL_LOG_BIN;
|
||||
SELECT g.VARIABLE_NAME, g.VARIABLE_VALUE - b.VARIABLE_VALUE AS diff
|
||||
FROM information_schema.global_status g
|
||||
JOIN baseline b USING (VARIABLE_NAME)
|
||||
ORDER BY g.VARIABLE_NAME;
|
||||
|
||||
# Below tests don't include TRUNCATE TABLE so clear them.
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
@ -69,13 +80,27 @@ TRUNCATE TABLE time_zone_leap_second;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo/GMT XXX 2>&1
|
||||
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo/GMT XXX 2>/dev/null | $MYSQL -S $MASTER_MYSOCK -u root mysql
|
||||
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo/GMT XXX 2>/dev/null > $MYSQL_TMP_DIR/tz.sql
|
||||
--disable_query_log
|
||||
CREATE OR REPLACE TEMPORARY TABLE baseline AS
|
||||
SELECT VARIABLE_NAME,VARIABLE_VALUE
|
||||
FROM information_schema.global_status
|
||||
WHERE VARIABLE_NAME IN ('COM_BEGIN', 'COM_INSERT', 'COM_LOCK_TABLES', 'COM_ALTER_TABLE', 'COM_TRUNCATE');
|
||||
--source $MYSQL_TMP_DIR/tz.sql
|
||||
--enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
SELECT COUNT(*) FROM time_zone_name;
|
||||
SELECT COUNT(*) FROM time_zone_transition;
|
||||
SELECT COUNT(*) FROM time_zone_transition_type;
|
||||
SELECT COUNT(*) FROM time_zone_leap_second;
|
||||
|
||||
SELECT @wsrep_is_on, @wsrep_cannot_replicate_tz, @save_wsrep_on, @save_sql_log_bin, @@SQL_LOG_BIN;
|
||||
SELECT g.VARIABLE_NAME, g.VARIABLE_VALUE - b.VARIABLE_VALUE AS diff
|
||||
FROM information_schema.global_status g
|
||||
JOIN baseline b USING (VARIABLE_NAME)
|
||||
ORDER BY g.VARIABLE_NAME;
|
||||
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
@ -87,13 +112,27 @@ TRUNCATE TABLE time_zone_leap_second;
|
||||
--echo #
|
||||
|
||||
--exec $MYSQL_TZINFO_TO_SQL --skip-write-binlog $MYSQLTEST_VARDIR/zoneinfo/GMT XXX 2>&1
|
||||
--exec $MYSQL_TZINFO_TO_SQL --skip-write-binlog $MYSQLTEST_VARDIR/zoneinfo/GMT 2>/dev/null | $MYSQL -S $MASTER_MYSOCK -u root mysql
|
||||
--exec $MYSQL_TZINFO_TO_SQL --skip-write-binlog $MYSQLTEST_VARDIR/zoneinfo/GMT XXX 2>/dev/null > $MYSQL_TMP_DIR/tz.sql
|
||||
--disable_query_log
|
||||
CREATE OR REPLACE TEMPORARY TABLE baseline AS
|
||||
SELECT VARIABLE_NAME,VARIABLE_VALUE
|
||||
FROM information_schema.global_status
|
||||
WHERE VARIABLE_NAME IN ('COM_BEGIN', 'COM_INSERT', 'COM_LOCK_TABLES', 'COM_ALTER_TABLE', 'COM_TRUNCATE');
|
||||
--source $MYSQL_TMP_DIR/tz.sql
|
||||
--enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
SELECT COUNT(*) FROM time_zone_name;
|
||||
SELECT COUNT(*) FROM time_zone_transition;
|
||||
SELECT COUNT(*) FROM time_zone_transition_type;
|
||||
SELECT COUNT(*) FROM time_zone_leap_second;
|
||||
|
||||
SELECT @wsrep_is_on, @wsrep_cannot_replicate_tz, @save_wsrep_on, @save_sql_log_bin, @@SQL_LOG_BIN;
|
||||
SELECT g.VARIABLE_NAME, g.VARIABLE_VALUE - b.VARIABLE_VALUE AS diff
|
||||
FROM information_schema.global_status g
|
||||
JOIN baseline b USING (VARIABLE_NAME)
|
||||
ORDER BY g.VARIABLE_NAME;
|
||||
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
@ -105,13 +144,27 @@ TRUNCATE TABLE time_zone_leap_second;
|
||||
--echo #
|
||||
|
||||
--exec $MYSQL_TZINFO_TO_SQL --leap $MYSQLTEST_VARDIR/zoneinfo/GMT 2>&1
|
||||
--exec $MYSQL_TZINFO_TO_SQL --leap $MYSQLTEST_VARDIR/zoneinfo/GMT 2>/dev/null | $MYSQL -S $MASTER_MYSOCK -u root mysql
|
||||
--exec $MYSQL_TZINFO_TO_SQL --leap $MYSQLTEST_VARDIR/zoneinfo/GMT 2>/dev/null > $MYSQL_TMP_DIR/tz.sql
|
||||
--disable_query_log
|
||||
CREATE OR REPLACE TEMPORARY TABLE baseline AS
|
||||
SELECT VARIABLE_NAME,VARIABLE_VALUE
|
||||
FROM information_schema.global_status
|
||||
WHERE VARIABLE_NAME IN ('COM_BEGIN', 'COM_INSERT', 'COM_LOCK_TABLES', 'COM_ALTER_TABLE', 'COM_TRUNCATE');
|
||||
--source $MYSQL_TMP_DIR/tz.sql
|
||||
--enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
SELECT COUNT(*) FROM time_zone_name;
|
||||
SELECT COUNT(*) FROM time_zone_transition;
|
||||
SELECT COUNT(*) FROM time_zone_transition_type;
|
||||
SELECT COUNT(*) FROM time_zone_leap_second;
|
||||
|
||||
SELECT @wsrep_is_on, @wsrep_cannot_replicate_tz, @save_wsrep_on, @save_sql_log_bin, @@SQL_LOG_BIN;
|
||||
SELECT g.VARIABLE_NAME, g.VARIABLE_VALUE - b.VARIABLE_VALUE AS diff
|
||||
FROM information_schema.global_status g
|
||||
JOIN baseline b USING (VARIABLE_NAME)
|
||||
ORDER BY g.VARIABLE_NAME;
|
||||
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
@ -123,37 +176,51 @@ TRUNCATE TABLE time_zone_leap_second;
|
||||
--echo #
|
||||
|
||||
--exec $MYSQL_TZINFO_TO_SQL --skip-write-binlog --leap $MYSQLTEST_VARDIR/zoneinfo/GMT 2>&1
|
||||
--exec $MYSQL_TZINFO_TO_SQL --skip-write-binlog --leap $MYSQLTEST_VARDIR/zoneinfo/GMT 2>/dev/null | $MYSQL -S $MASTER_MYSOCK -u root mysql
|
||||
--exec $MYSQL_TZINFO_TO_SQL --skip-write-binlog --leap $MYSQLTEST_VARDIR/zoneinfo/GMT > $MYSQL_TMP_DIR/tz.sql
|
||||
--disable_query_log
|
||||
CREATE OR REPLACE TEMPORARY TABLE baseline AS
|
||||
SELECT VARIABLE_NAME,VARIABLE_VALUE
|
||||
FROM information_schema.global_status
|
||||
WHERE VARIABLE_NAME IN ('COM_BEGIN', 'COM_INSERT', 'COM_LOCK_TABLES', 'COM_ALTER_TABLE', 'COM_TRUNCATE');
|
||||
--source $MYSQL_TMP_DIR/tz.sql
|
||||
--enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
SELECT COUNT(*) FROM time_zone_name;
|
||||
SELECT COUNT(*) FROM time_zone_transition;
|
||||
SELECT COUNT(*) FROM time_zone_transition_type;
|
||||
SELECT COUNT(*) FROM time_zone_leap_second;
|
||||
|
||||
#
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
|
||||
--exec rm -rf $MYSQLTEST_VARDIR/zoneinfo
|
||||
SELECT @wsrep_is_on, @wsrep_cannot_replicate_tz, @save_wsrep_on, @save_sql_log_bin, @@SQL_LOG_BIN;
|
||||
SELECT g.VARIABLE_NAME, g.VARIABLE_VALUE - b.VARIABLE_VALUE AS diff
|
||||
FROM information_schema.global_status g
|
||||
JOIN baseline b USING (VARIABLE_NAME)
|
||||
ORDER BY g.VARIABLE_NAME;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6236 - [PATCH] mysql_tzinfo_to_sql may produce invalid SQL
|
||||
--echo #
|
||||
--exec rm -rf $MYSQLTEST_VARDIR/zoneinfo
|
||||
--exec mkdir $MYSQLTEST_VARDIR/zoneinfo
|
||||
--copy_file std_data/zoneinfo/GMT $MYSQLTEST_VARDIR/zoneinfo/Factory
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo 2>&1
|
||||
|
||||
#
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
|
||||
--remove_file $MYSQL_TMP_DIR/tz.sql
|
||||
--exec rm -rf $MYSQLTEST_VARDIR/zoneinfo
|
||||
DROP TABLE baseline;
|
||||
DROP TABLE time_zone;
|
||||
DROP TABLE time_zone_name;
|
||||
DROP TABLE time_zone_transition;
|
||||
DROP TABLE time_zone_transition_type;
|
||||
DROP TABLE time_zone_leap_second;
|
||||
RENAME TABLE time_zone_orig TO time_zone,
|
||||
time_zone_name_orig TO time_zone_name,
|
||||
time_zone_transition_orig TO time_zone_transition,
|
||||
time_zone_transition_type_orig TO time_zone_transition_type,
|
||||
time_zone_leap_second_orig TO time_zone_leap_second;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.6 tests
|
||||
--echo #
|
||||
|
Reference in New Issue
Block a user