SchlagwortMySQL

MySQL/MariaDB – Tabellen von MyISAM nach InnoDB konvertieren

Manchmal ist es notwendig Datenbank/Tabellen zu konvertieren. Kürzlich stand ich vor dem Problem eine Datenbank reparieren zu müssen.

Table 'tablename' is marked as crashed and should be repaired 

Hier die Queries, welche die notwendigen ALTER statements generieren.

InnoDB nach MyISAM


SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' engine=MyISAM;') 
FROM information_schema.TABLES WHERE ENGINE = 'InnoDB';

MyISAM nach InnoDB

SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' engine=InnoDB;') 
FROM information_schema.TABLES WHERE ENGINE = 'MyISAM';

MySQL Dump richtig Importieren

mysqlJetzt noch ein schneller Tip für heute. Wie bekommt man den MySQL Dump wieder richtig eingespielt? Ich habe immer wieder
das Problem, dass dieses ä,ö und ü nicht korrekt wiederhergestellt werden.

Eigentlich ist es ganz einfach, wenn er Dump im utf8 Format erzeugt wurde, das einfach beim Import mit angeben.

mysql -u root -p --default-character-set=utf8 database < database.sql

 

MySQL 5.6 LOW Memory VPS configuration

Nachdem ich spontan meine Cloud umziehen musste … Nein, nicht weil er kaputt gegangen ist, die Performance war sehr schlecht und der Apache auf dem Shared Hoster lief äußerst inperformant und instabil.

Als alter „Schotte“ hab ich mir ein VPS gesucht, der möglichst viel Speicherplatz bietet. Mir war es dabei nicht so wichtig, möglichst viel CPU oder RAM zu haben. Meine Wahl fiel auf den Hoster 1fire.de.

1fire

Der Service-Plan war genau das was ich gesucht habe:

1fire_Plan

Nach der Installation aller nötigen Dienste wie Apache, Postfix und MySql wurde klar, bei der Speichernutzung muss ich etwas aufpassen. MySQL hat sich von dem 1024 MB direkt mal 800MB gekrallt. Das geht natürlich nicht 😉 Also was tun?

Ich habe MySql 5.6 im Einsatz hier sind die Änderungen die ich unter [mysql] eingefügt habe.

# Since 5.5.5, mysql uses innodb as default storage engine,
# but innodb requires more memory than MyIASM.
# So, on my low memory machine, I have to disable it.

# disable innodb and set MyISAM as default storage engine
skip-innodb
default-storage-engine=MyISAM
default-tmp-storage-engine=MEMORY
loose-innodb-trx=0
loose-innodb-locks=0
loose-innodb-lock-waits=0
loose-innodb-cmp=0
loose-innodb-cmp-per-index=0
loose-innodb-cmp-per-index-reset=0
loose-innodb-cmp-reset=0
loose-innodb-cmpmem=0
loose-innodb-cmpmem-reset=0
loose-innodb-buffer-page=0
loose-innodb-buffer-page-lru=0
loose-innodb-buffer-pool-stats=0
loose-innodb-metrics=0
loose-innodb-ft-default-stopword=0
loose-innodb-ft-inserted=0
loose-innodb-ft-deleted=0
loose-innodb-ft-being-deleted=0
loose-innodb-ft-config=0
loose-innodb-ft-index-cache=0
loose-innodb-ft-index-table=0
loose-innodb-sys-tables=0
loose-innodb-sys-tablestats=0
loose-innodb-sys-indexes=0
loose-innodb-sys-columns=0
loose-innodb-sys-fields=0
loose-innodb-sys-foreign=0
loose-innodb-sys-foreign-cols=0

# optimize for low memory
key_buffer=16K
table_open_cache=4
query_cache_limit=256K
query_cache_size=4M
max_allowed_packet=1M
sort_buffer_size=64K
read_buffer_size=256K
thread_stack=64K

# only local - wenn gewünscht :)
skip-networking

Hier noch der vergleich in Munin und htop

memory-day-server4-mysql-optimize server4_mem

An der Aktuellen Messung kann man schön erkennen, dass das System nun kaummehr beginnt zu swapen.

Das wars auch wieder!

Stay tuned!

[HowTo] LNMP – VPS mit wenig Ressourcen Nginx & PHP

LNMP-debianvps-300x257Wollt auch Ihr Eurer eigener Herr über einen Server sein? Scheut Euch aber einen dedizierten Root-Server zu mieten? Die Lösung sind kleine vServer, die Euch vollen Admin Zugriff erlauben. Ihr seid euer Herr.

Hat man ein „Low powered“ VPS mit wenig CPU & RAM, muss man genau hinschauen was man installiert. Eine Möglichkeit Ressourcen zu sparen ist, anstatt dem weit verbreiteten Indianer (Apache) auf den schlanken Nginx Webserver zu setzten.

Hier ein kleinen HowTo, wie Ihr Euren VPS mit Nginx & PHP einrichtet.

Als erstes sollte man die „Dotdeb“ Quellen zu seinem System hinzufügen.Hierzu bearbeitet man die Sources von apt (/etc/apt/sources.list)

nano /etc/apt/sources.list

und fügt am Ende einfach diese Zeilen ein:

# DotDeb
deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all

Um die Paketquellen nutzen zu können, müsst ihr den „Repository-Key“ noch hinzufügen, indem ihr folgende schritte ausführt:

wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -

Der nächste Schritt ist optional. Ihr könnt dem System eine höhere Priorität für die DetDeb Paketquellen geben, müsst dies aber nicht. Einfach diese Datei anlegen „/etc/apt/preferences.d/dotdeb“

nano /etc/apt/preferences.d/dotdeb

folgenden Inhalt einfügen:

Package: *
Pin: release o=packages.dotdeb.org
Pin-Priority: 990

Um zu checken, aus welchem Repository nun die Pakete installiert werden einfach folgenden Befehl ausführen.

apt-cache policy nginx

Jetzt geht’s erst richtig los

Mit dem folgenden Befehl installiert Ihr Nginx & PHP

apt-get install nginx php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd

Jetzt schnell noch ein Root Verzeichnis für den Webserver anlegen

mkdir /var/www

Seit Nginx 1.4 werden die Seiten ähnlich wie bei Apache im Ordner /etc/nginx/sites-enables konfiguriert. Hier sollten Symlinks zu files im Verzeichnis /etc/nginx/sites-available erzeugt werden.

nano /etc/nginx/sites-available/server2.tschoerner.eu

und folgenden Inhalt einfügen:

server {
	listen 80;	# Der zu lauschende Port
	server_name server2.tschoerner.eu;	# Der Name für den virtuellen Host
	root /var/www;	# Der zu verwendende Ordner

	location / {
		index index.php index.html;	# Zuerst versuchen, bei einem / Aufruf die index.php zu laden, alternativ die index.html
	}

	location ~* \.php$ {	# Ermöglicht die Verarbeitung von php Dateien
		try_files $uri /index.php;
		fastcgi_index index.php;
		fastcgi_pass 127.0.0.1:9000;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_param SCRIPT_NAME $fastcgi_script_name;
	}

	autoindex on;	# Funktion, ob der Verzeichnisinhalt angezeigt werden soll, wenn keine index.php oder index.html existiert
}

Jetzt besagten Symlink erzeugen:

ln -s /etc/nginx/sites-available/server2.tschoerner.eu  /etc/nginx/sites-enabled/server2.tschoerner.e

rm -rf /etc/nginx/sites-enabled/default

Und fertig … Neginx neu starten

service nginx restart

Legt nun eine Datei (phpinfo.php) in /var/www an und ruft diese im Browser auf.

Wenn Ihr jetzt einen Fehler bekommt „502 Bad Gateway“, dann müsst Ihr noch folgende Zeile in der Datei (/etc/php5/fpm/pool.d/www.conf) ändern:

#ALT
listen = /var/run/php5-fpm.sock

#Zu:
listen = 127.0.0.1:9000

PHP durchstarten und fertig 🙂

/etc/init.d/php5-fpm restart

Alles zu Thema MySQL blogge ich demnächst.

Natürlich könnt Ihr auch hier die bereits geboggten Performance Enhancements eines PHP Caches nutzen.