MariaDB Windows-Spezifika
Import/Export-Besonderheiten von MariaDB-Datenbanken unter Windows
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