Okay, das sind möglicherweise drei Fragen. Ich möchte meine vorhandene MySQL 5.1-Datenbank mit MyISAM auf 5.6 mit InnoDB verschieben, und zwar aus einer Reihe von offensichtlichen - und möglicherweise sogar guten - Gründen.
Dies ist auf Amazon RDS, daher beschränkt sich meine Upgrade-Route auf das Dumping und die Neuerstellung der Datenbank.
Ich gebe fröhlich zu, dass ich kein hoch entwickelter DBA bin.
Problem 1: Wow ist so langsam!
Es dauert ungefähr 15 Minuten bis zu mysqldump
unseren etwa 160 Millionen Reihen. (Show Tisch usw. kommt, halten Sie Ihre Pferde.)
Es dauerte ungefähr 50 Stunden , um es in eine MySQL 5.6-Instanz mit einer Engine zu laden, die geschickt in InnoDB geschrieben wurde.
Problem 2: Wo sind meine Zeilen ?
select count(*) from node;
auf die aktuelle DB gibt rund 162 Millionen. Auf dem 5.6 gibt es rund 93 Millionen. Die Ladung schien erfolgreich zu sein, obwohl ich es nicht beweisen kann; Zumindest gab es keine Fehlermeldung, nachdem das Laden beendet wurde.
Wenn es nicht erfolgreich war, war das sehr langsam.
Problem 3: WOW ist so langsam!
Die select count(*) from node;
Fertigstellung erfolgt also in kürzester Zeit - zwischen 0,00 und 0,03 Sekunden nach den Abfrageergebnissen - auf 5.1. Bei 5.6 mit InnoDB dauert es über eine Minute. Die Erklärung macht deutlich, dass dies auf einen Unterschied in der Art und Weise zurückzuführen ist, wie die Abfrage optimiert wird - aber unklar, warum sie anders ist.
Tabellen und Erklärungen
MySQL 5.1
mysql> show create table node\G
*************************** 1. row ***************************
Table: node
Create Table: CREATE TABLE `node` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`graph` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
`subject` varchar(200) NOT NULL,
`predicate` varchar(200) NOT NULL,
`object` mediumtext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `nodeindex` (`graph`(20),`subject`(100),`predicate`(100),`object`(100)),
KEY `ix_node_subject` (`subject`),
KEY `ix_node_graph` (`graph`),
KEY `ix_node_object` (`object`(255)),
KEY `ix_node_predicate` (`predicate`),
KEY `node_po` (`predicate`,`object`(130)),
KEY `node_so` (`subject`,`object`(130)),
KEY `node_sp` (`subject`,`predicate`(130)),
FULLTEXT KEY `node_search` (`object`)
) ENGINE=MyISAM AUTO_INCREMENT=550671861 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> select count(id) from node;
+-----------+
| count(id) |
+-----------+
| 163426434 |
+-----------+
1 row in set (0.00 sec)
mysql> explain select count(id) from node;
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
1 row in set (0.00 sec)
MySQL 5.6
mysql> show create table node\G
*************************** 1. row ***************************
Table: node
Create Table: CREATE TABLE `node` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`graph` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
`subject` varchar(200) NOT NULL,
`predicate` varchar(200) NOT NULL,
`object` mediumtext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `nodeindex` (`graph`(20),`subject`(100),`predicate`(100),`object`(100)),
KEY `ix_node_subject` (`subject`),
KEY `ix_node_graph` (`graph`),
KEY `ix_node_object` (`object`(255)),
KEY `ix_node_predicate` (`predicate`),
KEY `node_po` (`predicate`,`object`(130)),
KEY `node_so` (`subject`,`object`(130)),
KEY `node_sp` (`subject`,`predicate`(130)),
FULLTEXT KEY `node_search` (`object`)
) ENGINE=InnoDB AUTO_INCREMENT=481239575 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
`` `
mysql> explain select count(id) from node;
+----+-------------+-------+-------+---------------+---------------+---------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------------+---------+------+----------+-------------+
| 1 | SIMPLE | node | index | NULL | ix_node_graph | 103 | NULL | 79671827 | Using index |
+----+-------------+-------+-------+---------------+---------------+---------+------+----------+-------------+
1 row in set (0.00 sec)