Přesun MySQL na nový server

Nedávno jsem se setkal s dotazem, jak přesunout celý MySQL server na nový fyzický stroj a přistupovat na něj odjinud (např. pomocí phpMyAdmin). Z poznámek jsem sepsal krok za krokem "jak na to" pěkně od začátku. A nebojte, není to nic složitýho... Ale pozor, jakmile se něco pokazí, můžete přijít o všechna data...

Úvodem ...

...si představme situaci, že jeden LAMP (Linux, Apache, MySQL, PHP) server už nestíhá a je potřeba nějak rozdělit jeho zátěž. Jednou z možností je přesunout DB na jiný fyzický stroj - na starém necháme pouze generované (PHP) webové stránky (Apache) a třeba nějakou jednodušší databázi s e-maily. Pokud byste chtěli stroji ještě více ulevit, pak by byl dobrý nový stroj třeba pro obrázky (grafiku), dokumenty nebo jaký sajrajt tam máte a nebo použít loadbalancer - ale to jen tak bokem. Servery propojíme nějakou vnitřní GE sítí a je to..

Protože webmasteři zvládají HTML levou zadní, PHP, JavaScript a MySQL pravou přední, ale přístup k databázi pomocí řádky řeší velice neradi (opravte mě, jestli se mýlím), rozjedeme jim přístup i pomocí phpMyAdmin.

Mějme dva servery. Stávající (označme jej A) s IP 10.0.0.1 a nový (B), připravený pro DB, s IP 10.0.0.2.

Nový MySQL server

Po instalaci vaší oblíbené ditribuce a MySQL serveru musíme zkopírovat naše stávající data a povolit uživatelům připojení k databázím ze vzdáleného stroje A - k tomu stačí pár kroků:

  1. řekneme serveru, aby naslouchal komunikaci, kde má. V /etc/my.cnf (v debian-like distribucích je to myslím v /etc/mysql/my.cnf) nastavíme bind-adres na IP MySQL serveru a zakomentujeme "ignorování" síťování:
    bind-address=10.0.0.2
    #skip-networking
  2. nastartujeme MySQL server na stroji B a zkontrolujeme, zda běží jak má, pak ho zase zastavíme
    /etc/init.d/mysql start
    /etc/init.d/mysql stop
  3. na serveru B pro jistotu zazálohujeme - přesunutím - složku s daty MySQL (koukněte do konfigurace, kde ji máte):
    cp -a /var/lib/mysql /var/lib/mysql-backup
  4. na stávajícím serveru (A) zastavíme databázi (výpadku se zde nevyhneme) a to proto, abychom na novém serveru neměli nějaký nekompletní záznam nebo rozhozenou tabulku. Přesun databází můžeme zvolit dvojí:
    • pomocí nástroje mysqldump (vhodnější pro menší DB) - kdy na stroji A uděláme dump všech databází: mysqldump --all-databases > backup.sql
    • a na stroji B je jednoduše importujeme: mysql < backup.sql. Doporučuji přečíst dokumentaci.

    • pomocí nástroje rsync - např. rsync -avz -e ssh /var/lib/mysql [email protected]:/var/lib/mysql
    • zkopíruje data na úrovni filesystému. Je to ryskantnější, ale v případě větší DB rychlejší.

  5. vlezeme do příkazové řádky MySQL a povolíme přihlašování ze vzdáleného stroje A s IP adresou 10.0.0.1 (ukázka je pro uživatele root, ale v rámci bezpečnosti...no jak chcete):
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.1' IDENTIFIED BY 'moje-heslo' WITH GRANT OPTION;
    mysql> FLUSH PRIVILEGES;
  6. ještě je dobré upravit firewall (zvláště, pokud se nepohybujete po vnitřní síti). Předpokládám, že povolit port 3306 zvládnete

Nyní se pomocí mysql -u root -p -h 10.0.0.2 můžeme zkusit připojit ze starého stroje. Pokud to jde, je vše ok, pokud ne, přečtěte si postup ještě jednou.

Nastavení phpMyAdmin

Já mám hlavní phpMyAdmin adresář v /usr/share/phpMyAdmin, tak si do té složky vlezu a... Jediné co nás tu zajímá je config.inc.php, ve kterém se skrývá samotné nastavení.

Ke kterému serveru se připojujeme nám ukazuje $cfg['Servers'][$i]['host'] = "localhost". Díky prozíravosti vývojařů phpMyAdmina můžeme na konec souboru na nový řádek přidat $i++;, čímž navýšíme pole 'Serverů' o jedno a můžeme přidat dalšího hosta. Nejjednodušší bude zkopírovat vše co máte k předchozímu a změnit právě jen $cfg['Servers'][$i]['host'] = "localhost" na $cfg['Servers'][$i]['host'] = "10.0.0.2".

Uložit, zavřít a tadá!

2 thoughts on “Přesun MySQL na nový server

  1. Ondrej Simek

    -- "ale přístup k databázi pomocí řádky řeší velice neradi (opravte mě, jestli se mýlím)"
    mylis :o) .. ok, dobra dobra - u vetsiny to asi plati :) - u me je to ale tak, ze kdyz gui, tak kvalitni - jinak radsi cli...

    rsyncovani primo /var/lib/mysql je pekna myslenka - vubec me nenapadlo, ze to jde resit takle jednoduse :) .. vyuziju na migraci z produkcniho serveru na lokalni dev, takze diky za clanek! :)

Comments are closed.