Als Oracle DBA beschäftige ich mich privat häufig mit MySQL Datenbanken und möchte mit diesen Artikel anderen Oracle DBAs einen schnellen Einstieg ermöglichen.

Die MySQL Referenz Handbücher findet man unter http://dev.mysql.com/doc/#manual

MySQL bietet im Gegensatz zum Oracle DBMS verschiedene Speichersubsysteme an. Die häufigst verwendete ist die MyISAM Engine, welche beispielsweise im Gegensatz zur InnoDB Engine keine Transaktionssicherheit gemäß der ACID Kriterien gewährleistet. Neben der Performance und der Transaktionssicherheit unterscheiden sich die Engines auch bei der Implementierung von Constraints und Indexen. Je nach Einsatzgebiet sollte man sich also gut überlegen, welche Enigine zu den Anforderungen passt. Nähere Infos erhält man in folgender Referenz http://dev.mysql.com/doc/refman/5.1/de/storage-engines.html (auf Version im Link achten)

Standardmäßig ist Auto Commit aktiviert. Um Rollbacks nutzen zu können, muss Auto Commit deaktiviert werden  und eine transaktionale Engine wie InnoDB verwendet werden.

Zum Thema Performance Tuning findet man hier einen Artikel https://www.schoenhoff.org/datenbanksysteme/mysql-optimierung/

 

Abweichende Terminologie:

Oracle MySQL
Schema Datenbank
Sequenz Auto Increment

 

Wichtige SQL- Unterschiede

Oracle MySQL
NVL() IFNULL()
ROWNUM < 10 LIMIT 10
SEQ.CURRVAL LAST_INSERT_ID()
SELECT sysdate FROM dual; SELECT CURDATE(); oder SELECT NOW(); DUAL muss nicht angegeben werden.
SEQ.NEXTVAL NULL

Achtung: Abfragen in MySQL sind nicht case sensitivite! LIKE ‚A%‘ und LIKE ‚a%‘ liefern das selbe Ergebnis.

Die MySQL-Syntax weicht an vielen Stellen von der Oracle DBMS SQL-Syntax ab, beispielsweise können mit einem Insert mehere Tupel angelegt werden:

INSERT INTO tabelle (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Vor allem Funktionen haben in MySQL andere Namen.

 

Datumsformat

Oracle MySQL
Gemäß NLS_DATE_FORMAT Standardmäßig YYYY-MM-DD

 

Speicherort der Initialisierungsparameter:

Oracle MySQL
$ORACLE_HOME/dbs/init<Datenbankname>.ora /etc/mysql/my.cnfoder/etc/my.cnf

 

Verbindung zur Datenbank herstellen:

Oracle MySQL
export ORACLE_SID=<Datenbankname>sqlplus sys as sysdbasqlplus> mysql -u root -p mysql>

 

Datenbank starten/stoppen/neustarten

Oracle MySQL
sqlplus> startup /etc/init.d/mysql start
sqlplus> shutdown immediate /etc/init.d/mysql stop
/etc/init.d/mysql restart

 

Benutzer auflisten:

Oracle MySQL
sqlplus> SELECT * FROM dba_users; mysql> SELECT * FROM mysql.user;

 

Schemata auflisten:

Oracle MySQL
sqlplus> SELECT DISTINCT owner FROM dba_objects; mysql> SHOW DATABASES;

 

Tabelleninformationen auflisten:

Oracle MySQL
sqlplus> SELECT * FROM dba_tables; mysql> SELECT * FROM information_schema.tables;

 

Sessions auflisten:

Oracle MySQL
sqlplus> SELECT * FROM v$session; mysql> SHOW PROCESSLIST;

 

System-Priviliegien auflisten:

Oracle MySQL
sqlplus> SELECT * FROM dba_sys_privs; mysql> SELECT * FROM mysql.db;

Backup und Restore

Das Backup und Restore von MySQL gestaltet sich am simpelsten mit dem Programm mysqldump. Für Backups im Enterprise Bereich eignen sich wahrscheinlich andere Lösungen besser. mysqldump erzeugt einen SQL-File Dump von den Metadaten und Content.

Schema Dump

mysqldump -u root -p –extended-insert [–lock-tables oder –single-transaction] –add-drop-database –databases <Schema [, Schema2]> > <Dumpfile>

Datenbank Dump

mysqldump -u root -p –extended-insert [–lock-tables oder –single-transaction] –add-drop-database –all-databases > <Dumpfile>

–extended-insert verkleinert das Dumpfile und beschleunigt das Backup und Recovery

–lock-tables sperrt die Tabellen exklusiv bevor sie exportiert werden, für InnoDB Tabellen eignet sich –single-transaction besser

–single-transaction sichert InnoDB Tabellen transaktional konsistent, ohne die Tabellen exklusiv zu sperren

–add-drop-database löscht evtl. vorhandene Daten vor dem Import

Restore

mysql -u root -p < <Dumpfile>

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Bitte als Captcha folgende Aufgabe lösen: * Time limit is exhausted. Please reload CAPTCHA.