Archive for the ‘ MySQL ’ Category

kostenlose MySQL Frontends

Ich war die Tage auf der Suche nach einem grafischen MySQL Frontend und bin dabei auf HeidiSQL gestoßen.

NaviCat Lite ist weiteres kostenloses Fronted, was mir persönlich jedoch nicht so gut gefallen hat.

MySQL Administrator

oder MySQL Workbench

MySQL: Auslastung sehr hoch

Da auf meinem Server seit ein paar Tagen die Auslastung extrem angestiegen ist, und ich gerade etwas Zeit hatte, hab ich mal einen Blick darauf geworfen. Der MySQL Prozess beansprucht sehr viel CPU-Power. Daher habe ich als erstes eine Wartung der DB durchgeführt:

mysqlcheck -Aao –auto-repair -u root -p[password]

Da dies leider nichts gebracht hat, hab ich mir mal die aktuellen Verbindungen angeschaut

mysqladmin -uroot -p[password] processlist

Dort war dann zu sehen, dass sehr viele Verbindungen zu einer Tabelle für die Besucherstatistik hängen geblieben waren. Also kurzerhand das Plugin deaktiviert und gut wars. Warum das Plugin verrückt spielt weiß ich zwar noch nicht, aber die Performance der Maschine ist auf jeden Fall schonmal besser.

MySQL: alle Datenbanken sichern

Um alle Datenbanken eines MySQL Servers zu sichern kann man entweder ein script schreiben, in dem alle Datenbank Namen fest eingetragen werden oder man zieht sich zum Zeitpunkt der Sicherung alle Datenbank Namen und sichert jede gefunden. Die letzte Möglichkeit möchte ich kurz beschreiben.

Nachfolgendes script speichert in der Variable DBASELIST alle Datenbanknamen. Anschließend werden die noch noch im Cache befindlichen Operationen geschrieben (flush tables) und jede Datenbank anschließend mit einem write lock versehen. Dadurch ist es nicht mehr möglich das während der Sicherung noch Veränderungen an der Datenbank vorgenommen werden.

Anschließend wird in einer for Schleife jede DB gesichert. Jede Datenbank wird dabei in einem tar.gz Archiv verpackt, dass das aktuelle Datum und den Datenbanknamen trägt.

Beispiel: 2008.Mai.8._web1sql1.tar.gz

Ist die Sicherung erfolgt so werden alle Tabellen wieder freigegeben.

#!/bin/bash
set $(date)
str_Tag=$(date +%A);
echo "********** saving MySQL-Databases ****"
   DBASELIST=`mktemp`
   mysqlshow -p<Password> | awk '{print $2}' | grep -v Databases | sort >$DBASELIST
# Wohin sollen die ganzen Backups geschrieben werden?
   cd /var/backup
# MySQL Cache auf HD schreiben und Tabellen vor Veränderungen schützen
  mysql -u root -p<Password> mysql -e "flush tables with read lock" -v
# Sicherung der einzelnen Tabellen
   for x in `cat $DBASELIST`; do
       echo "    saving database: $x";
       mysqldump --opt -p<Password> $x >$x.sql;
       tar cfvz $6.$3.$2_$x.tar.gz $x.sql > /dev/null 2>&1
   done;
   echo
# Tabellen nach der Sicherung wieder freigeben
  mysql -u root -p<Password> mysql -e "unlock tables" -v
  rm *.sql
   echo -e "\033[40;1;32m Done \033[0m..."
echo ""

Sicherung auf ein Remote System

Sollte auf dem Sicherungsystem nicht genügend Platz vorhanden sein oder die Sicherung soll direkt auf einen zentralen Server laufen, so kann nach der Einrichtung der PublicKey Authentifizierung für einen Schlüssel ohne Kennwort das das obige script angepasst werden, indem die Zeile

tar cfvz $6.$3.$2_$x.tar.gz $x.sql > /dev/null 2>&1

durch die Zeile

tar zcvf - /var/backup/$x.sql | ssh -p 22 root@domain.tld "cat > /zielverzeichniss/auf/dem/Server/$6.$3.$2_$x.tar.gz"

 ersetzt wird. Servername etc. muss wie immer angepasst werden. Anschließend läuft die Sicherung direkt auf den Zeilserver.

Ein Beispielscript kann hier herunter geladen werden.

Datenbank wiederherstellen

mysqladmin -u root -p create <database>
mysql -u root -p --default-charachter-set=utf8 <database> < backup.sql

Spamassassin: Whitelisting in MySQL DB speichern

So wie die Bayes Werte in einer DB gespeichert werden können, lohnt es sich auh evtl. das automatische whitelisting in eine MySQL DB zu verlegen.

  • Vorraussetzungen
perl -MCPAN -e shell
install DBD::mysql

apt-get install libtie-cache-perl libdbd-mysql-perl
  • Nun wird die notwendige DB angelegt
mysqladmin -p create spamassassin_db -u root
  • Vergabe der Rechte für einen speziellen User
grant all privileges on spamassassin_db.* to spamassassin_usr@localhost identified by 'password';
  • anlegen der notwendigen Tabellen
mysql -u root spamassassin_db -p < /usr/share/doc/spamassassin/sql/awl_mysql.sql  
  • /etc/spamassassin/local.cf um die SQL-DB Einträge erweitern
use_auto_whitelist 1
user_awl_dsn DBI:mysql:spamassassin_db:localhost
user_awl_sql_username spamassassin_usr
user_awl_sql_password <pwd>
user_awl_sql_table awl       

Dabei müssen Sie darauf achten, dass der Zugriff auf die alte autowhiteliste deaktiviert wurde Weiterlesen

Spamassassin: Bayes in MySQL DB speichern

Bei aktivierte Bayes Filterung werden die Dateien bayes_seen und bayes_toks i.d.R. ~6 MB groß. Je nach eMail aufkommen, kann es sinnvoll sein die größe der DB zu erhöhen und evtl. auch das altern von Bayes Einträgen zu verhinden. bayes_expiry_max_db_size (default: 150000) sind die gerade erwähnten 6 MB. Für 12 MB sähe die config dann wiefolgt aus

/etc/spamassassin/local.cf
bayes_auto_expire                       0
bayes_expiry_max_db_size          150000

Nun weiß jeder, dass Dateizugriff relativ viel Zeit kosten. Dafür lässt sich die bayes-db jedoch in eine SQL Datenbank verlagern. Ich gehe jetzt im weitern Verlauf davon aus, dass mysql bereits läuft. Dennoch muss die Schnittstelle für den DB Zugriff noch nachinstalliert werden. Das geht entwender per MCPAN oder apt-get:

  • Vorraussetzungen
perl -MCPAN -e shell
install DBD::mysql

apt-get install libtie-cache-perl libdbd-mysql-perl
  • Nun wird die notwendige DB angelegt
mysqladmin -p create spamassassin_db -u root 
  • Vergabe der Rechte für einen speziellen User
grant all privileges on spamassassin_db.* to spamassassin_usr@localhost identified by 'password';  
  • anlegen der notwendigen Tabellen
mysql -u spamassassin_usr spamassassin_db -p < /usr/share/doc/spamassassin/sql/bayes_mysql.sql
  • /etc/spamassassin/local.cf um die SQL-DB Einträge erweitern
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin_db:localhost
bayes_sql_username <spamassassin_usr>
bayes_sql_password <pwd>
bayes_sql_override_username spamassassin

Dabei müssen Sie darauf achten, dass der Zugriff auf die alten bayes-Dateien deaktiviert wurde Weiterlesen