Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
d1e57a0f
Commit
d1e57a0f
authored
Aug 20, 2008
by
Sergey Petrunia
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
95c3e4e1
bbb45c15
Changes
21
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
841 additions
and
20 deletions
+841
-20
mysql-test/std_data/parts/t1_will_crash#P#p1_first_1024.MYD
mysql-test/std_data/parts/t1_will_crash#P#p1_first_1024.MYD
+0
-0
mysql-test/std_data/parts/t1_will_crash#P#p2.MYD
mysql-test/std_data/parts/t1_will_crash#P#p2.MYD
+0
-0
mysql-test/std_data/parts/t1_will_crash#P#p2.MYI
mysql-test/std_data/parts/t1_will_crash#P#p2.MYI
+0
-0
mysql-test/std_data/parts/t1_will_crash#P#p3.MYI
mysql-test/std_data/parts/t1_will_crash#P#p3.MYI
+0
-0
mysql-test/std_data/parts/t1_will_crash#P#p4.MYI
mysql-test/std_data/parts/t1_will_crash#P#p4.MYI
+0
-0
mysql-test/std_data/parts/t1_will_crash#P#p6.MYD
mysql-test/std_data/parts/t1_will_crash#P#p6.MYD
+0
-0
mysql-test/std_data/parts/t1_will_crash#P#p6_2.MYD
mysql-test/std_data/parts/t1_will_crash#P#p6_2.MYD
+0
-0
mysql-test/std_data/parts/t1_will_crash#P#p6_3.MYD
mysql-test/std_data/parts/t1_will_crash#P#p6_3.MYD
+0
-0
mysql-test/suite/parts/r/partition_recover_myisam.result
mysql-test/suite/parts/r/partition_recover_myisam.result
+56
-0
mysql-test/suite/parts/r/partition_repair_myisam.result
mysql-test/suite/parts/r/partition_repair_myisam.result
+422
-15
mysql-test/suite/parts/t/partition_recover_myisam-master.opt
mysql-test/suite/parts/t/partition_recover_myisam-master.opt
+0
-0
mysql-test/suite/parts/t/partition_recover_myisam.test
mysql-test/suite/parts/t/partition_recover_myisam.test
+31
-0
mysql-test/suite/parts/t/partition_repair_myisam.test
mysql-test/suite/parts/t/partition_repair_myisam.test
+213
-1
mysql-test/suite/rpl/r/rpl_plugin_load.result
mysql-test/suite/rpl/r/rpl_plugin_load.result
+36
-0
mysql-test/suite/rpl/t/rpl_plugin_load-master.opt
mysql-test/suite/rpl/t/rpl_plugin_load-master.opt
+1
-0
mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt
mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt
+1
-0
mysql-test/suite/rpl/t/rpl_plugin_load.test
mysql-test/suite/rpl/t/rpl_plugin_load.test
+60
-0
mysys/my_static.c
mysys/my_static.c
+2
-2
mysys/my_static.h
mysys/my_static.h
+1
-1
sql/ha_partition.cc
sql/ha_partition.cc
+2
-0
sql/sql_plugin.cc
sql/sql_plugin.cc
+16
-1
No files found.
mysql-test/std_data/parts/t1_will_crash#P#p1_first_1024.MYD
0 → 100644
View file @
d1e57a0f
File added
mysql-test/std_data/parts/t1_will_crash#P#p2.MYD
0 → 100644
View file @
d1e57a0f
File added
mysql-test/std_data/parts/t1_will_crash#P#p2.MYI
0 → 100644
View file @
d1e57a0f
File added
mysql-test/std_data/parts/t1_will_crash#P#p3.MYI
0 → 100644
View file @
d1e57a0f
File added
mysql-test/std_data/parts/t1_will_crash#P#p4.MYI
0 → 100644
View file @
d1e57a0f
File added
mysql-test/std_data/parts/t1_will_crash#P#p6.MYD
0 → 100644
View file @
d1e57a0f
File added
mysql-test/std_data/parts/t1_will_crash#P#p6_2.MYD
0 → 100644
View file @
d1e57a0f
File added
mysql-test/std_data/parts/t1_will_crash#P#p6_3.MYD
0 → 100644
View file @
d1e57a0f
File added
mysql-test/suite/parts/r/partition_recover_myisam.result
0 → 100644
View file @
d1e57a0f
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;
mysql-test/suite/parts/r/partition_repair_myisam.result
View file @
d1e57a0f
# 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,29 @@ a
...
@@ -16,23 +28,29 @@ 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;
SELECT * FROM t1_will_crash;
a
a
1
1
...
@@ -46,11 +64,400 @@ a
...
@@ -46,11 +64,400 @@ a
9
9
10
10
11
11
Warnings:
FLUSH TABLES;
Error 145 Table './test/t1_will_crash#P#p1' is marked as crashed and should be repaired
# test with ALTER TABLE ... CHECK/REPAIR PARTITION
Error 1194 Table 't1_will_crash' is marked as crashed and should be repaired
# replacing t1_will_crash#P#p1.MYI with a corrupt + unclosed one
Error 1034 1 client is using or hasn't closed the table properly
ALTER TABLE t1_will_crash CHECK PARTITION p0, p2;
Error 1034 Size of indexfile is: 1024 Should be: 2048
Table Op Msg_type Msg_text
Error 1034 Size of datafile is: 28 Should be: 7
test.t1_will_crash check status OK
Error 1034 Number of rows changed from 1 to 4
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;
a
1
2
3
4
5
6
7
8
9
10
11
DROP TABLE t1_will_crash;
# 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;
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;
mysql-test/suite/parts/t/partition_re
pai
r_myisam-master.opt
→
mysql-test/suite/parts/t/partition_re
cove
r_myisam-master.opt
View file @
d1e57a0f
File moved
mysql-test/suite/parts/t/partition_recover_myisam.test
0 → 100644
View file @
d1e57a0f
# 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
;
mysql-test/suite/parts/t/partition_repair_myisam.test
View file @
d1e57a0f
# 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;
...
@@ -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;
...
@@ -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
;
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
;
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
;
DROP
TABLE
t1_will_crash
;
mysql-test/suite/rpl/r/rpl_plugin_load.result
0 → 100644
View file @
d1e57a0f
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
Verify that example engine is not installed.
SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
Get binlog position before install plugin.
Install example engine.
INSTALL PLUGIN example SONAME 'ha_example.so';
Get binlog position after install plugin.
Compute the difference of the binlog positions.
Should be zero as install plugin should not be replicated.
Delta
0
Verify that example engine is installed.
SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
EXAMPLE YES Example storage engine NO NO NO
connection slave: Verify that example engine is not installed.
SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
connection master: Uninstall example engine.
Get binlog position before uninstall plugin.
UNINSTALL PLUGIN example;
Get binlog position after uninstall plugin.
Compute the difference of the binlog positions.
Should be zero as uninstall plugin should not be replicated.
Delta
0
Verify that example engine is not installed.
SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
End of test
mysql-test/suite/rpl/t/rpl_plugin_load-master.opt
0 → 100644
View file @
d1e57a0f
$EXAMPLE_PLUGIN_OPT
mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt
0 → 100644
View file @
d1e57a0f
$EXAMPLE_PLUGIN_OPT
mysql-test/suite/rpl/t/rpl_plugin_load.test
0 → 100644
View file @
d1e57a0f
#
# Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based
#
# The test verifies that INSTALL PLUGIN and UNINSTALL PLUGIN
# work with replication.
#
# The test tries to install and uninstall a plugin on master,
# and verifies that it does not affect the slave,
# and that it does not add anything to the binlog.
--
source
include
/
not_embedded
.
inc
--
source
include
/
have_log_bin
.
inc
# Dynamic loading of Example does not work on Windows currently.
--
source
include
/
not_windows
.
inc
--
source
include
/
have_example_plugin
.
inc
# Initialize replication.
--
source
include
/
master
-
slave
.
inc
--
echo
Verify
that
example
engine
is
not
installed
.
SELECT
*
FROM
INFORMATION_SCHEMA
.
ENGINES
WHERE
ENGINE
=
'EXAMPLE'
;
--
echo
Get
binlog
position
before
install
plugin
.
let
$before_pos
=
query_get_value
(
"SHOW MASTER STATUS"
,
Position
,
1
);
--
echo
Install
example
engine
.
INSTALL
PLUGIN
example
SONAME
'ha_example.so'
;
--
echo
Get
binlog
position
after
install
plugin
.
let
$after_pos
=
query_get_value
(
"SHOW MASTER STATUS"
,
Position
,
1
);
--
echo
Compute
the
difference
of
the
binlog
positions
.
--
echo
Should
be
zero
as
install
plugin
should
not
be
replicated
.
--
disable_query_log
eval
SELECT
$after_pos
-
$before_pos
AS
Delta
;
--
enable_query_log
--
echo
Verify
that
example
engine
is
installed
.
SELECT
*
FROM
INFORMATION_SCHEMA
.
ENGINES
WHERE
ENGINE
=
'EXAMPLE'
;
# Wait for slave to catch up with master.
sync_slave_with_master
;
#
--
echo
connection
slave
:
Verify
that
example
engine
is
not
installed
.
connection
slave
;
SELECT
*
FROM
INFORMATION_SCHEMA
.
ENGINES
WHERE
ENGINE
=
'EXAMPLE'
;
#
--
echo
connection
master
:
Uninstall
example
engine
.
connection
master
;
--
echo
Get
binlog
position
before
uninstall
plugin
.
let
$before_pos
=
query_get_value
(
"SHOW MASTER STATUS"
,
Position
,
1
);
UNINSTALL
PLUGIN
example
;
--
echo
Get
binlog
position
after
uninstall
plugin
.
let
$after_pos
=
query_get_value
(
"SHOW MASTER STATUS"
,
Position
,
1
);
--
echo
Compute
the
difference
of
the
binlog
positions
.
--
echo
Should
be
zero
as
uninstall
plugin
should
not
be
replicated
.
--
disable_query_log
eval
SELECT
$after_pos
-
$before_pos
AS
Delta
;
--
enable_query_log
--
echo
Verify
that
example
engine
is
not
installed
.
SELECT
*
FROM
INFORMATION_SCHEMA
.
ENGINES
WHERE
ENGINE
=
'EXAMPLE'
;
# Wait for slave to catch up with master.
sync_slave_with_master
;
#
# Cleanup
--
source
include
/
master
-
slave
-
end
.
inc
--
echo
End
of
test
mysys/my_static.c
View file @
d1e57a0f
...
@@ -70,8 +70,8 @@ uint sf_malloc_prehunc=0, /* If you have problem with core- */
...
@@ -70,8 +70,8 @@ uint sf_malloc_prehunc=0, /* If you have problem with core- */
sf_malloc_endhunc
=
0
,
/* dump when malloc-message.... */
sf_malloc_endhunc
=
0
,
/* dump when malloc-message.... */
/* set theese to 64 or 128 */
/* set theese to 64 or 128 */
sf_malloc_quick
=
0
;
/* set if no calls to sanity */
sf_malloc_quick
=
0
;
/* set if no calls to sanity */
ulong
sf_malloc_cur_memory
=
0L
;
/* Current memory usage */
size_t
sf_malloc_cur_memory
=
0L
;
/* Current memory usage */
ulong
sf_malloc_max_memory
=
0L
;
/* Maximum memory usage */
size_t
sf_malloc_max_memory
=
0L
;
/* Maximum memory usage */
uint
sf_malloc_count
=
0
;
/* Number of times NEW() was called */
uint
sf_malloc_count
=
0
;
/* Number of times NEW() was called */
uchar
*
sf_min_adress
=
(
uchar
*
)
~
(
unsigned
long
)
0L
,
uchar
*
sf_min_adress
=
(
uchar
*
)
~
(
unsigned
long
)
0L
,
*
sf_max_adress
=
(
uchar
*
)
0L
;
*
sf_max_adress
=
(
uchar
*
)
0L
;
...
...
mysys/my_static.h
View file @
d1e57a0f
...
@@ -44,8 +44,8 @@ struct st_irem
...
@@ -44,8 +44,8 @@ struct st_irem
struct
st_irem
*
next
;
/* Linked list of structures */
struct
st_irem
*
next
;
/* Linked list of structures */
struct
st_irem
*
prev
;
/* Other link */
struct
st_irem
*
prev
;
/* Other link */
char
*
filename
;
/* File in which memory was new'ed */
char
*
filename
;
/* File in which memory was new'ed */
size_t
datasize
;
/* Size requested */
uint32
linenum
;
/* Line number in above file */
uint32
linenum
;
/* Line number in above file */
uint32
datasize
;
/* Size requested */
uint32
SpecialValue
;
/* Underrun marker value */
uint32
SpecialValue
;
/* Underrun marker value */
};
};
...
...
sql/ha_partition.cc
View file @
d1e57a0f
...
@@ -2494,6 +2494,8 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
...
@@ -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
);
}
}
...
...
sql/sql_plugin.cc
View file @
d1e57a0f
...
@@ -1662,11 +1662,18 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
...
@@ -1662,11 +1662,18 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
goto
deinit
;
goto
deinit
;
}
}
/*
We do not replicate the INSTALL PLUGIN statement. Disable binlogging
of the insert into the plugin table, so that it is not replicated in
row based mode.
*/
tmp_disable_binlog
(
thd
);
table
->
use_all_columns
();
table
->
use_all_columns
();
restore_record
(
table
,
s
->
default_values
);
restore_record
(
table
,
s
->
default_values
);
table
->
field
[
0
]
->
store
(
name
->
str
,
name
->
length
,
system_charset_info
);
table
->
field
[
0
]
->
store
(
name
->
str
,
name
->
length
,
system_charset_info
);
table
->
field
[
1
]
->
store
(
dl
->
str
,
dl
->
length
,
files_charset_info
);
table
->
field
[
1
]
->
store
(
dl
->
str
,
dl
->
length
,
files_charset_info
);
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
]);
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
]);
reenable_binlog
(
thd
);
if
(
error
)
if
(
error
)
{
{
table
->
file
->
print_error
(
error
,
MYF
(
0
));
table
->
file
->
print_error
(
error
,
MYF
(
0
));
...
@@ -1731,7 +1738,15 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name)
...
@@ -1731,7 +1738,15 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name)
HA_READ_KEY_EXACT
))
HA_READ_KEY_EXACT
))
{
{
int
error
;
int
error
;
if
((
error
=
table
->
file
->
ha_delete_row
(
table
->
record
[
0
])))
/*
We do not replicate the UNINSTALL PLUGIN statement. Disable binlogging
of the delete from the plugin table, so that it is not replicated in
row based mode.
*/
tmp_disable_binlog
(
thd
);
error
=
table
->
file
->
ha_delete_row
(
table
->
record
[
0
]);
reenable_binlog
(
thd
);
if
(
error
)
{
{
table
->
file
->
print_error
(
error
,
MYF
(
0
));
table
->
file
->
print_error
(
error
,
MYF
(
0
));
DBUG_RETURN
(
TRUE
);
DBUG_RETURN
(
TRUE
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment