diff options
27 files changed, 621 insertions, 159 deletions
diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake index 87c5518de6b..db377184499 100644 --- a/cmake/cpack_rpm.cmake +++ b/cmake/cpack_rpm.cmake @@ -277,7 +277,6 @@ IF(CMAKE_VERSION VERSION_GREATER "3.9.99") SET(CPACK_SOURCE_GENERATOR "RPM") SETA(CPACK_RPM_SOURCE_PKG_BUILD_PARAMS - "-DBUILD_CONFIG=mysql_release" "-DRPM=${RPM}" "-DCPACK_RPM_BUILD_SOURCE_DIRS_PREFIX=/usr/src/debug/${CPACK_RPM_PACKAGE_NAME}-${VERSION}" ) @@ -288,6 +287,7 @@ MACRO(ADDIF var) ENDIF() ENDMACRO() +ADDIF(CMAKE_BUILD_TYPE) ADDIF(BUILD_CONFIG) ADDIF(WITH_SSL) diff --git a/mysql-test/main/alter_table_errors.result b/mysql-test/main/alter_table_errors.result index 1e2a8100e84..5a3ecb6727d 100644 --- a/mysql-test/main/alter_table_errors.result +++ b/mysql-test/main/alter_table_errors.result @@ -1,6 +1,6 @@ create table t (a int, v int as (a)) engine=innodb; alter table t change column a b tinyint, algorithm=inplace; -ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY show create table t; Table Create Table t CREATE TABLE `t` ( diff --git a/mysql-test/main/check_constraint_innodb.result b/mysql-test/main/check_constraint_innodb.result index 45af3f512b7..4b412491204 100644 --- a/mysql-test/main/check_constraint_innodb.result +++ b/mysql-test/main/check_constraint_innodb.result @@ -2,7 +2,7 @@ create table t1 (a int, b smallint) engine=innodb; connect con1,localhost,root,,test; alter table t1 add constraint check (b < 8); alter table t1 modify column b int, algorithm=inplace; -ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY connection default; alter table t1 add primary key (a); drop table t1; diff --git a/mysql-test/suite/encryption/r/corrupted_during_recovery.result b/mysql-test/suite/encryption/r/corrupted_during_recovery.result new file mode 100644 index 00000000000..41c0d7d75a8 --- /dev/null +++ b/mysql-test/suite/encryption/r/corrupted_during_recovery.result @@ -0,0 +1,22 @@ +CREATE TABLE t1(a BIGINT PRIMARY KEY) ENGINE=InnoDB, ENCRYPTED=YES; +INSERT INTO t1 VALUES(1); +CREATE TABLE t2(a BIGINT PRIMARY KEY) ENGINE=InnoDB, ENCRYPTED=YES; +INSERT INTO t1 VALUES(2); +SET GLOBAL innodb_flush_log_at_trx_commit=1; +INSERT INTO t2 VALUES(2); +# Kill the server +# Corrupt the pages +SELECT * FROM t1; +ERROR 42000: Unknown storage engine 'InnoDB' +SELECT * FROM t1; +a +1 +2 +SELECT * FROM t2; +a +2 +CHECK TABLE t1,t2; +Table Op Msg_type Msg_text +test.t1 check status OK +test.t2 check status OK +DROP TABLE t1, t2; diff --git a/mysql-test/suite/encryption/t/corrupted_during_recovery.test b/mysql-test/suite/encryption/t/corrupted_during_recovery.test new file mode 100644 index 00000000000..44cd03e9f8a --- /dev/null +++ b/mysql-test/suite/encryption/t/corrupted_during_recovery.test @@ -0,0 +1,61 @@ +--source include/have_innodb.inc +--source include/have_file_key_management_plugin.inc + +--disable_query_log +call mtr.add_suppression("InnoDB: Plugin initialization aborted"); +call mtr.add_suppression("Plugin 'InnoDB' init function returned error"); +call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed"); +call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed file read of tablespace test/t1 page"); +call mtr.add_suppression("InnoDB: Failed to read file '.*test.t1\\.ibd' at offset 3: Table is encrypted but decrypt failed"); +call mtr.add_suppression("InnoDB: The page \\[page id: space=\\d+, page number=3\\] in file '.*test.t1\\.ibd' cannot be decrypted"); +call mtr.add_suppression("InnoDB: Table in tablespace \\d+ encrypted. However key management plugin or used key_version \\d+ is not found or used encryption algorithm or method does not match. Can't continue opening the table."); +--enable_query_log + +let INNODB_PAGE_SIZE=`select @@innodb_page_size`; +CREATE TABLE t1(a BIGINT PRIMARY KEY) ENGINE=InnoDB, ENCRYPTED=YES; +INSERT INTO t1 VALUES(1); +# Force a redo log checkpoint. +let $restart_noprint=2; +--source include/restart_mysqld.inc +--source ../../suite/innodb/include/no_checkpoint_start.inc +CREATE TABLE t2(a BIGINT PRIMARY KEY) ENGINE=InnoDB, ENCRYPTED=YES; +INSERT INTO t1 VALUES(2); +SET GLOBAL innodb_flush_log_at_trx_commit=1; +INSERT INTO t2 VALUES(2); + +--let CLEANUP_IF_CHECKPOINT=DROP TABLE t1,t2; +--source ../../suite/innodb/include/no_checkpoint_end.inc + +--echo # Corrupt the pages + +perl; +my $ps = $ENV{INNODB_PAGE_SIZE}; + +my $file = "$ENV{MYSQLD_DATADIR}/test/t1.ibd"; +open(FILE, "+<$file") || die "Unable to open $file"; +binmode FILE; +seek (FILE, $ENV{INNODB_PAGE_SIZE} * 3, SEEK_SET) or die "seek"; +print FILE "junk"; +close FILE or die "close"; + +$file = "$ENV{MYSQLD_DATADIR}/test/t2.ibd"; +open(FILE, "+<$file") || die "Unable to open $file"; +binmode FILE; +# Corrupt pages 1 to 3. MLOG_INIT_FILE_PAGE2 should protect us! +# Unfortunately, we are not immune to page 0 corruption. +seek (FILE, $ps, SEEK_SET) or die "seek"; +print FILE chr(0xff) x ($ps * 3); +close FILE or die "close"; +EOF + +--source include/start_mysqld.inc +--error ER_UNKNOWN_STORAGE_ENGINE +SELECT * FROM t1; +let $restart_parameters=--innodb_force_recovery=1; +--source include/restart_mysqld.inc + +SELECT * FROM t1; +SELECT * FROM t2; +CHECK TABLE t1,t2; + +DROP TABLE t1, t2; diff --git a/mysql-test/suite/innodb/r/corrupted_during_recovery.result b/mysql-test/suite/innodb/r/corrupted_during_recovery.result new file mode 100644 index 00000000000..788f17e3284 --- /dev/null +++ b/mysql-test/suite/innodb/r/corrupted_during_recovery.result @@ -0,0 +1,22 @@ +CREATE TABLE t1(a BIGINT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); +CREATE TABLE t2(a BIGINT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(2); +SET GLOBAL innodb_flush_log_at_trx_commit=1; +INSERT INTO t2 VALUES(1); +# Kill the server +# Corrupt the pages +SELECT * FROM t1; +ERROR 42000: Unknown storage engine 'InnoDB' +SELECT * FROM t1; +a +0 +2 +SELECT * FROM t2; +a +1 +CHECK TABLE t1,t2; +Table Op Msg_type Msg_text +test.t1 check status OK +test.t2 check status OK +DROP TABLE t1, t2; diff --git a/mysql-test/suite/innodb/r/innodb-alter-timestamp.result b/mysql-test/suite/innodb/r/innodb-alter-timestamp.result index 516ac333a87..56a1df7ce5d 100644 --- a/mysql-test/suite/innodb/r/innodb-alter-timestamp.result +++ b/mysql-test/suite/innodb/r/innodb-alter-timestamp.result @@ -8,7 +8,7 @@ ALGORITHM=COPY; ERROR 01000: Data truncated for column 'i1' at row 1 ALTER TABLE t1 CHANGE i1 id INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(id), ALGORITHM=INPLACE; -ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ALTER IGNORE TABLE t1 ADD PRIMARY KEY(i1), ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows. Try ALGORITHM=COPY SET @old_sql_mode = @@sql_mode; diff --git a/mysql-test/suite/innodb/r/innodb-alter.result b/mysql-test/suite/innodb/r/innodb-alter.result index a65760828be..56f80a4de3e 100644 --- a/mysql-test/suite/innodb/r/innodb-alter.result +++ b/mysql-test/suite/innodb/r/innodb-alter.result @@ -515,7 +515,7 @@ ERROR 42000: Incorrect column name 'FTS_DOC_ID' ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, ALGORITHM=INPLACE; -ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY CREATE TABLE t1n LIKE t1o; ALTER TABLE t1n ADD FULLTEXT INDEX(ct); ALTER TABLE t1n CHANGE c1 Fts_DOC_ID INT, ALGORITHM=INPLACE; @@ -588,7 +588,7 @@ t1n CREATE TABLE `t1n` ( DROP TABLE t1n; ALTER TABLE t1o MODIFY c1 BIGINT UNSIGNED NOT NULL, DROP INDEX ct, ALGORITHM=INPLACE; -ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ALTER TABLE t1o MODIFY c1 BIGINT UNSIGNED NOT NULL, DROP INDEX ct; ALTER TABLE t1o CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, ALGORITHM=INPLACE; diff --git a/mysql-test/suite/innodb/r/innodb-wl5980-alter.result b/mysql-test/suite/innodb/r/innodb-wl5980-alter.result index daa3ffc0a9f..0855d6b5148 100644 --- a/mysql-test/suite/innodb/r/innodb-wl5980-alter.result +++ b/mysql-test/suite/innodb/r/innodb-wl5980-alter.result @@ -781,7 +781,7 @@ ERROR 42000: Incorrect column name 'FTS_Doc_ID' ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, ALGORITHM=INPLACE; -ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY CREATE TABLE t1n LIKE t1o; ALTER TABLE t1n ADD FULLTEXT INDEX(ct); ### files in MYSQL_DATA_DIR/test diff --git a/mysql-test/suite/innodb/r/instant_alter.result b/mysql-test/suite/innodb/r/instant_alter.result index 0eb66fa22b5..30eddd51bfb 100644 --- a/mysql-test/suite/innodb/r/instant_alter.result +++ b/mysql-test/suite/innodb/r/instant_alter.result @@ -830,7 +830,7 @@ SELECT table_id INTO @table_id2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE name = 'test/t1'; affected rows: 1 ALTER TABLE t1 CHANGE m i INT, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ALTER TABLE t1 CHANGE m i INT; affected rows: 1 info: Records: 1 Duplicates: 0 Warnings: 0 @@ -1654,7 +1654,7 @@ SELECT table_id INTO @table_id2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE name = 'test/t1'; affected rows: 1 ALTER TABLE t1 CHANGE m i INT, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ALTER TABLE t1 CHANGE m i INT; affected rows: 1 info: Records: 1 Duplicates: 0 Warnings: 0 @@ -2478,7 +2478,7 @@ SELECT table_id INTO @table_id2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE name = 'test/t1'; affected rows: 1 ALTER TABLE t1 CHANGE m i INT, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ALTER TABLE t1 CHANGE m i INT; affected rows: 1 info: Records: 1 Duplicates: 0 Warnings: 0 diff --git a/mysql-test/suite/innodb/r/instant_alter_charset,redundant.rdiff b/mysql-test/suite/innodb/r/instant_alter_charset,redundant.rdiff index 82a5ca95986..935b5dbf78c 100644 --- a/mysql-test/suite/innodb/r/instant_alter_charset,redundant.rdiff +++ b/mysql-test/suite/innodb/r/instant_alter_charset,redundant.rdiff @@ -4,7 +4,7 @@ alter table boundary_255 modify b varchar(200) charset utf8mb3, algorithm=instant; --ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +-ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table boundary_255 modify c varchar(300) charset utf8mb3, algorithm=instant; diff --git a/mysql-test/suite/innodb/r/instant_alter_charset.result b/mysql-test/suite/innodb/r/instant_alter_charset.result index 268848f31ec..6242b167412 100644 --- a/mysql-test/suite/innodb/r/instant_alter_charset.result +++ b/mysql-test/suite/innodb/r/instant_alter_charset.result @@ -54,7 +54,7 @@ algorithm=inplace; alter table various_cases change a a varchar(222), algorithm=inplace; -ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table various_cases change b b varchar(150) as (a) virtual, algorithm=inplace; @@ -65,7 +65,7 @@ ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITH alter table various_cases modify a char(150) charset utf8mb4, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table various_cases; create table all_texts ( a tinytext charset ascii, @@ -87,17 +87,17 @@ e varbinary(150), f binary(150) ) engine=innodb; alter table all_binaries modify a tinytext, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_binaries modify b text, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_binaries modify c mediumtext, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_binaries modify d longtext, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_binaries modify e varchar(150), algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_binaries modify f char(150), algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table all_binaries; create table all_strings ( a tinytext, @@ -108,29 +108,29 @@ e varchar(150), f char(150) ) engine=innodb; alter table all_strings modify a tinyblob, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify b blob, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify c mediumblob, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify d longblob, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify e varbinary(150), algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify f binary(150), algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify a tinytext charset binary, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify b text charset binary, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify c mediumtext charset binary, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify d longtext charset binary, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify e varchar(150) charset binary, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table all_strings modify f char(150) charset binary, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table all_strings; create table key_part_change ( a char(150) charset ascii, @@ -143,7 +143,7 @@ modify a char(150) charset utf8mb4, drop index ab, add unique key ab(a,c), algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table key_part_change; create table key_part_change_and_rename ( a char(100) charset ascii, @@ -156,7 +156,7 @@ change b a char(100) charset utf8mb4, drop index ab, add unique key ab(a,b), algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table key_part_change_and_rename; create table enum_and_set ( a enum('one', 'two') charset utf8mb3, @@ -165,11 +165,11 @@ b set('three', 'four') charset utf8mb3 alter table enum_and_set modify a enum('one', 'two') charset utf8mb4, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table enum_and_set modify b enum('three', 'four') charset utf8mb4, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table enum_and_set; create table compressed ( a varchar(255) charset utf8mb3 compressed @@ -254,7 +254,7 @@ algorithm=instant; alter table boundary_255 modify b varchar(200) charset utf8mb3, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table boundary_255 modify c varchar(300) charset utf8mb3, algorithm=instant; @@ -1080,11 +1080,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_bin, @@ -1097,11 +1097,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset latin1 collate latin1_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset latin1 collate latin1_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_nopad_ci, @@ -1114,11 +1114,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset latin1 collate latin1_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset latin1 collate latin1_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_nopad_bin, @@ -1131,11 +1131,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset latin1 collate latin1_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset latin1 collate latin1_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1148,11 +1148,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset koi8u collate koi8u_bin, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset koi8u collate koi8u_bin, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_nopad_ci, @@ -1165,11 +1165,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset koi8u collate koi8u_bin, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset koi8u collate koi8u_bin, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_nopad_bin, @@ -1182,11 +1182,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset koi8u collate koi8u_bin, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset koi8u collate koi8u_bin, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1199,11 +1199,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset latin1 collate latin1_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset latin1 collate latin1_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_bin, @@ -1216,11 +1216,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_nopad_ci, @@ -1233,11 +1233,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_nopad_bin, @@ -1250,11 +1250,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1267,11 +1267,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_bin, @@ -1284,11 +1284,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_nopad_ci, @@ -1301,11 +1301,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_nopad_bin, @@ -1318,11 +1318,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset utf8mb3 collate utf8mb3_general_ci, @@ -1335,11 +1335,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset utf8mb3 collate utf8mb3_bin, @@ -1352,11 +1352,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset utf8mb3 collate utf8mb3_general_nopad_ci, @@ -1369,11 +1369,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset utf8mb3 collate utf8mb3_nopad_bin, @@ -1386,11 +1386,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1403,11 +1403,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset gbk collate gbk_chinese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset gbk collate gbk_chinese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1420,11 +1420,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset gbk collate gbk_chinese_nopad_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset gbk collate gbk_chinese_nopad_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ucs2 collate ucs2_myanmar_ci, @@ -1437,11 +1437,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf16 collate utf16_thai_520_w2, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf16 collate utf16_thai_520_w2, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ucs2 collate ucs2_general_ci, @@ -1454,11 +1454,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf16 collate utf16_unicode_nopad_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf16 collate utf16_unicode_nopad_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ucs2 collate ucs2_general_mysql500_ci, @@ -1471,11 +1471,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf16 collate utf16_spanish2_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf16 collate utf16_spanish2_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1488,11 +1488,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset ascii collate ascii_bin, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset ascii collate ascii_bin, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset utf8mb3 collate utf8mb3_roman_ci, @@ -1505,11 +1505,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb3 collate utf8mb3_lithuanian_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb3 collate utf8mb3_lithuanian_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset utf8mb4 collate utf8mb4_thai_520_w2, @@ -1522,11 +1522,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_persian_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_persian_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset utf8mb3 collate utf8mb3_myanmar_ci, @@ -1539,11 +1539,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb4 collate utf8mb4_german2_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb4 collate utf8mb4_german2_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset utf8mb3 collate utf8mb3_general_ci, @@ -1556,11 +1556,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf8mb3 collate utf8mb3_unicode_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf8mb3 collate utf8mb3_unicode_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset latin1 collate latin1_general_cs, @@ -1573,11 +1573,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset latin1 collate latin1_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset latin1 collate latin1_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1590,11 +1590,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset ujis collate ujis_japanese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset ujis collate ujis_japanese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1607,11 +1607,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset big5 collate big5_chinese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset big5 collate big5_chinese_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1624,11 +1624,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset latin2 collate latin2_croatian_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset latin2 collate latin2_croatian_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset ascii collate ascii_general_ci, @@ -1641,11 +1641,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset latin7 collate latin7_estonian_cs, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset latin7 collate latin7_estonian_cs, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(50) charset utf16 collate utf16_general_ci, @@ -1658,11 +1658,11 @@ algorithm=instant; alter table tmp modify b varchar(50) charset utf16 collate utf16_german2_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify c varchar(50) charset utf16 collate utf16_german2_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; drop table compatible_without_index; create table fully_incompatible ( @@ -1691,11 +1691,11 @@ unique key b_idx (b(150)) alter table tmp change a a varchar(150) charset utf8mb3 collate utf8mb3_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify b text charset utf8mb3 collate utf8mb3_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(150) charset utf8mb4 collate utf8mb4_general_ci, @@ -1705,11 +1705,11 @@ unique key b_idx (b(150)) alter table tmp change a a varchar(150) charset ascii collate ascii_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify b text charset ascii collate ascii_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(150) charset utf8mb3 collate utf8mb3_general_ci, @@ -1719,11 +1719,11 @@ unique key b_idx (b(150)) alter table tmp change a a varchar(150) charset ascii collate ascii_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify b text charset ascii collate ascii_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(150) charset utf8mb3 collate utf8mb3_general_ci, @@ -1733,11 +1733,11 @@ unique key b_idx (b(150)) alter table tmp change a a varchar(150) charset latin1 collate latin1_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify b text charset latin1 collate latin1_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(150) charset utf16 collate utf16_general_ci, @@ -1747,11 +1747,11 @@ unique key b_idx (b(150)) alter table tmp change a a varchar(150) charset utf32 collate utf32_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify b text charset utf32 collate utf32_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(150) charset latin1 collate latin1_general_ci, @@ -1761,11 +1761,11 @@ unique key b_idx (b(150)) alter table tmp change a a varchar(150) charset ascii collate ascii_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify b text charset ascii collate ascii_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(150) charset ascii collate ascii_general_ci, @@ -1775,11 +1775,11 @@ unique key b_idx (b(150)) alter table tmp change a a varchar(150) charset swe7 collate swe7_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify b text charset swe7 collate swe7_swedish_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(150) charset eucjpms collate eucjpms_japanese_nopad_ci, @@ -1789,11 +1789,11 @@ unique key b_idx (b(150)) alter table tmp change a a varchar(150) charset geostd8 collate geostd8_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify b text charset geostd8 collate geostd8_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; create table tmp ( a varchar(150) charset latin1 collate latin1_general_ci, @@ -1803,10 +1803,10 @@ unique key b_idx (b(150)) alter table tmp change a a varchar(150) charset utf16 collate utf16_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY alter table tmp modify b text charset utf16 collate utf16_general_ci, algorithm=instant; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY drop table tmp; drop table fully_incompatible; diff --git a/mysql-test/suite/innodb/r/instant_alter_extend,utf8.rdiff b/mysql-test/suite/innodb/r/instant_alter_extend,utf8.rdiff index ad7ad0e1c66..596dfe43ab8 100644 --- a/mysql-test/suite/innodb/r/instant_alter_extend,utf8.rdiff +++ b/mysql-test/suite/innodb/r/instant_alter_extend,utf8.rdiff @@ -17,7 +17,7 @@ +a 13 2100FE 660 # Convert from VARCHAR to a bigger CHAR alter table t modify a varchar(200), algorithm=instant; - ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY + ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY @@ -72,7 +72,7 @@ test.t check status OK call check_table('t'); diff --git a/mysql-test/suite/innodb/r/instant_alter_extend.result b/mysql-test/suite/innodb/r/instant_alter_extend.result Binary files differindex ca8e566f19c..9136bc7e89c 100644 --- a/mysql-test/suite/innodb/r/instant_alter_extend.result +++ b/mysql-test/suite/innodb/r/instant_alter_extend.result diff --git a/mysql-test/suite/innodb/t/corrupted_during_recovery.opt b/mysql-test/suite/innodb/t/corrupted_during_recovery.opt new file mode 100644 index 00000000000..6051f4cd1fa --- /dev/null +++ b/mysql-test/suite/innodb/t/corrupted_during_recovery.opt @@ -0,0 +1 @@ +--innodb_doublewrite=0 diff --git a/mysql-test/suite/innodb/t/corrupted_during_recovery.test b/mysql-test/suite/innodb/t/corrupted_during_recovery.test new file mode 100644 index 00000000000..697d6e2dce0 --- /dev/null +++ b/mysql-test/suite/innodb/t/corrupted_during_recovery.test @@ -0,0 +1,61 @@ +--source include/have_innodb.inc + +--disable_query_log +call mtr.add_suppression("InnoDB: Plugin initialization aborted"); +call mtr.add_suppression("Plugin 'InnoDB' init function returned error"); +call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed"); +call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed file read of tablespace test/t1 page"); +call mtr.add_suppression("InnoDB: Failed to read file '.*test.t1\\.ibd' at offset 3: Page read from tablespace is corrupted."); +--enable_query_log + +let INNODB_PAGE_SIZE=`select @@innodb_page_size`; +CREATE TABLE t1(a BIGINT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); +# Force a redo log checkpoint. +let $restart_noprint=2; +--source include/restart_mysqld.inc +--source ../include/no_checkpoint_start.inc +CREATE TABLE t2(a BIGINT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(2); +SET GLOBAL innodb_flush_log_at_trx_commit=1; +INSERT INTO t2 VALUES(1); + +--let CLEANUP_IF_CHECKPOINT=DROP TABLE t1,t2; +--source ../include/no_checkpoint_end.inc + +--echo # Corrupt the pages + +perl; +my $ps = $ENV{INNODB_PAGE_SIZE}; + +my $file = "$ENV{MYSQLD_DATADIR}/test/t1.ibd"; +open(FILE, "+<$file") || die "Unable to open $file"; +binmode FILE; +sysseek(FILE, 3*$ps, 0) || die "Unable to seek $file\n"; +die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps; +# Replace the a=1 with a=0. +$page =~ s/\x80\x0\x0\x0\x0\x0\x0\x1/\x80\x0\x0\x0\x0\x0\x0\x0/; +sysseek(FILE, 3*$ps, 0) || die "Unable to seek $file\n"; +syswrite(FILE, $page, $ps)==$ps || die "Unable to write $file\n"; +close FILE or die "close"; + +$file = "$ENV{MYSQLD_DATADIR}/test/t2.ibd"; +open(FILE, "+<$file") || die "Unable to open $file"; +binmode FILE; +# Corrupt pages 1 to 3. MLOG_INIT_FILE_PAGE2 should protect us! +# Unfortunately, we are not immune to page 0 corruption. +seek (FILE, $ps, SEEK_SET) or die "seek"; +print FILE chr(0xff) x ($ps * 3); +close FILE or die "close"; +EOF + +--source include/start_mysqld.inc +--error ER_UNKNOWN_STORAGE_ENGINE +SELECT * FROM t1; +let $restart_parameters=--innodb_force_recovery=1; +--source include/restart_mysqld.inc +SELECT * FROM t1; +SELECT * FROM t2; +CHECK TABLE t1,t2; + +DROP TABLE t1, t2; diff --git a/mysql-test/suite/storage_engine/alter_table_online.result b/mysql-test/suite/storage_engine/alter_table_online.result index 574c46f8cda..2a27c5d108e 100644 --- a/mysql-test/suite/storage_engine/alter_table_online.result +++ b/mysql-test/suite/storage_engine/alter_table_online.result @@ -24,7 +24,7 @@ CREATE TABLE t1 (a <INT_COLUMN>, b <INT_COLUMN>, c <CHAR_COLUMN>) ENGINE=<STORAG INSERT INTO t1 (a,b,c) VALUES (1,100,'a'),(2,200,'b'),(3,300,'c'); ALTER ONLINE TABLE t1 DROP COLUMN b, ADD b <INT_COLUMN>; ALTER ONLINE TABLE t1 MODIFY b BIGINT <CUSTOM_COL_OPTIONS>; -ERROR 0A000: LOCK=NONE is not supported. Reason: Cannot change column type INPLACE. Try LOCK=SHARED. +ERROR 0A000: LOCK=NONE is not supported. Reason: Cannot change column type. Try LOCK=SHARED. ALTER ONLINE TABLE t1 ENGINE=MEMORY; ERROR 0A000: LOCK=NONE is not supported. Reason: COPY algorithm requires a lock. Try LOCK=SHARED. DROP TABLE t1; diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index db38b157406..feb47f9af94 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7012,7 +7012,7 @@ ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME eng "Columns participating in a foreign key are renamed" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE - eng "Cannot change column type INPLACE" + eng "Cannot change column type" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK eng "Adding foreign keys needs foreign_key_checks=OFF" diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 24df4d76911..3fe7cac56ed 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -5597,7 +5597,15 @@ buf_page_create( buf_block_free(free_block); - return buf_page_get_with_no_latch(page_id, zip_size, mtr); + if (!recv_recovery_is_on()) { + return buf_page_get_with_no_latch(page_id, zip_size, + mtr); + } + + mutex_exit(&recv_sys->mutex); + block = buf_page_get_with_no_latch(page_id, zip_size, mtr); + mutex_enter(&recv_sys->mutex); + return block; } /* If we get here, the page was not in buf_pool: init it there */ @@ -5663,7 +5671,9 @@ buf_page_create( /* Delete possible entries for the page from the insert buffer: such can exist if the page belonged to an index which was dropped */ - ibuf_merge_or_delete_for_page(NULL, page_id, zip_size, true); + if (!recv_recovery_is_on()) { + ibuf_merge_or_delete_for_page(NULL, page_id, zip_size, true); + } frame = block->frame; @@ -5678,6 +5688,7 @@ buf_page_create( (3) key_version on encrypted pages (not page 0:0) */ memset(frame + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION, 0, 8); + memset(frame + FIL_PAGE_LSN, 0, 8); #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG ut_a(++buf_dbg_counter % 5771 || buf_validate()); diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc index 639836c9da9..1425f1ea289 100644 --- a/storage/innobase/ibuf/ibuf0ibuf.cc +++ b/storage/innobase/ibuf/ibuf0ibuf.cc @@ -4397,7 +4397,8 @@ ibuf_merge_or_delete_for_page( ulint dops[IBUF_OP_COUNT]; ut_ad(block == NULL || page_id == block->page.id); - ut_ad(block == NULL || buf_block_get_io_fix(block) == BUF_IO_READ); + ut_ad(block == NULL || buf_block_get_io_fix(block) == BUF_IO_READ + || recv_recovery_is_on()); if (srv_force_recovery >= SRV_FORCE_NO_IBUF_MERGE || trx_sys_hdr_page(page_id) diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h index eae73fd2847..db9aa9d66fb 100644 --- a/storage/innobase/include/buf0buf.h +++ b/storage/innobase/include/buf0buf.h @@ -234,6 +234,15 @@ public: } bool operator!=(const page_id_t& rhs) const { return !(*this == rhs); } + bool operator<(const page_id_t& rhs) const + { + if (m_space == rhs.m_space) { + return m_page_no < rhs.m_page_no; + } + + return m_space < rhs.m_space; + } + /** Retrieve the tablespace id. @return tablespace id */ uint32_t space() const { return m_space; } diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h index b58d4e85ac9..b06cb15e64a 100644 --- a/storage/innobase/include/fil0fil.h +++ b/storage/innobase/include/fil0fil.h @@ -89,6 +89,9 @@ struct fil_space_t { Protected by log_sys.mutex. If and only if this is nonzero, the tablespace will be in named_spaces. */ + /** Log sequence number of the latest MLOG_INDEX_LOAD record + that was found while parsing the redo log */ + lsn_t enable_lsn; bool stop_new_ops; /*!< we set this true when we start deleting a single-table tablespace. diff --git a/storage/innobase/include/fsp0types.h b/storage/innobase/include/fsp0types.h index 1b2ede47252..ee0259e5f2d 100644 --- a/storage/innobase/include/fsp0types.h +++ b/storage/innobase/include/fsp0types.h @@ -269,8 +269,7 @@ or have been introduced in MySQL 5.7 or 8.0: ===================================================================== The flags below only exist in fil_space_t::flags, not in FSP_SPACE_FLAGS: ===================================================================== - 25: DATA_DIR - 26..27: ATOMIC_WRITES + 27: DATA_DIR 28..31: COMPRESSION_LEVEL */ @@ -278,9 +277,9 @@ The flags below only exist in fil_space_t::flags, not in FSP_SPACE_FLAGS: #define FSP_FLAGS_MEM_MASK (~0U << FSP_FLAGS_MEM_DATA_DIR) /** Zero relative shift position of the DATA_DIR flag */ -#define FSP_FLAGS_MEM_DATA_DIR 25 +#define FSP_FLAGS_MEM_DATA_DIR 27 /** Zero relative shift position of the COMPRESSION_LEVEL field */ -#define FSP_FLAGS_MEM_COMPRESSION_LEVEL 26 +#define FSP_FLAGS_MEM_COMPRESSION_LEVEL 28 /** Zero relative shift position of the POST_ANTELOPE field */ #define FSP_FLAGS_POS_POST_ANTELOPE 0 diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 6305f5ec1d2..cc705ec9994 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -154,10 +154,22 @@ struct file_name_t { /** FSP_SIZE of tablespace */ ulint size; + /** the log sequence number of the last observed MLOG_INDEX_LOAD + record for the tablespace */ + lsn_t enable_lsn; + /** Constructor */ file_name_t(std::string name_, bool deleted) : name(name_), space(NULL), status(deleted ? DELETED: NORMAL), - size(0) {} + size(0), enable_lsn(0) {} + + /** Report a MLOG_INDEX_LOAD operation, meaning that + mlog_init for any earlier LSN must be skipped. + @param lsn log sequence number of the MLOG_INDEX_LOAD */ + void mlog_index_load(lsn_t lsn) + { + if (enable_lsn < lsn) enable_lsn = lsn; + } }; /** Map of dirty tablespaces during recovery */ @@ -173,6 +185,8 @@ static recv_spaces_t recv_spaces; enum recv_addr_state { /** not yet processed */ RECV_NOT_PROCESSED, + /** not processed; the page will be reinitialized */ + RECV_WILL_NOT_READ, /** page is being read */ RECV_BEING_READ, /** log records are being applied on the page */ @@ -215,6 +229,117 @@ void (*log_file_op)(ulint space_id, const byte* flags, const byte* name, ulint len, const byte* new_name, ulint new_len); +/** Information about initializing page contents during redo log processing */ +class mlog_init_t +{ +public: + /** A page initialization operation that was parsed from + the redo log */ + struct init { + /** log sequence number of the page initialization */ + lsn_t lsn; + /** Whether btr_page_create() avoided a read of the page. + + At the end of the last recovery batch, ibuf_merge() + will invoke change buffer merge for pages that reside + in the buffer pool. (In the last batch, loading pages + would trigger change buffer merge.) */ + bool created; + }; + +private: + typedef std::map<const page_id_t, init, + std::less<const page_id_t>, + ut_allocator<std::pair<const page_id_t, init> > > + map; + /** Map of page initialization operations. + FIXME: Merge this to recv_sys->addr_hash! */ + map inits; +public: + /** Record that a page will be initialized by the redo log. + @param[in] space tablespace identifier + @param[in] page_no page number + @param[in] lsn log sequence number */ + void add(ulint space, ulint page_no, lsn_t lsn) + { + ut_ad(mutex_own(&recv_sys->mutex)); + const init init = { lsn, false }; + std::pair<map::iterator, bool> p = inits.insert( + map::value_type(page_id_t(space, page_no), init)); + ut_ad(!p.first->second.created); + if (!p.second && p.first->second.lsn < init.lsn) { + p.first->second = init; + } + } + + /** Get the last stored lsn of the page id and its respective + init/load operation. + @param[in] page_id page id + @param[in,out] init initialize log or load log + @return the latest page initialization; + not valid after releasing recv_sys->mutex. */ + init& last(page_id_t page_id) + { + ut_ad(mutex_own(&recv_sys->mutex)); + return inits.find(page_id)->second; + } + + /** At the end of each recovery batch, reset the 'created' flags. */ + void reset() + { + ut_ad(mutex_own(&recv_sys->mutex)); + ut_ad(recv_no_ibuf_operations); + for (map::iterator i= inits.begin(); i != inits.end(); i++) { + i->second.created = false; + } + } + + /** On the last recovery batch, merge buffered changes to those + pages that were initialized by buf_page_create() and still reside + in the buffer pool. Stale pages are not allowed in the buffer pool. + + Note: When MDEV-14481 implements redo log apply in the + background, we will have to ensure that buf_page_get_gen() + will not deliver stale pages to users (pages on which the + change buffer was not merged yet). Normally, the change + buffer merge is performed on I/O completion. Maybe, add a + flag to buf_page_t and perform the change buffer merge on + the first actual access? + @param[in,out] mtr dummy mini-transaction */ + void ibuf_merge(mtr_t& mtr) + { + ut_ad(mutex_own(&recv_sys->mutex)); + ut_ad(!recv_no_ibuf_operations); + mtr.start(); + + for (map::const_iterator i= inits.begin(); i != inits.end(); + i++) { + if (!i->second.created) { + continue; + } + if (buf_block_t* block = buf_page_get_gen( + i->first, 0, RW_X_LATCH, NULL, + BUF_GET_IF_IN_POOL, __FILE__, __LINE__, + &mtr, NULL)) { + mutex_exit(&recv_sys->mutex); + ibuf_merge_or_delete_for_page( + block, i->first, + block->zip_size(), true); + mtr.commit(); + mtr.start(); + mutex_enter(&recv_sys->mutex); + } + } + + mtr.commit(); + } + + /** Clear the data structure */ + void clear() { inits.clear(); } +}; + +static mlog_init_t mlog_init; + /** Process a MLOG_CREATE2 record that indicates that a tablespace is being shrunk in size. @param[in] space_id tablespace identifier @@ -618,6 +743,7 @@ recv_sys_close() } recv_spaces.clear(); + mlog_init.clear(); } /************************************************************ @@ -1737,6 +1863,21 @@ recv_add_to_hash_table( recv_sys->n_addrs++; } + switch (type) { + case MLOG_INIT_FILE_PAGE2: +#if 0 /* MDEV-19241 FIXME: Fix bugs in the logging of ROW_FORMAT=COMPRESSED */ + case MLOG_ZIP_PAGE_COMPRESS: +#endif + case MLOG_INIT_FREE_PAGE: + /* Ignore any earlier redo log records for this page. */ + ut_ad(recv_addr->state == RECV_NOT_PROCESSED + || recv_addr->state == RECV_WILL_NOT_READ); + recv_addr->state = RECV_WILL_NOT_READ; + mlog_init.add(space, page_no, start_lsn); + default: + break; + } + UT_LIST_ADD_LAST(recv_addr->rec_list, recv); prev_field = &(recv->data); @@ -1805,9 +1946,11 @@ recv_data_copy_to_buf( lsn of a log record. @param[in,out] block buffer pool page @param[in,out] mtr mini-transaction -@param[in,out] recv_addr recovery address */ +@param[in,out] recv_addr recovery address +@param[in,out] init page initialization operation, or NULL */ static void recv_recover_page(buf_block_t* block, mtr_t& mtr, - recv_addr_t* recv_addr) + recv_addr_t* recv_addr, + mlog_init_t::init* init = NULL) { page_t* page; page_zip_des_t* page_zip; @@ -1817,6 +1960,8 @@ static void recv_recover_page(buf_block_t* block, mtr_t& mtr, ut_ad(recv_needed_recovery); ut_ad(recv_addr->state != RECV_BEING_PROCESSED); ut_ad(recv_addr->state != RECV_PROCESSED); + ut_ad(!init || init->created); + ut_ad(!init || init->lsn); if (UNIV_UNLIKELY(srv_print_verbose_log == 2)) { fprintf(stderr, "Applying log to page %u:%u\n", @@ -1838,7 +1983,9 @@ static void recv_recover_page(buf_block_t* block, mtr_t& mtr, page_lsn = mach_read_from_8(page + FIL_PAGE_LSN); } + bool free_page = false; lsn_t start_lsn = 0, end_lsn = 0; + const lsn_t init_lsn = init ? init->lsn : 0; for (recv_t* recv = UT_LIST_GET_FIRST(recv_addr->rec_list); recv; recv = UT_LIST_GET_NEXT(rec_list, recv)) { @@ -1849,8 +1996,20 @@ static void recv_recover_page(buf_block_t* block, mtr_t& mtr, if (recv->start_lsn < page_lsn) { /* Ignore this record, because there are later changes for this page. */ + DBUG_LOG("ib_log", "apply skip " + << get_mlog_string(recv->type) + << " LSN " << recv->start_lsn << " < " + << page_lsn); + } else if (recv->start_lsn < init_lsn) { + DBUG_LOG("ib_log", "init skip " + << get_mlog_string(recv->type) + << " LSN " << recv->start_lsn << " < " + << init_lsn); } else { - if (!start_lsn) { + if (recv->type == MLOG_INIT_FREE_PAGE) { + /* This does not really modify the page. */ + free_page = true; + } else if (!start_lsn) { start_lsn = recv->start_lsn; } @@ -1884,7 +2043,7 @@ static void recv_recover_page(buf_block_t* block, mtr_t& mtr, block->page.id.space(), block->page.id.page_no(), true, block, &mtr); - lsn_t end_lsn = recv->start_lsn + recv->len; + end_lsn = recv->start_lsn + recv->len; mach_write_to_8(FIL_PAGE_LSN + page, end_lsn); mach_write_to_8(srv_page_size - FIL_PAGE_END_LSN_OLD_CHKSUM @@ -1911,6 +2070,13 @@ static void recv_recover_page(buf_block_t* block, mtr_t& mtr, log_flush_order_mutex_enter(); buf_flush_note_modification(block, start_lsn, end_lsn, NULL); log_flush_order_mutex_exit(); + } else if (free_page && init) { + /* There have been no operations than MLOG_INIT_FREE_PAGE. + Any buffered changes must not be merged. A subsequent + buf_page_create() from a user thread should discard + any buffered changes. */ + init->created = false; + ut_ad(!mtr.has_modifications()); } /* Make sure that committing mtr does not change the modification @@ -2094,25 +2260,111 @@ ignore: case RECV_DISCARDED: goto ignore; case RECV_NOT_PROCESSED: + case RECV_WILL_NOT_READ: break; } const page_id_t page_id(recv_addr->space, recv_addr->page_no); - mtr.start(); - mtr.set_log_mode(MTR_LOG_NONE); - if (buf_block_t* block = buf_page_get_gen( - page_id, 0, RW_X_LATCH, - NULL, BUF_GET_IF_IN_POOL, - __FILE__, __LINE__, &mtr, NULL)) { - buf_block_dbg_add_level( - block, SYNC_NO_ORDER_CHECK); - recv_recover_page(block, mtr, recv_addr); - ut_ad(mtr.has_committed()); + if (recv_addr->state == RECV_NOT_PROCESSED) { +apply: + mtr.start(); + mtr.set_log_mode(MTR_LOG_NONE); + if (buf_block_t* block = buf_page_get_gen( + page_id, 0, RW_X_LATCH, NULL, + BUF_GET_IF_IN_POOL, + __FILE__, __LINE__, &mtr, NULL)) { + buf_block_dbg_add_level( + block, SYNC_NO_ORDER_CHECK); + recv_recover_page(block, mtr, + recv_addr); + ut_ad(mtr.has_committed()); + } else { + mtr.commit(); + recv_read_in_area(page_id); + } } else { - mtr.commit(); - recv_read_in_area(page_id); + mlog_init_t::init& i = mlog_init.last(page_id); + const lsn_t end_lsn = UT_LIST_GET_LAST( + recv_addr->rec_list)->end_lsn; + + if (end_lsn < i.lsn) { + DBUG_LOG("ib_log", "skip log for page " + << page_id + << " LSN " << end_lsn + << " < " << i.lsn); +skip: + recv_addr->state = RECV_PROCESSED; + goto ignore; + } + + fil_space_t* space = fil_space_acquire_for_io( + recv_addr->space); + if (!space) { + goto skip; + } + + if (space->enable_lsn) { +do_read: + space->release_for_io(); + recv_addr->state = RECV_NOT_PROCESSED; + goto apply; + } + +#if 1 /* MDEV-19241 FIXME: Fix bugs in the logging of ROW_FORMAT=COMPRESSED */ + if (FSP_FLAGS_GET_ZIP_SSIZE(space->flags)) { + goto do_read; + } +#endif + + /* Determine if a tablespace could be + for an internal table for FULLTEXT INDEX. + For those tables, no MLOG_INDEX_LOAD record + used to be written when redo logging was + disabled. Hence, we cannot optimize + away page reads when crash-upgrading + from MariaDB versions before 10.4, + because all the redo log records for + initializing and modifying the page in + the past could be older than the page + in the data file. + + The check is too broad, causing all + tables whose names start with FTS_ to + skip the optimization. */ + + if ((log_sys.log.format + & ~LOG_HEADER_FORMAT_ENCRYPTED) + != LOG_HEADER_FORMAT_10_4 + && strstr(space->name, "/FTS_")) { + space->release_for_io(); + goto do_read; + } + + mtr.start(); + mtr.set_log_mode(MTR_LOG_NONE); + buf_block_t* block = buf_page_create( + page_id, space->zip_size(), &mtr); + if (recv_addr->state == RECV_PROCESSED) { + /* The page happened to exist + in the buffer pool, or it was + just being read in. Before + buf_page_get_with_no_latch() + returned, all changes must have + been applied to the page already. */ + mtr.commit(); + } else { + i.created = true; + buf_block_dbg_add_level( + block, SYNC_NO_ORDER_CHECK); + mtr.x_latch_at_savepoint(0, block); + recv_recover_page(block, mtr, + recv_addr, &i); + ut_ad(mtr.has_committed()); + } + + space->release_for_io(); } } } @@ -2120,7 +2372,13 @@ ignore: /* Wait until all the pages have been processed */ while (recv_sys->n_addrs != 0) { - bool abort = recv_sys->found_corrupt_log; + const bool abort = recv_sys->found_corrupt_log + || recv_sys->found_corrupt_fs; + + if (recv_sys->found_corrupt_fs && !srv_force_recovery) { + ib::info() << "Set innodb_force_recovery=1" + " to ignore corrupted pages."; + } mutex_exit(&(recv_sys->mutex)); @@ -2159,6 +2417,10 @@ ignore: log_mutex_enter(); mutex_enter(&(recv_sys->mutex)); + mlog_init.reset(); + } else if (!recv_no_ibuf_operations) { + /* We skipped this in buf_page_create(). */ + mlog_init.ibuf_merge(mtr); } recv_sys->apply_log_recs = FALSE; @@ -2355,9 +2617,17 @@ recv_report_corrupt_log( } /** Report a MLOG_INDEX_LOAD operation. -@param[in] space_id tablespace identifier */ -ATTRIBUTE_COLD static void recv_mlog_index_load(ulint space_id) +@param[in] space_id tablespace id +@param[in] page_no page number +@param[in] lsn log sequence number */ +ATTRIBUTE_COLD static void +recv_mlog_index_load(ulint space_id, ulint page_no, lsn_t lsn) { + recv_spaces_t::iterator it = recv_spaces.find(space_id); + if (it != recv_spaces.end()) { + it->second.mlog_index_load(lsn); + } + if (log_optimized_ddl_op) { log_optimized_ddl_op(space_id); } @@ -2519,7 +2789,7 @@ loop: /* fall through */ case MLOG_INDEX_LOAD: if (type == MLOG_INDEX_LOAD) { - recv_mlog_index_load(space); + recv_mlog_index_load(space, page_no, old_lsn); } /* fall through */ case MLOG_FILE_NAME: @@ -2673,7 +2943,7 @@ corrupted_log: break; #endif /* UNIV_LOG_LSN_DEBUG */ case MLOG_INDEX_LOAD: - recv_mlog_index_load(space); + recv_mlog_index_load(space, page_no, old_lsn); break; case MLOG_FILE_NAME: case MLOG_FILE_DELETE: @@ -3211,6 +3481,7 @@ recv_init_crash_recovery_spaces(bool rescan, bool& missing_tablespace) /* The tablespace was found, and there are some redo log records for it. */ fil_names_dirty(i->second.space); + i->second.space->enable_lsn = i->second.enable_lsn; } else if (i->second.name == "") { ib::error() << "Missing MLOG_FILE_NAME" " or MLOG_FILE_DELETE" diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index d67c6c02b2f..f1eb6267de7 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -1874,7 +1874,8 @@ files_checked: recv_apply_hashed_log_recs(true); - if (recv_sys->found_corrupt_log) { + if (recv_sys->found_corrupt_log + || recv_sys->found_corrupt_fs) { return(srv_init_abort(DB_CORRUPTION)); } diff --git a/storage/myisam/mysql-test/storage_engine/alter_table_online.rdiff b/storage/myisam/mysql-test/storage_engine/alter_table_online.rdiff index 5ae99e2035c..58c7620f3b9 100644 --- a/storage/myisam/mysql-test/storage_engine/alter_table_online.rdiff +++ b/storage/myisam/mysql-test/storage_engine/alter_table_online.rdiff @@ -14,7 +14,7 @@ +# Also, this problem may cause a chain effect (more errors of different kinds in the test). +# ------------------------------------------- ALTER ONLINE TABLE t1 MODIFY b BIGINT <CUSTOM_COL_OPTIONS>; --ERROR 0A000: LOCK=NONE is not supported. Reason: Cannot change column type INPLACE. Try LOCK=SHARED. +-ERROR 0A000: LOCK=NONE is not supported. Reason: Cannot change column type. Try LOCK=SHARED. +ERROR 0A000: LOCK=NONE is not supported for this operation. Try LOCK=SHARED. +# ERROR: Statement ended with errno 1845, errname ER_ALTER_OPERATION_NOT_SUPPORTED (expected results: ER_ALTER_OPERATION_NOT_SUPPORTED_REASON) ALTER ONLINE TABLE t1 ENGINE=MEMORY; diff --git a/storage/myisammrg/mysql-test/storage_engine/alter_table_online.rdiff b/storage/myisammrg/mysql-test/storage_engine/alter_table_online.rdiff index 854a00cfd81..857854a6115 100644 --- a/storage/myisammrg/mysql-test/storage_engine/alter_table_online.rdiff +++ b/storage/myisammrg/mysql-test/storage_engine/alter_table_online.rdiff @@ -61,7 +61,7 @@ +# Also, this problem may cause a chain effect (more errors of different kinds in the test). +# ------------------------------------------- ALTER ONLINE TABLE t1 MODIFY b BIGINT <CUSTOM_COL_OPTIONS>; --ERROR 0A000: LOCK=NONE is not supported. Reason: Cannot change column type INPLACE. Try LOCK=SHARED. +-ERROR 0A000: LOCK=NONE is not supported. Reason: Cannot change column type. Try LOCK=SHARED. +ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE. +# ERROR: Statement ended with errno 1845, errname ER_ALTER_OPERATION_NOT_SUPPORTED (expected results: ER_ALTER_OPERATION_NOT_SUPPORTED_REASON) ALTER ONLINE TABLE t1 ENGINE=MEMORY; |