MySQL mit Ruby unter Mac OS X

Möchte man eine MySQL-Datenbank mit Ruby ansprechen, muss unter UNIX-artigen Betriebsystemen den Datenbanktreiber manuell kompilieren.
Dazu genügt es die jeweils aktuelle Version von http://www.tmtm.org/downloads/mysql/ruby/ zu laden und zu kompilieren. Derzeit aktuell ist Version 2.7.3 .

Das Archiv ist mit tar xzvf mysql-ruby-2.7.3.tar.gz schnell entpackt. Danach wechseln wir ins Verzeichnis mysql-ruby-2.7.3 konfigurieren das Modul:

sudo ruby extconf.rb --with-mysql-include=/usr/local/mysql/include --with-mysql-lib=/usr/local/mysql/lib --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config

Ich habe MySQL unter /usr/local/mysql installiert – der Pfad muss unter Umständen angepasst werden. Wo MySQL installiert ist, lässt sich z.B. mit einem which mysql in Erfahrung bringen.

Der bekannte Einzeiler sudo make && make install erledigen den Rest.

Mit einem kleinen Script lässt sich die Installation testen:

require "mysql"
begin
  Mysql.new("localhost","dbuser","geheim")
  puts "Klappt! :)" 
rescue StandardError
  puts "Klappt nicht. :("   
end 

MyISAM Tabellen reparieren

MyISAM Tabellen arbeiten nicht transaktionsorientiert und können beschädigt werden, zum Beispiel wenn mysqld während eines Schreibzugriffs gewaltsam beendet wurde, ein Hardwarefehler vorliegt und ähnliche Katastrophen. Aufmerksam auf ein solches Problem macht neben unvollständigen oder fehlerhaften Ergebnissen einer Datenbankabfrage die Fehlermeldung:

Incorrect key file for table: ‚…‘. Try to repair it

In der Regel lassen sich die beschädigten Tabellen mit repair table your_table; wieder in einen definierten Zustand versetzen. Wenn es schlecht läuft, können aber auch einzelne Datensätze dabei zerstört werden. Kluge Menschen halten darum ein tägliches Backup ihrer Datenbank vor. 🙂

Wenn Datenbanktabellen ohne erkennbaren Grund (zum Beispiel Strom- oder Hardwareausfall) öfters beschädigt werden, ist gut beraten die Serverkonfiguration genauer zu untersuchen oder den Hoster zu wechseln.