mysql Replikation wiederherstellen

Zum Glück kommt das ganz selten vor … Aus dem Grund muss ich das leider immer wieder nachlesen. Kurz die Schritte:

  1. Auf dem Master
    show master status;  
     +------------------+-----------+---------------------+------------------+  
     | File             | Position  | Binlog_Do_DB        | Binlog_Ignore_DB |  
     +------------------+-----------+---------------------+------------------+  
     | mysql-bin.000123 | 010235031 |                     |                  |  
     +------------------+-----------+---------------------+------------------+  
    
  2. Auf dem Slave
     
    stop slave;  
    change master to master_log_file='mysql-bin.000123', master_log_pos=010235031;  
    start slave;  
    

Gibt’s auf dem Slave Fehler, die einfach übersprungen werden sollen dann geht das mit dem folgenden

 stop slave;  
 set global sql_slave_skip_counter = N;  
 start slave;  

Damit hab ich aber nur schlechte Erfahrungen gemacht. Besser alles richtig machen 🙂

Update: Optimize Table fällig?

Ich kann mir einfach nicht merken, wie man bei MySQL checkt ob Tabellen optimiert werden müssen. Jetzt wird’s aufgeschrieben:

show table status from test where data_free > 0;

Update:
Der Query ermittelt natürlich nur den verschwendeten Platz. Ein Optimize Tabelle kann aber auch schon früher sinnvoll sein. Etwa wenn Werte innerhalb der Tabellen sehr oft geändert wurden.

MySQL Dumps/Strukturen kopieren

Wie oft bin ich zum Kopieren für MySQL-Dumps so vorgegangen:

mysqldump -u user -p db | gzip > db.gz
scp db.gz user@remote.server.net:/var/tmp
zcat db.gz | mysql -u user -p db

Nur weil ich zu faul war mir das mit MySQL und SSH genauer zu merken. Daher schreib ich mir das jetzt mal wieder auf.

  1. Komplette DBs via mysql kopieren:
    mysqldump db | mysql -h remote.server.net db
  2. Komplette DBs via ssh kopieren:
    mysqldump db | ssh user@remote.server.net mysql db
  3. Oder nur die Struktur per ssh kopieren:
    mysqldump -d db | ssh user@remote.server.net mysql db

Na hoffentlich tue ich mir den scp Umweg nicht nochmal an.

MySQL Fehler HY000

Gestern am Flughafen habe ich mir fast einen Wolf gesucht. Ich war nach einem langen Tag sau müde und hab ewig gebraucht bis ich es gemerkt hatte. Beim Import eines Files via

LOAD DATA INFILE 'FILENAME' INTO TABLE DBTABLE

hat mir MySQL immer folgenden Fehler gebracht:

ERROR 13 (HY000) at line 1: Can't get stat of '/tmp/0815.csv' (Errcode: 2)

Im Netz habe ich immer Hinweise gefunden, dass das File vom MySQL Prozesse lesbar sein muss. Also habe ich 100mal die Rechte der Verzeichnis auf 0755 und die des Files auf 0644 gecheckt. Trotzdem hat es nicht funktioniert.
Das Problem war eigentlich nur, dass ich mich von einem Server auf den anderen mittels folgenden Befehl verbunden hatte:

mysql -ufoo -pbar -h172.16.1.2 test

Bei dem Aufruf oben erwartet Mysql allerdings das File auf dem Server und nicht auf dem Client. Richtig wäre folgendes gewesen:

LOAD DATA LOCAL INFILE 'FILENAME' INTO TABLE DBTABLE

Das entscheidende Wörtchen ist LOCAL

Ich schreibe das mal auf. Vielleicht hat noch jemand das Problem und ich suche hoffentlich das nächste mal nicht wieder ewig.

Global privileges mit MySQL

Ich weiß RTFM… aber ich suche eben jedes mal in der Doku wie ich Global priviliges unter MySQL anlege. Im Speziellen geht es immer und immer wieder um das File Privileg. Load from file ist einfach um Welten schneller als jede Zeile per Hand in SQL zu kodieren. Also auf dass ich es mir merken kann, so geht’s:

GRANT FILE on *.* TO 'my_user'@'my_host' identified by 'my_password';
flush privileges;

Oracle kauft MySQL…

Mit der Übernahme von Sun durch Oracle kauft Oracle damit auch MySQL. Ich weiß nicht ob das sehr gut oder sehr schlecht ist. Das mächtige Oracle kann wirklich alles was das Herz begehrt. Oracle hat super Admin- und Entwicklungstools wie den SQL Developer. Warum sollten sie nun MySQL weiter in der Entwicklung puschen, wo sie doch eine sehr gute Datenbank haben? Anderseits habe ich die Hoffnung, dass die Tools von Oracle nun auf MySQL ausgeweitet werden und nicht nur die Basics unterstützen. Mal sehen. Interessant wird auch ob sie mit Oracle auch weiterhin Linux unterstützen werden oder evtl. sich doch auf Solaris konzentrieren.

Vielleicht ist es doch an der Zeit sich mit Postgresql zu beschäftigen. Ich wollte mir sowieso morgen bei Barnes&Nobles ein entsprechendes Buch kaufen 😀

Regexp mit SQL

Ich hasse den [[SQL]] Kauderwelsch. Das Standard SQL ist einfach zu wenig umfangreich. Deswegen entwickelt jeder seine eigenen Extensions. Alle sind irgendwie ähnlich aber dennoch unterschiedlich. Daher muss ich mir das hier immer notieren. Ich kann es mir nicht merken und will nicht immer Googlen.

Aktueller Fall Regexp mit SQL. Hier die Links

Ich finde die Oracle Lösung die bessere. Aber wahrscheinlich ist das Geschmacksache.

GreenSQL

logoKaum läuft mein Server wieder ohne Last (ja ich hab sogar ab und an eine Load von 0.00), da komm ich schon wieder auf neue Ideen, wie ich den Server stressen kann. Mit GrennSQL existiert so eine Art SQL Firewall. GreenSQL setzt sich als Proxy zwischen Client und Server, analysiert die Queries und entsorgt Schadcode. Leider stürzt der Daemon bei mir noch ab, wenn ich ihn auf speziellen Seiten benutze. Blöd! Aber weiter beobachten werde ich das Projekt auf jeden Fall.

Ist MySQL noch zu retten?

Ich überlege zur Zeit ernsthaft, ob [[MySQL]] noch eine Zukunft hat (kein Witz!). Die Firma scheint mir zur Zeit etwas durch den Wind zu sein. Obwohl nun endlich nach 7 Monaten die 5.1er Version freigegeben wurde ist sie scheinbar dennoch nicht wirklich fertig. Zumindest meint Michael »Monty« Widenius dies. Monty und David Axmark haben auch nach dem Kauf durch Sun mittlerweile das Unternehmen verlassen. Das schürt bei mir den Eindruck, als das der MySQL-Stern am untergehen ist.

Nun, welche Alternativen gäbe es denn zum „reinen“ MySQL? Als erstes muss ich mir unbedingt die beiden Community Projekte Drizzle und OurDelta genauer ansehen. Danach kämen die nicht MySQL Projekte: Mit Oracle Express arbeite ich ja bereits und Postgresql.