Vorbereitung zur Migration auf Percona XtraDB Cluster
Um eine vorhandene MySQL Datenbank zu Percona XtraDB Cluster zu migrieren müssen einige Voraussetzungen erfüllt sein (siehe hierzu auch die Limitations-Seite bei Percona.
-
Alle Tabellen müssen InnoDB Engine sein
-
Jede Tabelle sollte einen PRIMARY KEY haben
Alle Tabellen finden, die nicht die InnoDB Engine verwenden
USE information_schema;
SELECT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS TABLES_NOT_INNODB
FROM TABLES
WHERE ENGINE != 'InnoDB' AND
TABLE_SCHEMA NOT IN('mysql','information_schema','performance_schema');
Tabellen ohne PRIMARY KEY finden
Dies verhindert folgenden Fehler beim Import eines Dumps:
[ERROR] WSREP: Percona-XtraDB-Cluster prohibits use of DML
command on a table (db.taxonomy_index) without an explicit primary key
with pxc_strict_mode = ENFORCING or MASTER
ERROR 1105 (HY000) at line 20655: Percona-XtraDB-Cluster prohibits use
of DML command on a table (db.taxonomy_index) without an explicit
primary key with pxc_strict_mode = ENFORCING or MASTER
USE information_schema;
SELECT CONCAT(TABLES.TABLE_SCHEMA, '.', TABLES.TABLE_NAME) AS TABLES_WITHOUT_PRIMARY_KEY
FROM TABLES
LEFT JOIN KEY_COLUMN_USAGE AS c
ON (TABLES.TABLE_NAME = c.TABLE_NAME AND
c.CONSTRAINT_SCHEMA = TABLES.TABLE_SCHEMA AND
c.CONSTRAINT_NAME = 'PRIMARY')
WHERE TABLES.TABLE_SCHEMA <> 'information_schema' AND
TABLES.TABLE_SCHEMA <> 'performance_schema' AND
TABLES.TABLE_SCHEMA <> 'mysql' AND
c.CONSTRAINT_NAME IS NULL;
Über ALTER TABLE läßt sich diesen Tabellen ein PRIMARY KEY zuweisen. Vorher sollte allerdings sichergestellt sein, dass die Applikation auch damit zurecht kommt.
PRIMARY KEY hinzufügen:
USE mydb;
ALTER TABLE address ADD id INT PRIMARY KEY AUTO_INCREMENT;