auto-merged
This commit is contained in:
commit
1b107a5957
@ -176,7 +176,7 @@ check_cpu () {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
cc_ver=`$cc --version | sed 1q`
|
cc_ver=`$cc --version | sed 1q`
|
||||||
cc_verno=`echo $cc_ver | sed -e 's/^.*gcc/gcc/g; s/[^0-9. ]//g; s/^ *//g; s/ .*//g'`
|
cc_verno=`echo $cc_ver | sed -e 's/^.*(GCC)//g; s/[^0-9. ]//g; s/^ *//g; s/ .*//g'`
|
||||||
set -- `echo $cc_verno | tr '.' ' '`
|
set -- `echo $cc_verno | tr '.' ' '`
|
||||||
cc_major=$1
|
cc_major=$1
|
||||||
cc_minor=$2
|
cc_minor=$2
|
||||||
|
@ -2372,28 +2372,3 @@ a MIN(b) MAX(b) AVG(b)
|
|||||||
2 1 3 2.0000
|
2 1 3 2.0000
|
||||||
1 1 3 2.0000
|
1 1 3 2.0000
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
create table t1 (a int, b int, primary key (a,b), key `index` (a,b)) engine=MyISAM;
|
|
||||||
insert into t1 (a,b) values (0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),
|
|
||||||
(0,8),(0,9),(0,10),(0,11);
|
|
||||||
insert into t1 (a,b) select a, max(b)+1 from t1 where a = 0 group by a;
|
|
||||||
select * from t1;
|
|
||||||
a b
|
|
||||||
0 0
|
|
||||||
0 1
|
|
||||||
0 2
|
|
||||||
0 3
|
|
||||||
0 4
|
|
||||||
0 5
|
|
||||||
0 6
|
|
||||||
0 7
|
|
||||||
0 8
|
|
||||||
0 9
|
|
||||||
0 10
|
|
||||||
0 11
|
|
||||||
0 12
|
|
||||||
explain extended select sql_buffer_result a, max(b)+1 from t1 where a = 0 group by a;
|
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
|
||||||
1 SIMPLE t1 range PRIMARY,index PRIMARY 4 NULL 5 Using where; Using index for group-by; Using temporary
|
|
||||||
Warnings:
|
|
||||||
Note 1003 select sql_buffer_result `test`.`t1`.`a` AS `a`,(max(`test`.`t1`.`b`) + 1) AS `max(b)+1` from `test`.`t1` where (`test`.`t1`.`a` = 0) group by `test`.`t1`.`a`
|
|
||||||
drop table t1;
|
|
||||||
|
BIN
mysql-test/std_data/parts/t1_will_crash#P#p1_first_1024.MYD
Normal file
BIN
mysql-test/std_data/parts/t1_will_crash#P#p1_first_1024.MYD
Normal file
Binary file not shown.
BIN
mysql-test/std_data/parts/t1_will_crash#P#p2.MYD
Normal file
BIN
mysql-test/std_data/parts/t1_will_crash#P#p2.MYD
Normal file
Binary file not shown.
BIN
mysql-test/std_data/parts/t1_will_crash#P#p2.MYI
Normal file
BIN
mysql-test/std_data/parts/t1_will_crash#P#p2.MYI
Normal file
Binary file not shown.
BIN
mysql-test/std_data/parts/t1_will_crash#P#p3.MYI
Normal file
BIN
mysql-test/std_data/parts/t1_will_crash#P#p3.MYI
Normal file
Binary file not shown.
BIN
mysql-test/std_data/parts/t1_will_crash#P#p4.MYI
Normal file
BIN
mysql-test/std_data/parts/t1_will_crash#P#p4.MYI
Normal file
Binary file not shown.
BIN
mysql-test/std_data/parts/t1_will_crash#P#p6.MYD
Normal file
BIN
mysql-test/std_data/parts/t1_will_crash#P#p6.MYD
Normal file
Binary file not shown.
BIN
mysql-test/std_data/parts/t1_will_crash#P#p6_2.MYD
Normal file
BIN
mysql-test/std_data/parts/t1_will_crash#P#p6_2.MYD
Normal file
Binary file not shown.
BIN
mysql-test/std_data/parts/t1_will_crash#P#p6_3.MYD
Normal file
BIN
mysql-test/std_data/parts/t1_will_crash#P#p6_3.MYD
Normal file
Binary file not shown.
56
mysql-test/suite/parts/r/partition_recover_myisam.result
Normal file
56
mysql-test/suite/parts/r/partition_recover_myisam.result
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
|
FLUSH TABLES;
|
||||||
|
# replacing t1.MYI with a corrupt + unclosed one created by doing:
|
||||||
|
# 'create table t1 (a int key(a))' head -c1024 t1.MYI > corrupt_t1.MYI
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
Warnings:
|
||||||
|
Error 145 Table './test/t1_will_crash' is marked as crashed and should be repaired
|
||||||
|
Error 1194 Table 't1_will_crash' is marked as crashed and should be repaired
|
||||||
|
Error 1034 1 client is using or hasn't closed the table properly
|
||||||
|
Error 1034 Size of indexfile is: 1024 Should be: 2048
|
||||||
|
Error 1034 Size of datafile is: 77 Should be: 7
|
||||||
|
Error 1034 Number of rows changed from 1 to 11
|
||||||
|
DROP TABLE t1_will_crash;
|
||||||
|
CREATE TABLE t1_will_crash (a INT, KEY (a))
|
||||||
|
ENGINE=MyISAM
|
||||||
|
PARTITION BY HASH(a)
|
||||||
|
PARTITIONS 3;
|
||||||
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
|
FLUSH TABLES;
|
||||||
|
# replacing t1#P#p1.MYI with a corrupt + unclosed one created by doing:
|
||||||
|
# 'create table t1 (a int key(a)) partition by hash (a) partitions 3'
|
||||||
|
# head -c1024 t1#P#p1.MYI > corrupt_t1#P#p1.MYI
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
Warnings:
|
||||||
|
Error 145 Table './test/t1_will_crash#P#p1' is marked as crashed and should be repaired
|
||||||
|
Error 1194 Table 't1_will_crash' is marked as crashed and should be repaired
|
||||||
|
Error 1034 1 client is using or hasn't closed the table properly
|
||||||
|
Error 1034 Size of indexfile is: 1024 Should be: 2048
|
||||||
|
Error 1034 Size of datafile is: 28 Should be: 7
|
||||||
|
Error 1034 Number of rows changed from 1 to 4
|
||||||
|
DROP TABLE t1_will_crash;
|
@ -1,8 +1,20 @@
|
|||||||
|
# REPAIR USE_FRM is not implemented for partitioned tables.
|
||||||
|
# test of non partitioned myisam for reference
|
||||||
CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
|
CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
|
||||||
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
# replacing t1.MYI with a corrupt + unclosed one created by doing:
|
# replacing t1.MYI with a corrupt + unclosed one created by doing:
|
||||||
# 'create table t1 (a int key(a))' head -c1024 t1.MYI > corrupt_t1.MYI
|
# 'create table t1 (a int key(a))' head -c1024 t1.MYI > corrupt_t1.MYI
|
||||||
|
CHECK TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning 1 client is using or hasn't closed the table properly
|
||||||
|
test.t1_will_crash check error Size of indexfile is: 1024 Should be: 2048
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 77 Should be: 7
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
REPAIR TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 1 to 11
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
SELECT * FROM t1_will_crash;
|
SELECT * FROM t1_will_crash;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
@ -16,23 +28,70 @@ a
|
|||||||
9
|
9
|
||||||
10
|
10
|
||||||
11
|
11
|
||||||
Warnings:
|
|
||||||
Error 145 Table './test/t1_will_crash' is marked as crashed and should be repaired
|
|
||||||
Error 1194 Table 't1_will_crash' is marked as crashed and should be repaired
|
|
||||||
Error 1034 1 client is using or hasn't closed the table properly
|
|
||||||
Error 1034 Size of indexfile is: 1024 Should be: 2048
|
|
||||||
Error 1034 Size of datafile is: 77 Should be: 7
|
|
||||||
Error 1034 Number of rows changed from 1 to 11
|
|
||||||
DROP TABLE t1_will_crash;
|
DROP TABLE t1_will_crash;
|
||||||
|
# test of check/repair of a damaged partition's MYI-file
|
||||||
CREATE TABLE t1_will_crash (a INT, KEY (a))
|
CREATE TABLE t1_will_crash (a INT, KEY (a))
|
||||||
ENGINE=MyISAM
|
ENGINE=MyISAM
|
||||||
PARTITION BY HASH(a)
|
PARTITION BY HASH (a)
|
||||||
PARTITIONS 3;
|
PARTITIONS 3;
|
||||||
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
|
# test with CHECK/REPAIR TABLE
|
||||||
# replacing t1#P#p1.MYI with a corrupt + unclosed one created by doing:
|
# replacing t1#P#p1.MYI with a corrupt + unclosed one created by doing:
|
||||||
# 'create table t1 (a int key(a)) partition by hash (a) partitions 3'
|
# 'create table t1 (a int key(a)) partition by hash (a) partitions 3'
|
||||||
# head -c1024 t1#P#p1.MYI > corrupt_t1#P#p1.MYI
|
# head -c1024 t1#P#p1.MYI > corrupt_t1#P#p1.MYI
|
||||||
|
CHECK TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning 1 client is using or hasn't closed the table properly
|
||||||
|
test.t1_will_crash check error Size of indexfile is: 1024 Should be: 2048
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 28 Should be: 7
|
||||||
|
test.t1_will_crash check error Partition p1 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
REPAIR TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 1 to 4
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
FLUSH TABLES;
|
||||||
|
# test with ALTER TABLE ... CHECK/REPAIR PARTITION
|
||||||
|
# replacing t1_will_crash#P#p1.MYI with a corrupt + unclosed one
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p0, p2;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check status OK
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p0, p1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning 1 client is using or hasn't closed the table properly
|
||||||
|
test.t1_will_crash check error Size of indexfile is: 1024 Should be: 2048
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 28 Should be: 7
|
||||||
|
test.t1_will_crash check error Partition p1 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p1, p2;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning Table is marked as crashed
|
||||||
|
test.t1_will_crash check warning 1 client is using or hasn't closed the table properly
|
||||||
|
test.t1_will_crash check error Size of indexfile is: 1024 Should be: 2048
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 28 Should be: 7
|
||||||
|
test.t1_will_crash check error Partition p1 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p0, p2;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p0, p1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 1 to 4
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
SELECT * FROM t1_will_crash;
|
SELECT * FROM t1_will_crash;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
@ -46,11 +105,359 @@ a
|
|||||||
9
|
9
|
||||||
10
|
10
|
||||||
11
|
11
|
||||||
Warnings:
|
DROP TABLE t1_will_crash;
|
||||||
Error 145 Table './test/t1_will_crash#P#p1' is marked as crashed and should be repaired
|
# test of check/repair of a damaged subpartition's MYI-file
|
||||||
Error 1194 Table 't1_will_crash' is marked as crashed and should be repaired
|
CREATE TABLE t1_will_crash (a INT, KEY (a))
|
||||||
Error 1034 1 client is using or hasn't closed the table properly
|
ENGINE=MyISAM
|
||||||
Error 1034 Size of indexfile is: 1024 Should be: 2048
|
PARTITION BY RANGE (a)
|
||||||
Error 1034 Size of datafile is: 28 Should be: 7
|
SUBPARTITION BY HASH (a)
|
||||||
Error 1034 Number of rows changed from 1 to 4
|
SUBPARTITIONS 2
|
||||||
|
(PARTITION p0 VALUES LESS THAN (7),
|
||||||
|
PARTITION p1 VALUES LESS THAN MAXVALUE);
|
||||||
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
FLUSH TABLES;
|
||||||
|
# test with CHECK/REPAIR TABLE
|
||||||
|
# replacing t1_will_crash#P#p1#SP#p1sp0.MYI with a corrupt + unclosed one
|
||||||
|
CHECK TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning 1 client is using or hasn't closed the table properly
|
||||||
|
test.t1_will_crash check error Size of indexfile is: 1024 Should be: 2048
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 14 Should be: 7
|
||||||
|
test.t1_will_crash check error Subpartition p1sp0 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
REPAIR TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 1 to 2
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
FLUSH TABLES;
|
||||||
|
# test with ALTER TABLE ... CHECK/REPAIR PARTITION
|
||||||
|
# replacing t1_will_crash#P#p1#SP#p1sp0.MYI with a corrupt + unclosed one
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p0;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check status OK
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION all;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning 1 client is using or hasn't closed the table properly
|
||||||
|
test.t1_will_crash check error Size of indexfile is: 1024 Should be: 2048
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 14 Should be: 7
|
||||||
|
test.t1_will_crash check error Subpartition p1sp0 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning Table is marked as crashed
|
||||||
|
test.t1_will_crash check warning 1 client is using or hasn't closed the table properly
|
||||||
|
test.t1_will_crash check error Size of indexfile is: 1024 Should be: 2048
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 14 Should be: 7
|
||||||
|
test.t1_will_crash check error Subpartition p1sp0 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p0;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p0, p1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 1 to 2
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
DROP TABLE t1_will_crash;
|
||||||
|
# test of check/repair of crashed partitions in variuos states
|
||||||
|
CREATE TABLE t1_will_crash (
|
||||||
|
a VARCHAR(255),
|
||||||
|
b INT,
|
||||||
|
c LONGTEXT,
|
||||||
|
PRIMARY KEY (a, b))
|
||||||
|
ENGINE=MyISAM
|
||||||
|
PARTITION BY HASH (b)
|
||||||
|
PARTITIONS 7;
|
||||||
|
SELECT COUNT(*) FROM t1_will_crash;
|
||||||
|
COUNT(*)
|
||||||
|
33
|
||||||
|
SELECT (b % 7) AS partition, COUNT(*) AS rows FROM t1_will_crash GROUP BY (b % 7);
|
||||||
|
partition rows
|
||||||
|
0 2
|
||||||
|
1 5
|
||||||
|
2 5
|
||||||
|
3 5
|
||||||
|
4 4
|
||||||
|
5 4
|
||||||
|
6 8
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash ORDER BY partition, b, a;
|
||||||
|
partition b a length(c)
|
||||||
|
0 0 lost 64
|
||||||
|
0 7 z lost 64
|
||||||
|
1 1 abc 64
|
||||||
|
1 8 tuw 64
|
||||||
|
1 29 kkkkkkkkKkk 64
|
||||||
|
1 71 1 broken when head -c1024 on datafile 1024
|
||||||
|
1 71 eee 64
|
||||||
|
2 2 def 64
|
||||||
|
2 9 vxy 64
|
||||||
|
2 23 lll 64
|
||||||
|
2 30 2 crashed after _mi_mark_changed 64
|
||||||
|
2 79 ccc 64
|
||||||
|
3 3 ghi 64
|
||||||
|
3 10 aaa 64
|
||||||
|
3 17 nnn 64
|
||||||
|
3 24 3 crashed after write_record 64
|
||||||
|
3 73 ddd 64
|
||||||
|
4 4 pqr 64
|
||||||
|
4 11 bbb 64
|
||||||
|
4 18 4 crashed after flush_cached_blocks 64
|
||||||
|
4 67 fff 64
|
||||||
|
5 5 mno 64
|
||||||
|
5 19 mmm 64
|
||||||
|
5 40 5 still here since crash in next row in multirow insert? 64
|
||||||
|
5 89 a 64
|
||||||
|
6 6 jkl 64
|
||||||
|
6 13 ooo 64
|
||||||
|
6 27 6 row 7 (crash before completely written to datafile) 128
|
||||||
|
6 34 6 row 2 64
|
||||||
|
6 48 6 row 4 64
|
||||||
|
6 62 6 row 6 64
|
||||||
|
6 83 64
|
||||||
|
6 97 zzzzzZzzzzz 64
|
||||||
|
FLUSH TABLES;
|
||||||
|
# truncating p0 to simulate an empty datafile (not recovered!)
|
||||||
|
# replacing p1 with only the first 1024 bytes (not recovered!)
|
||||||
|
# replacing p3 with a crashed one at the last row in first insert
|
||||||
|
# (crashed right after *share->write_record())
|
||||||
|
# replacing p6 with a crashed MYD file (1) (splitted dynamic record)
|
||||||
|
ANALYZE TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash analyze status OK
|
||||||
|
OPTIMIZE TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash optimize warning Number of rows changed from 8 to 7
|
||||||
|
test.t1_will_crash optimize status OK
|
||||||
|
CHECK TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check error Size of datafile is: 0 Should be: 164
|
||||||
|
test.t1_will_crash check error Partition p0 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
REPAIR TABLE t1_will_crash;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 2 to 0
|
||||||
|
test.t1_will_crash repair info Found block that points outside data file at 344
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 5 to 4
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 0 to 5
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
|
SELECT COUNT(*) FROM t1_will_crash;
|
||||||
|
COUNT(*)
|
||||||
|
29
|
||||||
|
SELECT (b % 7) AS partition, COUNT(*) AS rows FROM t1_will_crash GROUP BY (b % 7);
|
||||||
|
partition rows
|
||||||
|
1 4
|
||||||
|
2 5
|
||||||
|
3 5
|
||||||
|
4 4
|
||||||
|
5 4
|
||||||
|
6 7
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash ORDER BY partition, b, a;
|
||||||
|
partition b a length(c)
|
||||||
|
1 1 abc 64
|
||||||
|
1 8 tuw 64
|
||||||
|
1 29 kkkkkkkkKkk 64
|
||||||
|
1 71 eee 64
|
||||||
|
2 2 def 64
|
||||||
|
2 9 vxy 64
|
||||||
|
2 23 lll 64
|
||||||
|
2 30 2 crashed after _mi_mark_changed 64
|
||||||
|
2 79 ccc 64
|
||||||
|
3 3 ghi 64
|
||||||
|
3 10 aaa 64
|
||||||
|
3 17 nnn 64
|
||||||
|
3 24 3 crashed after write_record 64
|
||||||
|
3 73 ddd 64
|
||||||
|
4 4 pqr 64
|
||||||
|
4 11 bbb 64
|
||||||
|
4 18 4 crashed after flush_cached_blocks 64
|
||||||
|
4 67 fff 64
|
||||||
|
5 5 mno 64
|
||||||
|
5 19 mmm 64
|
||||||
|
5 40 5 still here since crash in next row in multirow insert? 64
|
||||||
|
5 89 a 64
|
||||||
|
6 6 jkl 64
|
||||||
|
6 13 ooo 64
|
||||||
|
6 34 6 row 2 64
|
||||||
|
6 48 6 row 4 64
|
||||||
|
6 62 6 row 6 64
|
||||||
|
6 83 64
|
||||||
|
6 97 zzzzzZzzzzz 64
|
||||||
|
FLUSH TABLES;
|
||||||
|
#
|
||||||
|
# replacing p2 with crashed files (after _mi_mark_changed)
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p2;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning 1 client is using or hasn't closed the table properly
|
||||||
|
test.t1_will_crash check status OK
|
||||||
|
# crash was when index only marked as opened, no real corruption
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p2;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check status OK
|
||||||
|
FLUSH TABLES;
|
||||||
|
#
|
||||||
|
# replacing p4 with updated but not closed index file
|
||||||
|
ALTER TABLE t1_will_crash OPTIMIZE PARTITION p4;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash optimize error Found key at page 2048 that points to record outside datafile
|
||||||
|
test.t1_will_crash optimize error Partition p4 returned error
|
||||||
|
test.t1_will_crash optimize status Operation failed
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p4;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning Table is marked as crashed and last repair failed
|
||||||
|
test.t1_will_crash check warning 1 client is using or hasn't closed the table properly
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 368 Should be: 252
|
||||||
|
test.t1_will_crash check error Found 4 keys of 3
|
||||||
|
test.t1_will_crash check error Partition p4 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p4;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 3 to 4
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
|
FLUSH TABLES;
|
||||||
|
#
|
||||||
|
# replacing p6 with a crashed MYD file (2) (splitted dynamic record)
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p6;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 868 Should be: 604
|
||||||
|
test.t1_will_crash check error Unexpected byte: 0 at link: 340
|
||||||
|
test.t1_will_crash check error Partition p6 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p6;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair info Delete link points outside datafile at 340
|
||||||
|
test.t1_will_crash repair info Delete link points outside datafile at 340
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash
|
||||||
|
WHERE (b % 7) = 6
|
||||||
|
ORDER BY partition, b, a;
|
||||||
|
partition b a length(c)
|
||||||
|
6 6 jkl 64
|
||||||
|
6 13 ooo 64
|
||||||
|
6 34 6 row 2 64
|
||||||
|
6 48 6 row 4 64
|
||||||
|
6 62 6 row 6 64
|
||||||
|
6 83 64
|
||||||
|
6 97 zzzzzZzzzzz 64
|
||||||
|
FLUSH TABLES;
|
||||||
|
#
|
||||||
|
# replacing p6 with a crashed MYD file (3) (splitted dynamic record)
|
||||||
|
# Different results from the corrupt table, which can lead to dropping
|
||||||
|
# of the not completely written rows when using REBUILD on a corrupt
|
||||||
|
# table, depending if one reads via index or direct on datafile.
|
||||||
|
# Since crash when reuse of deleted row space, CHECK MEDIUM or EXTENDED
|
||||||
|
# is required (MEDIUM is default) to verify correct behavior!
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash
|
||||||
|
WHERE (b % 7) = 6
|
||||||
|
ORDER BY partition, b, a;
|
||||||
|
partition b a length(c)
|
||||||
|
6 6 jkl 64
|
||||||
|
6 13 ooo 64
|
||||||
|
6 34 6 row 2 64
|
||||||
|
6 83 64
|
||||||
|
6 97 zzzzzZzzzzz 64
|
||||||
|
SELECT (b % 7) AS partition, b, a FROM (SELECT b,a FROM t1_will_crash) q
|
||||||
|
WHERE (b % 7) = 6
|
||||||
|
ORDER BY partition, b, a;
|
||||||
|
partition b a
|
||||||
|
6 6 jkl
|
||||||
|
6 13 ooo
|
||||||
|
6 34 6 row 2
|
||||||
|
6 48 6 row 4
|
||||||
|
6 62 6 row 6
|
||||||
|
6 83
|
||||||
|
6 97 zzzzzZzzzzz
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p6;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check warning Size of datafile is: 868 Should be: 604
|
||||||
|
test.t1_will_crash check error Record-count is not ok; is 8 Should be: 7
|
||||||
|
test.t1_will_crash check warning Found 10 key parts. Should be: 7
|
||||||
|
test.t1_will_crash check error Partition p6 returned error
|
||||||
|
test.t1_will_crash check error Corrupt
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p6;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash repair warning Number of rows changed from 7 to 8
|
||||||
|
test.t1_will_crash repair status OK
|
||||||
|
SELECT COUNT(*) FROM t1_will_crash;
|
||||||
|
COUNT(*)
|
||||||
|
29
|
||||||
|
SELECT (b % 7) AS partition, COUNT(*) AS rows FROM t1_will_crash GROUP BY (b % 7);
|
||||||
|
partition rows
|
||||||
|
1 4
|
||||||
|
2 4
|
||||||
|
3 5
|
||||||
|
4 4
|
||||||
|
5 4
|
||||||
|
6 8
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash ORDER BY partition, b, a;
|
||||||
|
partition b a length(c)
|
||||||
|
1 1 abc 64
|
||||||
|
1 8 tuw 64
|
||||||
|
1 29 kkkkkkkkKkk 64
|
||||||
|
1 71 eee 64
|
||||||
|
2 2 def 64
|
||||||
|
2 9 vxy 64
|
||||||
|
2 23 lll 64
|
||||||
|
2 79 ccc 64
|
||||||
|
3 3 ghi 64
|
||||||
|
3 10 aaa 64
|
||||||
|
3 17 nnn 64
|
||||||
|
3 24 3 crashed after write_record 64
|
||||||
|
3 73 ddd 64
|
||||||
|
4 4 pqr 64
|
||||||
|
4 11 bbb 64
|
||||||
|
4 18 4 crashed after flush_cached_blocks 64
|
||||||
|
4 67 fff 64
|
||||||
|
5 5 mno 64
|
||||||
|
5 19 mmm 64
|
||||||
|
5 40 5 still here since crash in next row in multirow insert? 64
|
||||||
|
5 89 a 64
|
||||||
|
6 6 jkl 64
|
||||||
|
6 13 ooo 64
|
||||||
|
6 27 6 row 7 (crash before completely written to datafile) 128
|
||||||
|
6 34 6 row 2 64
|
||||||
|
6 48 6 row 4 64
|
||||||
|
6 62 6 row 6 64
|
||||||
|
6 83 64
|
||||||
|
6 97 zzzzzZzzzzz 64
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION all EXTENDED;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1_will_crash check status OK
|
||||||
DROP TABLE t1_will_crash;
|
DROP TABLE t1_will_crash;
|
||||||
|
31
mysql-test/suite/parts/t/partition_recover_myisam.test
Normal file
31
mysql-test/suite/parts/t/partition_recover_myisam.test
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# test the auto-recover (--myisam-recover) of partitioned myisam tables
|
||||||
|
--source include/have_partition.inc
|
||||||
|
--disable_warnings
|
||||||
|
--disable_query_log
|
||||||
|
drop table if exists t1_will_crash;
|
||||||
|
--enable_query_log
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
|
FLUSH TABLES;
|
||||||
|
--echo # replacing t1.MYI with a corrupt + unclosed one created by doing:
|
||||||
|
--echo # 'create table t1 (a int key(a))' head -c1024 t1.MYI > corrupt_t1.MYI
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash.MYI
|
||||||
|
--copy_file std_data/corrupt_t1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash.MYI
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
DROP TABLE t1_will_crash;
|
||||||
|
CREATE TABLE t1_will_crash (a INT, KEY (a))
|
||||||
|
ENGINE=MyISAM
|
||||||
|
PARTITION BY HASH(a)
|
||||||
|
PARTITIONS 3;
|
||||||
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
|
FLUSH TABLES;
|
||||||
|
--echo # replacing t1#P#p1.MYI with a corrupt + unclosed one created by doing:
|
||||||
|
--echo # 'create table t1 (a int key(a)) partition by hash (a) partitions 3'
|
||||||
|
--echo # head -c1024 t1#P#p1.MYI > corrupt_t1#P#p1.MYI
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
|
||||||
|
--copy_file std_data/corrupt_t1#P#p1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
DROP TABLE t1_will_crash;
|
@ -1,3 +1,4 @@
|
|||||||
|
# test of check/repair of partitioned myisam tables
|
||||||
--source include/have_partition.inc
|
--source include/have_partition.inc
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
@ -5,7 +6,9 @@ drop table if exists t1_will_crash;
|
|||||||
--enable_query_log
|
--enable_query_log
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
--echo # REPAIR USE_FRM is not implemented for partitioned tables.
|
||||||
|
|
||||||
|
--echo # test of non partitioned myisam for reference
|
||||||
CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
|
CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
|
||||||
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
@ -13,18 +16,227 @@ FLUSH TABLES;
|
|||||||
--echo # 'create table t1 (a int key(a))' head -c1024 t1.MYI > corrupt_t1.MYI
|
--echo # 'create table t1 (a int key(a))' head -c1024 t1.MYI > corrupt_t1.MYI
|
||||||
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash.MYI
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash.MYI
|
||||||
--copy_file std_data/corrupt_t1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash.MYI
|
--copy_file std_data/corrupt_t1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash.MYI
|
||||||
|
CHECK TABLE t1_will_crash;
|
||||||
|
REPAIR TABLE t1_will_crash;
|
||||||
SELECT * FROM t1_will_crash;
|
SELECT * FROM t1_will_crash;
|
||||||
DROP TABLE t1_will_crash;
|
DROP TABLE t1_will_crash;
|
||||||
|
|
||||||
|
--echo # test of check/repair of a damaged partition's MYI-file
|
||||||
CREATE TABLE t1_will_crash (a INT, KEY (a))
|
CREATE TABLE t1_will_crash (a INT, KEY (a))
|
||||||
ENGINE=MyISAM
|
ENGINE=MyISAM
|
||||||
PARTITION BY HASH(a)
|
PARTITION BY HASH (a)
|
||||||
PARTITIONS 3;
|
PARTITIONS 3;
|
||||||
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
|
--echo # test with CHECK/REPAIR TABLE
|
||||||
--echo # replacing t1#P#p1.MYI with a corrupt + unclosed one created by doing:
|
--echo # replacing t1#P#p1.MYI with a corrupt + unclosed one created by doing:
|
||||||
--echo # 'create table t1 (a int key(a)) partition by hash (a) partitions 3'
|
--echo # 'create table t1 (a int key(a)) partition by hash (a) partitions 3'
|
||||||
--echo # head -c1024 t1#P#p1.MYI > corrupt_t1#P#p1.MYI
|
--echo # head -c1024 t1#P#p1.MYI > corrupt_t1#P#p1.MYI
|
||||||
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
|
||||||
--copy_file std_data/corrupt_t1#P#p1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
|
--copy_file std_data/corrupt_t1#P#p1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
|
||||||
|
CHECK TABLE t1_will_crash;
|
||||||
|
REPAIR TABLE t1_will_crash;
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
FLUSH TABLES;
|
||||||
|
--echo # test with ALTER TABLE ... CHECK/REPAIR PARTITION
|
||||||
|
--echo # replacing t1_will_crash#P#p1.MYI with a corrupt + unclosed one
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
|
||||||
|
--copy_file std_data/corrupt_t1#P#p1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p0, p2;
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p0, p1;
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p1, p2;
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p0, p2;
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p0, p1;
|
||||||
SELECT * FROM t1_will_crash;
|
SELECT * FROM t1_will_crash;
|
||||||
DROP TABLE t1_will_crash;
|
DROP TABLE t1_will_crash;
|
||||||
|
|
||||||
|
--echo # test of check/repair of a damaged subpartition's MYI-file
|
||||||
|
CREATE TABLE t1_will_crash (a INT, KEY (a))
|
||||||
|
ENGINE=MyISAM
|
||||||
|
PARTITION BY RANGE (a)
|
||||||
|
SUBPARTITION BY HASH (a)
|
||||||
|
SUBPARTITIONS 2
|
||||||
|
(PARTITION p0 VALUES LESS THAN (7),
|
||||||
|
PARTITION p1 VALUES LESS THAN MAXVALUE);
|
||||||
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
FLUSH TABLES;
|
||||||
|
--echo # test with CHECK/REPAIR TABLE
|
||||||
|
--echo # replacing t1_will_crash#P#p1#SP#p1sp0.MYI with a corrupt + unclosed one
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1#SP#p1sp0.MYI
|
||||||
|
--copy_file std_data/corrupt_t1#P#p1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1#SP#p1sp0.MYI
|
||||||
|
CHECK TABLE t1_will_crash;
|
||||||
|
REPAIR TABLE t1_will_crash;
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
FLUSH TABLES;
|
||||||
|
--echo # test with ALTER TABLE ... CHECK/REPAIR PARTITION
|
||||||
|
--echo # replacing t1_will_crash#P#p1#SP#p1sp0.MYI with a corrupt + unclosed one
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1#SP#p1sp0.MYI
|
||||||
|
--copy_file std_data/corrupt_t1#P#p1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1#SP#p1sp0.MYI
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p0;
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION all;
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p1;
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p0;
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p0, p1;
|
||||||
|
SELECT * FROM t1_will_crash;
|
||||||
|
DROP TABLE t1_will_crash;
|
||||||
|
|
||||||
|
--echo # test of check/repair of crashed partitions in variuos states
|
||||||
|
CREATE TABLE t1_will_crash (
|
||||||
|
a VARCHAR(255),
|
||||||
|
b INT,
|
||||||
|
c LONGTEXT,
|
||||||
|
PRIMARY KEY (a, b))
|
||||||
|
ENGINE=MyISAM
|
||||||
|
PARTITION BY HASH (b)
|
||||||
|
PARTITIONS 7;
|
||||||
|
|
||||||
|
# creating a longer string for for filling the records
|
||||||
|
let $i= 3;
|
||||||
|
let $lt= longtext;
|
||||||
|
while ($i>0)
|
||||||
|
{
|
||||||
|
let $lt= $lt$lt;
|
||||||
|
dec $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Tests (mapped to partition)
|
||||||
|
# Partition
|
||||||
|
# 0 - truncated datafile (size = 0 bytes)
|
||||||
|
# 1 - head -c 1024 of datafile (simulates crashed write)
|
||||||
|
# 2 - after _mi_mark_file_changed (only marked index as opened)
|
||||||
|
# 3 - after write_record (updated datafile + not closed/updated index)
|
||||||
|
# 4 - after flush_cached_blocks (updated index/datafiles, not closed index)
|
||||||
|
# 5 - (Not used) after mi_state_info_write (fully uppdated/closed index file)
|
||||||
|
# (this was verified to be a harmless crash, since everything was written)
|
||||||
|
# 6 - partly updated datafile (insert 6 small records, delete 5,3,1,
|
||||||
|
# insert one larger record (2.5 X small) and break in gdb before it has
|
||||||
|
# been completely written (in write_dynamic_record)
|
||||||
|
# (done with 3 different MYD files, since it also affects
|
||||||
|
# the delete-linked-list)
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
eval INSERT INTO t1_will_crash VALUES
|
||||||
|
('abc', 1, '$lt'), ('def', 2, '$lt'), ('ghi', 3, '$lt'), ('jkl', 6, '$lt'),
|
||||||
|
('mno', 5, '$lt'), ('pqr', 4, '$lt'), ('tuw', 8, '$lt'), ('vxy', 9, '$lt'),
|
||||||
|
('z lost', 7, '$lt'), ('aaa', 10, '$lt'), ('bbb', 11, '$lt'),
|
||||||
|
('zzzzzZzzzzz', 97, '$lt'), ('a', 89, '$lt'), (' ', 83, '$lt'),
|
||||||
|
('ccc', 79, '$lt'), ('ddd', 73, '$lt'), ('eee', 71, '$lt'),
|
||||||
|
('fff', 67, '$lt'), ('ooo', 13, '$lt'), ('nnn', 17, '$lt'),
|
||||||
|
('mmm', 19, '$lt'), ('lll', 23, '$lt'), ('kkkkkkkkKkk', 29, '$lt'),
|
||||||
|
(' lost', 0, '$lt'), ('1 broken when head -c1024 on datafile', 71,
|
||||||
|
'$lt$lt$lt$lt$lt$lt$lt$lt$lt$lt$lt$lt$lt$lt$lt$lt'),
|
||||||
|
('3 crashed after write_record', 24, '$lt');
|
||||||
|
eval INSERT INTO t1_will_crash VALUES
|
||||||
|
('2 crashed after _mi_mark_changed', 30, '$lt');
|
||||||
|
# if crashed here, part p5 would need to be repaired before next statement
|
||||||
|
# but since we use pre fabricated crashed files, we can skip that here.
|
||||||
|
eval INSERT INTO t1_will_crash VALUES
|
||||||
|
('5 still here since crash in next row in multirow insert?', 40, '$lt'),
|
||||||
|
('4 crashed after flush_cached_blocks', 18, '$lt');
|
||||||
|
# There is no write after mi_state_info_write, so this is not tested.
|
||||||
|
#eval INSERT INTO t1_will_crash VALUES
|
||||||
|
# ('5 crashed after mi_state_info_write', 12, '$lt');
|
||||||
|
eval INSERT INTO t1_will_crash VALUES
|
||||||
|
('6 row 1', 27, '$lt'), ('6 row 2', 34, '$lt'),
|
||||||
|
('6 row 3', 41, '$lt'), ('6 row 4', 48, '$lt'),
|
||||||
|
('6 row 5', 55, '$lt'), ('6 row 6', 62, '$lt');
|
||||||
|
DELETE FROM t1_will_crash WHERE b in (27, 55);
|
||||||
|
DELETE FROM t1_will_crash WHERE b = 41;
|
||||||
|
eval INSERT INTO t1_will_crash VALUES
|
||||||
|
('6 row 7 (crash before completely written to datafile)', 27, '$lt$lt');
|
||||||
|
--enable_query_log
|
||||||
|
SELECT COUNT(*) FROM t1_will_crash;
|
||||||
|
SELECT (b % 7) AS partition, COUNT(*) AS rows FROM t1_will_crash GROUP BY (b % 7);
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash ORDER BY partition, b, a;
|
||||||
|
FLUSH TABLES;
|
||||||
|
# testing p0, p1, p3, p6(1)
|
||||||
|
--echo # truncating p0 to simulate an empty datafile (not recovered!)
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p0.MYD
|
||||||
|
--write_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p0.MYD
|
||||||
|
EOF
|
||||||
|
|
||||||
|
--echo # replacing p1 with only the first 1024 bytes (not recovered!)
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYD
|
||||||
|
--copy_file std_data/parts/t1_will_crash#P#p1_first_1024.MYD $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYD
|
||||||
|
|
||||||
|
--echo # replacing p3 with a crashed one at the last row in first insert
|
||||||
|
--echo # (crashed right after *share->write_record())
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p3.MYI
|
||||||
|
--copy_file std_data/parts/t1_will_crash#P#p3.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p3.MYI
|
||||||
|
|
||||||
|
--echo # replacing p6 with a crashed MYD file (1) (splitted dynamic record)
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p6.MYD
|
||||||
|
--copy_file std_data/parts/t1_will_crash#P#p6.MYD $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p6.MYD
|
||||||
|
ANALYZE TABLE t1_will_crash;
|
||||||
|
OPTIMIZE TABLE t1_will_crash;
|
||||||
|
CHECK TABLE t1_will_crash;
|
||||||
|
REPAIR TABLE t1_will_crash;
|
||||||
|
SELECT COUNT(*) FROM t1_will_crash;
|
||||||
|
SELECT (b % 7) AS partition, COUNT(*) AS rows FROM t1_will_crash GROUP BY (b % 7);
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash ORDER BY partition, b, a;
|
||||||
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
# testing p2, p4, p6(2, 3)
|
||||||
|
--echo #
|
||||||
|
--echo # replacing p2 with crashed files (after _mi_mark_changed)
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p2.MYI
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p2.MYD
|
||||||
|
--copy_file std_data/parts/t1_will_crash#P#p2.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p2.MYI
|
||||||
|
--copy_file std_data/parts/t1_will_crash#P#p2.MYD $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p2.MYD
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p2;
|
||||||
|
--echo # crash was when index only marked as opened, no real corruption
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p2;
|
||||||
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # replacing p4 with updated but not closed index file
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p4.MYI
|
||||||
|
--copy_file std_data/parts/t1_will_crash#P#p4.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p4.MYI
|
||||||
|
#SHOW TABLE STATUS like 't1_will_crash';
|
||||||
|
#ALTER TABLE t1_will_crash ANALYZE PARTITION p4;
|
||||||
|
#SHOW TABLE STATUS like 't1_will_crash';
|
||||||
|
ALTER TABLE t1_will_crash OPTIMIZE PARTITION p4;
|
||||||
|
#SHOW TABLE STATUS like 't1_will_crash';
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p4;
|
||||||
|
#SHOW TABLE STATUS like 't1_will_crash';
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p4;
|
||||||
|
#SHOW TABLE STATUS like 't1_will_crash';
|
||||||
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # replacing p6 with a crashed MYD file (2) (splitted dynamic record)
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p6.MYD
|
||||||
|
--copy_file std_data/parts/t1_will_crash#P#p6_2.MYD $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p6.MYD
|
||||||
|
#ALTER TABLE t1_will_crash OPTIMIZE PARTITION p6;
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p6;
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p6;
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash
|
||||||
|
WHERE (b % 7) = 6
|
||||||
|
ORDER BY partition, b, a;
|
||||||
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # replacing p6 with a crashed MYD file (3) (splitted dynamic record)
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p6.MYD
|
||||||
|
--copy_file std_data/parts/t1_will_crash#P#p6_3.MYD $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p6.MYD
|
||||||
|
--echo # Different results from the corrupt table, which can lead to dropping
|
||||||
|
--echo # of the not completely written rows when using REBUILD on a corrupt
|
||||||
|
--echo # table, depending if one reads via index or direct on datafile.
|
||||||
|
--echo # Since crash when reuse of deleted row space, CHECK MEDIUM or EXTENDED
|
||||||
|
--echo # is required (MEDIUM is default) to verify correct behavior!
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash
|
||||||
|
WHERE (b % 7) = 6
|
||||||
|
ORDER BY partition, b, a;
|
||||||
|
SELECT (b % 7) AS partition, b, a FROM (SELECT b,a FROM t1_will_crash) q
|
||||||
|
WHERE (b % 7) = 6
|
||||||
|
ORDER BY partition, b, a;
|
||||||
|
# NOTE: REBUILD PARTITION without CHECK before, 2 + (1) records will be lost!
|
||||||
|
#ALTER TABLE t1_will_crash REBUILD PARTITION p6;
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION p6;
|
||||||
|
ALTER TABLE t1_will_crash REPAIR PARTITION p6;
|
||||||
|
SELECT COUNT(*) FROM t1_will_crash;
|
||||||
|
SELECT (b % 7) AS partition, COUNT(*) AS rows FROM t1_will_crash GROUP BY (b % 7);
|
||||||
|
SELECT (b % 7) AS partition, b, a, length(c) FROM t1_will_crash ORDER BY partition, b, a;
|
||||||
|
ALTER TABLE t1_will_crash CHECK PARTITION all EXTENDED;
|
||||||
|
DROP TABLE t1_will_crash;
|
||||||
|
@ -1795,6 +1795,7 @@ lock tables t1 read;
|
|||||||
connect (con1,localhost,root,,);
|
connect (con1,localhost,root,,);
|
||||||
--connection con1
|
--connection con1
|
||||||
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.CSV
|
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.CSV
|
||||||
|
--replace_result $MYSQLTEST_VARDIR . master-data/ '' 13 2
|
||||||
# EE_FILENOTFOUND 29
|
# EE_FILENOTFOUND 29
|
||||||
--error 29
|
--error 29
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
@ -942,15 +942,3 @@ SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
|||||||
SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
#
|
|
||||||
# Bug#38195: Incorrect handling of aggregate functions when loose index scan is
|
|
||||||
# used causes server crash.
|
|
||||||
#
|
|
||||||
create table t1 (a int, b int, primary key (a,b), key `index` (a,b)) engine=MyISAM;
|
|
||||||
insert into t1 (a,b) values (0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),
|
|
||||||
(0,8),(0,9),(0,10),(0,11);
|
|
||||||
insert into t1 (a,b) select a, max(b)+1 from t1 where a = 0 group by a;
|
|
||||||
select * from t1;
|
|
||||||
explain extended select sql_buffer_result a, max(b)+1 from t1 where a = 0 group by a;
|
|
||||||
drop table t1;
|
|
||||||
|
@ -354,7 +354,7 @@ size_t unpack_dirname(char * to, const char *from)
|
|||||||
length-= (size_t) (suffix-buff)-1;
|
length-= (size_t) (suffix-buff)-1;
|
||||||
if (length+(h_length= strlen(tilde_expansion)) <= FN_REFLEN)
|
if (length+(h_length= strlen(tilde_expansion)) <= FN_REFLEN)
|
||||||
{
|
{
|
||||||
if (tilde_expansion[h_length-1] == FN_LIBCHAR)
|
if ((h_length > 0) && (tilde_expansion[h_length-1] == FN_LIBCHAR))
|
||||||
h_length--;
|
h_length--;
|
||||||
if (buff+h_length < suffix)
|
if (buff+h_length < suffix)
|
||||||
bmove(buff+h_length,suffix,length);
|
bmove(buff+h_length,suffix,length);
|
||||||
|
@ -53,6 +53,9 @@ make
|
|||||||
# so the file will be linked
|
# so the file will be linked
|
||||||
(cd sql; make sql_yacc.cc)
|
(cd sql; make sql_yacc.cc)
|
||||||
|
|
||||||
|
# we need initilizing SQL files.
|
||||||
|
(cd netware; make test_db.sql init_db.sql)
|
||||||
|
|
||||||
# copying required linux tools
|
# copying required linux tools
|
||||||
cp extra/comp_err extra/comp_err.linux
|
cp extra/comp_err extra/comp_err.linux
|
||||||
cp libmysql/conf_to_src libmysql/conf_to_src.linux
|
cp libmysql/conf_to_src libmysql/conf_to_src.linux
|
||||||
|
@ -91,8 +91,8 @@ done
|
|||||||
echo "starting build..."
|
echo "starting build..."
|
||||||
|
|
||||||
# check for bk and repo_dir
|
# check for bk and repo_dir
|
||||||
bk help > /dev/null
|
bzr help > /dev/null
|
||||||
repo_dir=`bk root $repo_dir`
|
repo_dir=`bzr root $repo_dir`
|
||||||
cd $repo_dir
|
cd $repo_dir
|
||||||
doc_dir="$repo_dir/../mysqldoc"
|
doc_dir="$repo_dir/../mysqldoc"
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ doc_dir="$repo_dir/../mysqldoc"
|
|||||||
temp_dir="$build_dir/mysql-$$.tmp"
|
temp_dir="$build_dir/mysql-$$.tmp"
|
||||||
|
|
||||||
# export the bk tree
|
# export the bk tree
|
||||||
command="bk export";
|
command="bzr export";
|
||||||
if test $revision; then command="$command -r$revision"; fi
|
if test $revision; then command="$command -r$revision"; fi
|
||||||
command="$command $temp_dir"
|
command="$command $temp_dir"
|
||||||
echo "exporting $repo_dir..."
|
echo "exporting $repo_dir..."
|
||||||
@ -183,6 +183,8 @@ awk 'BEGIN{x=0;} END{printf("\n");} x==1 {printf(" %s",$1); x++; next} x>1 {pri
|
|||||||
# build linux tools
|
# build linux tools
|
||||||
echo "compiling linux tools..."
|
echo "compiling linux tools..."
|
||||||
./netware/BUILD/compile-linux-tools
|
./netware/BUILD/compile-linux-tools
|
||||||
|
test -f ./netware/init_db.sql # this must exist
|
||||||
|
test -f ./netware/test_db.sql # this must exist
|
||||||
|
|
||||||
# compile
|
# compile
|
||||||
if test $build
|
if test $build
|
||||||
|
@ -107,8 +107,7 @@ init_db.sql: $(top_srcdir)/scripts/mysql_system_tables.sql \
|
|||||||
@echo "CREATE DATABASE mysql;" > $@;
|
@echo "CREATE DATABASE mysql;" > $@;
|
||||||
@echo "CREATE DATABASE test;" >> $@;
|
@echo "CREATE DATABASE test;" >> $@;
|
||||||
@echo "use mysql;" >> $@;
|
@echo "use mysql;" >> $@;
|
||||||
@cat $(top_srcdir)/scripts/mysql_system_tables.sql \
|
@cat $(top_srcdir)/scripts/mysql_system_tables.sql >> $@;
|
||||||
$(top_srcdir)/scripts/mysql_system_tables_fix.sql >> $@;
|
|
||||||
|
|
||||||
# Build test_db.sql from init_db.sql plus
|
# Build test_db.sql from init_db.sql plus
|
||||||
# some test data
|
# some test data
|
||||||
|
@ -324,9 +324,10 @@ void create_paths()
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
int mysql_install_db(int argc, char *argv[])
|
int mysql_install_db(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
arg_list_t al;
|
arg_list_t al;
|
||||||
int i, j, err;
|
int i, j, err;
|
||||||
char skip;
|
char skip;
|
||||||
|
struct stat info;
|
||||||
|
|
||||||
// private options
|
// private options
|
||||||
static char *private_options[] =
|
static char *private_options[] =
|
||||||
@ -362,6 +363,24 @@ int mysql_install_db(int argc, char *argv[])
|
|||||||
add_arg(&al, "--skip-grant-tables");
|
add_arg(&al, "--skip-grant-tables");
|
||||||
add_arg(&al, "--skip-innodb");
|
add_arg(&al, "--skip-innodb");
|
||||||
|
|
||||||
|
if ((err = stat(sql_file, &info)) != 0)
|
||||||
|
{
|
||||||
|
printf("ERROR - %s:\n", strerror(errno));
|
||||||
|
printf("\t%s\n\n", sql_file);
|
||||||
|
// free args
|
||||||
|
free_args(&al);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((err = stat(sql_file, &info)) != 0)
|
||||||
|
{
|
||||||
|
printf("ERROR - %s:\n", strerror(errno));
|
||||||
|
printf("\t%s\n\n", sql_file);
|
||||||
|
// free args
|
||||||
|
free_args(&al);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
// spawn mysqld
|
// spawn mysqld
|
||||||
err = spawn(mysqld, &al, TRUE, sql_file, out_log, err_log);
|
err = spawn(mysqld, &al, TRUE, sql_file, out_log, err_log);
|
||||||
|
|
||||||
@ -394,9 +413,9 @@ int main(int argc, char **argv)
|
|||||||
// install the database
|
// install the database
|
||||||
if (mysql_install_db(argc, argv))
|
if (mysql_install_db(argc, argv))
|
||||||
{
|
{
|
||||||
printf("ERROR - The database creation failed!\n");
|
printf("ERROR - Failed to create the database!\n");
|
||||||
printf(" %s\n", strerror(errno));
|
printf(" %s\n", strerror(errno));
|
||||||
printf("See the following log for more infomration:\n");
|
printf("See the following log for more information:\n");
|
||||||
printf("\t%s\n\n", err_log);
|
printf("\t%s\n\n", err_log);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
@ -2494,6 +2494,8 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
|||||||
err_handler:
|
err_handler:
|
||||||
while (file-- != m_file)
|
while (file-- != m_file)
|
||||||
(*file)->close();
|
(*file)->close();
|
||||||
|
if (!is_clone)
|
||||||
|
bitmap_free(&(m_part_info->used_partitions));
|
||||||
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
@ -1794,8 +1794,7 @@ JOIN::exec()
|
|||||||
if (!items1)
|
if (!items1)
|
||||||
{
|
{
|
||||||
items1= items0 + all_fields.elements;
|
items1= items0 + all_fields.elements;
|
||||||
if (sort_and_group || curr_tmp_table->group ||
|
if (sort_and_group || curr_tmp_table->group)
|
||||||
tmp_table_param.precomputed_group_by)
|
|
||||||
{
|
{
|
||||||
if (change_to_use_tmp_fields(thd, items1,
|
if (change_to_use_tmp_fields(thd, items1,
|
||||||
tmp_fields_list1, tmp_all_fields1,
|
tmp_fields_list1, tmp_all_fields1,
|
||||||
@ -9629,8 +9628,6 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
|||||||
MI_COLUMNDEF *recinfo;
|
MI_COLUMNDEF *recinfo;
|
||||||
uint total_uneven_bit_length= 0;
|
uint total_uneven_bit_length= 0;
|
||||||
bool force_copy_fields= param->force_copy_fields;
|
bool force_copy_fields= param->force_copy_fields;
|
||||||
/* Treat sum functions as normal ones when loose index scan is used. */
|
|
||||||
save_sum_fields|= param->precomputed_group_by;
|
|
||||||
DBUG_ENTER("create_tmp_table");
|
DBUG_ENTER("create_tmp_table");
|
||||||
DBUG_PRINT("enter",
|
DBUG_PRINT("enter",
|
||||||
("distinct: %d save_sum_fields: %d rows_limit: %lu group: %d",
|
("distinct: %d save_sum_fields: %d rows_limit: %lu group: %d",
|
||||||
|
@ -6644,17 +6644,15 @@ int initialize_schema_table(st_plugin_int *plugin)
|
|||||||
{
|
{
|
||||||
sql_print_error("Plugin '%s' init function returned error.",
|
sql_print_error("Plugin '%s' init function returned error.",
|
||||||
plugin->name.str);
|
plugin->name.str);
|
||||||
goto err;
|
plugin->data= NULL;
|
||||||
|
my_free(schema_table, MYF(0));
|
||||||
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure the plugin name is not set inside the init() function. */
|
/* Make sure the plugin name is not set inside the init() function. */
|
||||||
schema_table->table_name= plugin->name.str;
|
schema_table->table_name= plugin->name.str;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
err:
|
|
||||||
my_free(schema_table, MYF(0));
|
|
||||||
DBUG_RETURN(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int finalize_schema_table(st_plugin_int *plugin)
|
int finalize_schema_table(st_plugin_int *plugin)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user