miercuri, 25 martie 2009

Configurare MySQL pentru hosting

Articolul următor face parte dintr-o colecție de articole menită să ofere o soluție de hosting web bazată pe vsftpd, lighttpd, PHP și MySQL.

Fiecare vhost va avea propriul lui cluster MySQL. Asta înseamnă că fiecare vhost va avea propriul lui user root, va putea creea orice bază de date în cluster-ul său etc.

În continuare, este necesar să compilăm și instalăm mysql51-server. Acest pachet va instala mysql51-client.

Nu necesită nici un flag special pentru compilare.

În /usr/local/etc/ vom creea un fișier denumit my.cnf ce va conține câte o intrare pentru fiecare vhost, de genul:
[mysqld0]
basedir=/usr/local
datadir=/home/myuser/mysql
log=/home/myuser/logs/mysql.log
pid=/var/run/mysql/myuser.pid
socket=/var/run/mysql/myuser.sock
user=mysql
#port=3307
skip-networking
skip-innodb

[mysqldX], unde X se incrementează de la 0 pentru fiecare vhost. Asigurați-vă că există directoarele /home/myuser/mysql/ și /var/run/mysql/ și că acestea au ca owner user-ul mysql. De asemenea, asigurați-vă că fișierul /home/myuser/logs/mysql.log are ca owner pe mysql, sau că user-ul mysql are drepturi de scriere în acel fișier.
# mkdir -p /home/myuser/mysql
# mkdir -p /var/run/mysql
# touch /home/myuser/logs/mysql.log
# chown mysql:wheel /home/myuser/mysql/
# chown mysql:wheel /var/run/mysql/
# chown mysql:www /home/myuser/logs/mysql.log
# chmod 755 /home/myuser/mysql/
# chmod 755 /var/run/mysql/
# chmod 644 /home/myuser/logs/mysql.log
Nu uitați ca pentru fiecare vhost, să rulați mysql_install_db, ex:
# mysql_install_db --datadir=/home/myuser/mysql --user=mysql
Mai departe veți avea nevoie de un script care să cheme mysqld_multi, deoarece, acesta este daemon-ul care va porni toate clusterele din /usr/local/etc/my.cnf.

Pentru ca instanța de PHP a fiecărui vhost să știe că socket-ul implicit al mysql-ului său se găsește în /var/run/mysql/.sock, trebuie să adăugăm două linii în fișierul php.ini al fiecărui vhost, de genul:
mysql.default_socket = "/var/run/mysql/myuser.sock"
mysql.default_host = "localhost"
Asta va spune instanței PHP a vhost-ului myuser, ca request-urile făcute de către mysql_connect() către "localhost", se vor realiza prin socket-ul /var/run/mysql/myuser.sock.

0 comentarii: