Mysql în paralel cu Percona

5 Feb 13 - Databases, MySQL, Percona, Software - Tiberiu - No Comments

După cum am menţionat într-unul din articolele anterioare – într-o notă aparent nesemnificativă, dar dacă aţi citit articolul aţi observat-o cu siguranţă – serverul Percona înlocuieşte Mysql-ul. De fapt, dacă se instalează prin apt-get, veţi observa că înainte de a se începe instalarea efectivă, se verifică dacă există MySQL şi se începe dezinstalarea. Totuşi se păstrează configurările din etc/mysql/my.cnf, folder-ul cu datele, respectiv cu bazele de date. Astfel, după o instalare de Percona ar trebui să funcţioneze fără probleme aplicaţiile pe care le-aţi avut înainte, precum phpMyAdmin-ul … dar mai repede şi mai stabil. :)

Dar dacă vreţi să faceţi nişte benchmark-uri, nişte comparaţii între cele 2 servere ca să vă convingeţi dacă merită sau nu să faceţi schimbul între cele 2 servere? Atunci ar trebui să le aveţi pe amândouă instalate neaparat pe aceeaşi maşină astfel încât testele să fie concludente. Se poate ? Dacă nu s-ar putea n-aş scrie articolul acesta. :P

Ideea e următoarea: se pot rula ambele atât timp cât se conectează la porturi diferite. De asemenea, folderul cu datele, cu bazele de date efective, trebuie să fie diferite. Desigur, dacă Percona s-a instalat cu apt-get şi a înlocuit o instalare iniţială a Mysql-ului, nu se poate folosi apt-get pentru Mysql care va încerca să instaleze serverul în locaţiile unde deja există Percona.

“Să trecem la treabă!” :P Primul lucru pe care-l facem e să downloadăm o distribuţie de Mysql care corespunde cu ce aveam înainte. Dacă înainte am avut Mysql 5.5.29 şi am instalat versiunea corespondentă de Percona, atunci ar fi bine să luăm aceeaşi versiune şi să încercăm să o instalăm. De ce? Pentru ca testele să fie concludente. De obicei, când apare o versiune de MySQL nouă, apare la un interval de timp relativ scurt şi o versiune de Percona nouă, construită pe core-ul MySQL-ului proaspăt lansat.

Intraţi pe Mysql, aici http://dev.mysql.com/downloads/mysql/, şi downloadaţi versiunea corespunzătoare sistemului vostru de operare. Foarte probabil veţi intra în posesia unui .tar.gz. Sau, mai simplu, rulaţi următoarele comenzi linux:

1. Downloadăm arhiva mysql pentru linux în directorul /home şi o redenumim corespunzător.

$ sudo su
$ cd /home/
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.29-linux2.6-i686.tar.gz/from/http://mysql.llarian.net/
$ mv index.html mysql-5.5.29-linux2.6-i686.tar.gz

2. Mysql-ul va fi instalat în /usr/local/, aşadar copiem arhiva în directorul acesta şi dezarhivăm. Apoi redenumim directorul rezultat prin dezarhivare în ‘mysql2′. Finalizăm prin ştergerea arhivei care nu mai e necesară.

$ cp mysql-5.5.29-linux2.6-i686.tar.gz /usr/local/
$ cd /usr/local/
$ tar xzvf mysql-5.5.29-linux2.6-i686.tar.gz
$ mv mysql-5.5.29-linux2.6-i686 mysql2
$ rm mysql-5.5.29-linux2.6-i686.tar.gz

3. Creăm un fişier my.cnf care va conţine configuraţiile serverului. Deschidem fişierul pentru editare.

$ cd /usr/local/mysql2
$ echo ” ” > my.cnf
$ gedit my.cnf

4. Scriem următoarele în fişier:

[client]
port = 3307
socket = /var/run/mysqld/mysqld2.sock

[mysqld_safe]
socket = /var/run/mysqld/mysqld2.sock
nice

[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld2.pid
socket = /var/run/mysqld/mysqld2.sock
port = 3307
basedir = /usr/local/mysql2
datadir = /var/lib/mysql2
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql2
skip-external-locking
federated

5. Creăm căile de mai sus care nu vor exista. De exemplu, pentru crearea, bazelor de date am setat în fişierul de configurare “datadir =/var/lib/mysql2″, dar folderul acesta încă nu există. Îl creăm.

$ mkdir /var/lib/mysql2
$ mkdir /usr/share/mysql2

6. Setăm o parolă default la mysql:

$ cd /usr/local/mysql2/lib
$ mysqladmin -u root password “secret”

7. Creăm un symlink pentru executabil în /usr/bin astfel încât să poată să fie apelat oriunde.

$ ln -s /usr/local/mysql2/bin/mysql /usr/bin/mysql2

8. Cum pornim serverul de mysql? Printr-un shell script pe care-l salvăm în /etc/init.d/mysql2Fişierul va conţine următoarele linii:

#!/bin/bash

PID=”"

function get_pid {
PID=$(cat /var/run/mysqld/mysqld2.pid)
}

function stop {
get_pid
if [ -z $PID ]; then
echo “Mysql is not running”
exit 1
else
echo -n “Stopping Mysql with $PID ”
kill -9 $PID
sleep 2
echo “.. Done.”
fi
}

function start {
get_pid
if [ -z $PID ]; then
echo -n “Starting Mysql … ”
cd /usr/local/mysql2/bin/ & mysqld_safe –defaults-file=/usr/local/mysql2/my.cnf –mysqld=../local/mysql2/bin/mysqld &
sleep 2
echo “.. Done.”
else
echo “Mysql is running”
exit 1
fi
}

case “$1″ in
start)
start
;;
stop)
stop
;;
*)
echo “Usage: $0 {start|stop}”
esac
exit 0

9. Pornim serverul de mysql prin comanda:

$ /etc/init.d/mysql2 start

10. Încercăm să pornim clientul de mysql ca să vedem dacă am făcut totul bine:

$ mysql2 -u root -psecret -P 3307 -h 127.0.0.1

Atât serverul cât şi clientul ar trebui să pornească şi să funcţioneze perfect. Desigur că sursele de date, respectiv bazele de date create sau pe care le veţi crea, sunt diferite pentru că au o locaţie diferită.

Referinţe

http://lasanthals.blogspot.ro/2012/09/running-multiple-instances-of-mysql-on.html

http://code.openark.org/blog/mysql/manually-installing-multiple-mysql-instances-on-linux-howto

http://www.ovaistariq.net/490/a-step-by-step-guide-to-upgrading-to-mysql-5-5/

http://dev.mysql.com/doc/refman/5.1/en/multiple-servers.html


Leave a Comment