MariaDB Windows-Spezifika

Import/Export-Besonderheiten von MariaDB-Datenbanken unter Windows

MariaDB Windows-Spezifika

Ich entwickle unter Windows 10 und bei der Migration von MariaDB-Datenbanken zwischen der Windows- und Linux-Welt in beide Richtungen sind mir folgende Besonderheiten aufgefallen:

Datenbankimport unter Windows

Export einer fiktiven Datenbank namens test unter Linux ...

sudo mysqldump test > test.sql

... und in etwas elaborierterer Form mit Kompression der Daten:

sudo mysqldump --no-autocommit --single-transaction=TRUE test | gzip -9 > test.sql.gz

Der Schalter --no-autocommit beschleunigt den Export großer Datenbanken deutlich und --single-transaction=TRUE stellt einen konsistenten Export der Daten sicher.

Der Import der Datenbank unter Linux kann wie folgt bewerkstelligt werden:

sudo mysql test < test.sql

oder alternativ mit

sudo mysqlimport test test.sql

- unter der Annahme, dass die Datenbank test existent ist.

Nur der Import unter Windows funktioniert aus diversen Gründen so nicht - hier bietet sich folgende alternative Befehlssequenz an:

mysql -u root -p
# (Abfrage des Passworts)
use test;
source test.sql;

Datenbankimport einer unter Windows exportierten Datenbank

Diese Variante bringt das Problem mit sich, dass die Namen der Tabellen unter Windows während des Exports in Kleinbuchstaben umgewandelt werden!

/* Java-Klassennamen KeyValue */
DROP TABLE IF EXISTS `keyvalue`; 
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `keyvalue` (
  `tpye` int(11) DEFAULT NULL,
  `key` varchar(255) NOT NULL,
  `value` varchar(255) DEFAULT NULL,
  ...

Die SQL-Tabelle KeyValue wurde mithilfe der OrmLite-Bibliothek angelegt. Die entsprechenden SQL-Statements des Java-Codes können die Tabelle KeyValue nicht finden, da diese nur in der Kleinschreibung keyvalue vorliegt!

Dieses Problem kann unter Linux wie folgt umschifft werden, ...

sudo /etc/mysql/mariadb.conf.d/50-server.cnf

... indem man den SQL-Server anweist, die Groß- und Kleinschreibung zu ignorieren.

[mysqld]
lower_case_table_names=1

Diese Art von Änderung bedingt aber einen Neustart des SQL-Servers.

sudo service mysql restart