1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
--source include/have_innodb.inc
CREATE TABLE t1 (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t1 VALUES(42);
CREATE TABLE t1b LIKE t1;
INSERT INTO t1b VALUES(3);
CREATE TABLE t1z LIKE t1;
CREATE TABLE t1t (id TINYINT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t0t LIKE t1t;
INSERT INTO t1t VALUES(123);
--let DATADIR=`select @@datadir`
--let PAGE_SIZE=`select @@innodb_page_size`
FLUSH TABLES t1,t1b,t1t FOR EXPORT;
--copy_file $DATADIR/test/t1.ibd $DATADIR/test/t.ibd
--copy_file $DATADIR/test/t1.ibd $DATADIR/test/tz.ibd
--copy_file $DATADIR/test/t1b.ibd $DATADIR/test/tb.ibd
--copy_file $DATADIR/test/t1t.ibd $DATADIR/test/tt.ibd
UNLOCK TABLES;
CREATE TABLE t5_7 LIKE t1;
CREATE TABLE t5_7b LIKE t1b;
CREATE TABLE t10_1 LIKE t1;
CREATE TABLE t10_1b LIKE t1b;
ALTER TABLE t1 DISCARD TABLESPACE;
ALTER TABLE t1b DISCARD TABLESPACE;
ALTER TABLE t1z DISCARD TABLESPACE;
ALTER TABLE t1t DISCARD TABLESPACE;
ALTER TABLE t0t DISCARD TABLESPACE;
ALTER TABLE t5_7 DISCARD TABLESPACE;
ALTER TABLE t5_7b DISCARD TABLESPACE;
ALTER TABLE t10_1 DISCARD TABLESPACE;
ALTER TABLE t10_1b DISCARD TABLESPACE;
FLUSH TABLES;
# Update the PAGE_ROOT_AUTO_INC field of a few files.
perl;
do "$ENV{MTR_SUITE_DIR}/include/crc32.pl";
sub update_autoinc
{
my ($file, $value) = @_;
open(FILE, "+<$file") || die "Unable to open $file";
binmode FILE;
my $ps= $ENV{PAGE_SIZE};
my $page;
die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps;
my $full_crc32 = unpack("N",substr($page,54,4)) & 0x10; # FIL_SPACE_FLAGS
sysseek(FILE, 3*$ps, 0) || die "Unable to seek $file\n";
die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps;
substr($page,56,8)=pack("NN",0,$value);
my $polynomial = 0x82f63b78; # CRC-32C
if ($full_crc32) {
my $ck = mycrc32(substr($page, 0, $ps-4), 0, $polynomial);
substr($page, $ps-4, 4) = pack("N", $ck);
}
else
{
my $ck= pack("N",mycrc32(substr($page, 4, 22), 0, $polynomial) ^
mycrc32(substr($page, 38, $ps - 38 - 8), 0, $polynomial));
substr($page,0,4)=$ck;
substr($page,$ps-8,4)=$ck;
}
sysseek(FILE, 3*$ps, 0) || die "Unable to rewind $file\n";
syswrite(FILE, $page, $ps)==$ps || die "Unable to write $file\n";
close(FILE) || die "Unable to close $file";
}
update_autoinc("$ENV{DATADIR}/test/tz.ibd", 0);
update_autoinc("$ENV{DATADIR}/test/t.ibd", 3);
update_autoinc("$ENV{DATADIR}/test/tb.ibd", 346);
update_autoinc("$ENV{DATADIR}/test/tt.ibd", 128);
EOF
--remove_file $DATADIR/test/t5_7.frm
--remove_file $DATADIR/test/t5_7b.frm
--copy_file $MYSQL_TEST_DIR/std_data/autoinc_import_57.frm $DATADIR/test/t5_7.frm
--copy_file $MYSQL_TEST_DIR/std_data/autoinc_import_57.frm $DATADIR/test/t5_7b.frm
--remove_file $DATADIR/test/t10_1.frm
--remove_file $DATADIR/test/t10_1b.frm
--copy_file $MYSQL_TEST_DIR/std_data/autoinc_import_101.frm $DATADIR/test/t10_1.frm
--copy_file $MYSQL_TEST_DIR/std_data/autoinc_import_101.frm $DATADIR/test/t10_1b.frm
--copy_file $DATADIR/test/t.ibd $DATADIR/test/t5_7.ibd
--copy_file $DATADIR/test/tb.ibd $DATADIR/test/t5_7b.ibd
--copy_file $DATADIR/test/t.ibd $DATADIR/test/t10_1.ibd
--copy_file $DATADIR/test/tb.ibd $DATADIR/test/t10_1b.ibd
--move_file $DATADIR/test/t.ibd $DATADIR/test/t1.ibd
--move_file $DATADIR/test/tb.ibd $DATADIR/test/t1b.ibd
--copy_file $DATADIR/test/tt.ibd $DATADIR/test/t0t.ibd
--move_file $DATADIR/test/tt.ibd $DATADIR/test/t1t.ibd
--move_file $DATADIR/test/tz.ibd $DATADIR/test/t1z.ibd
ALTER TABLE t0t IMPORT TABLESPACE;
INSERT INTO t0t VALUES(NULL);
SELECT * FROM t0t;
DROP TABLE t0t;
ALTER TABLE t1 IMPORT TABLESPACE;
ALTER TABLE t1b IMPORT TABLESPACE;
ALTER TABLE t1z IMPORT TABLESPACE;
ALTER TABLE t1t IMPORT TABLESPACE;
ALTER TABLE t5_7 IMPORT TABLESPACE;
ALTER TABLE t5_7b IMPORT TABLESPACE;
ALTER TABLE t10_1 IMPORT TABLESPACE;
ALTER TABLE t10_1b IMPORT TABLESPACE;
--let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 128 to 123 on table `test`\.`t0t`
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 0 to 42 on table `test`\.`t1z`
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 128 to 123 on table `test`\.`t1t`
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 3 to 42 on table `test`\.`t5_7` \(created with version 50744\)
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 3 to 42 on table `test`\.`t10_1` \(created with version 100149\)
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC
--source include/search_pattern_in_file.inc
# Restart, so that the InnoDB tables will be loaded into the data dictionary.
--let $restart_parameters=--read-only
--source include/restart_mysqld.inc
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b;
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;
--let $restart_parameters=--innodb-read-only --read-only
--source include/restart_mysqld.inc
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b;
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;
--let $restart_parameters=--innodb-read-only
--source include/restart_mysqld.inc
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b;
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;
SELECT COUNT(*) FROM t1;
SELECT COUNT(*) FROM t1b;
SELECT COUNT(*) FROM t1t;
SELECT COUNT(*) FROM t1z;
SELECT COUNT(*) FROM t5_7;
SELECT COUNT(*) FROM t5_7b;
SELECT COUNT(*) FROM t10_1;
SELECT COUNT(*) FROM t10_1b;
--let $restart_parameters=
--source include/restart_mysqld.inc
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;
INSERT INTO t1 VALUES(NULL);
INSERT INTO t1b VALUES(NULL);
INSERT INTO t1t VALUES(NULL);
INSERT INTO t1z VALUES(NULL);
INSERT INTO t5_7 VALUES(NULL);
INSERT INTO t5_7b VALUES(NULL);
INSERT INTO t10_1 VALUES(NULL);
INSERT INTO t10_1b VALUES(NULL);
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;
SELECT * FROM t1;
SELECT * FROM t1b;
SELECT * FROM t1t;
SELECT * FROM t1z;
SELECT * FROM t5_7;
SELECT * FROM t5_7b;
SELECT * FROM t10_1;
SELECT * FROM t10_1b;
DROP TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b;
|