Mysql varundamine LVM abil
Sissejuhatus
Antud kirjatüki eesmärgiks on tutvustada LVM-i kui abivahendit toimivast süsteemist tagavarakoopiate tegemisel. Kuigi failisüsteemi snapshotide tegemine ja nende kasutamine on ainult üks LVM-i pakutavatest võimalustest, on see siisk väga vajalik featuur. LVM - i snapshotide tegemise võimalus pole ainult mysql -i varundamiseks, vaid kasutatav ka muust datast varukoopiate tegemiseks. Antud juhul on MySQL siin ainult „reisija“ aga protsessi selgitamiseks ja LVM snapshoti kasutamiseks on MySQL näitena väga hea. Kogu seadistamise protsess toimub Ubuntu Linux Server 12.04.1 LTS operatsioonisüsteemis ja kasutab sellega kaasnevaid vahendeid.
Mis on mis?
LVM
LVM ehk „Logical Volume Manager“ on ketta partitsioonide haldusvahend Linuxi ja UNIX-i laadsete operatsioonisüsteemide juures. LVM moodustab vahekihi failisüsteemi ja füüsilise kõvaketta vahele. Esmapilgul võib tunduda, et LVM on sarnane RAID (Redundant Array of Independent Disks) kettamassiiviga, on ta siiski hoopis paindlikum viis kettajagudega toimetamiseks. RAID võimaldab kettaid omavahel liita, et saada paremaid tulemusi kiiruses, mahus või töökindluses. LVM seevastu võimaldab korraga hallata mitut (ka loogilist) kettajagu, neid vastavalt vajadusele ümber tõsta ja mahtu muuta. Seega on tihti hea mõte neid kahte hoopis koos kasutada (näiteks RAID 10 ja LVM). Lihtsustatult oleks ettekujutus eri kihtide tasemetest selline:
- Failisüsteemid
- LVM
- RAID (vajadusel)
- füüsilised plokkmäluseadmed (kõvakettad)
Omadused
LVM pakutavad võimalused on:
- Failisüsteemi suuruse muutmine
- Failisüsteemi snapshotide tegemine ja kasutamine (nii read-only kui ka read-write)
- Loodud/muudetud partitsioonide kohene kasutamine, kui ketas/partitsioon on mingil moel kasutusel. Fdisk-i kasutamisel tuleb OP-süsteem taaskäivitada.
- Väiksemate füüsiliste plokkseadmete kokku ühendamine, üheks suureks loogiliseks seadmeks. (Nagu RAID)
- Ketaste liigutamine ja ühendamine üle võrgu
Lisainfot LVM-i kohta: http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)
MySQL
MySQL on Oracle Corporation poolt hallatav relatsioonilise andmebaasi haldamise süsteem. On äärmiselt populaarne andmebaasisüsteem erinevates veebirakendustes aga ka mõningates suuremates süsteemides. Oma populaarsuse on ta saanud tänu äärmiselt lihtsale hallatavusele ja kasutajasõbralikkusele. Hetkel ei hakka MySQL-i omadustel ja võimalustel pikemalt peatuma. Rohkem informatsiooni leiab: http://www.mysql.com/
Vajaliku tarkvara insalleerimine
Et LVM-i ja MySQL-i seadistada on vajalikud teadmised, kuidas toimub Linuxis ketaste ja partitisoonide haldamine ja baasteadmised MySQL-ist. Kõigepealt on vajalik installeerida lvm2 nimeline pakett.
sudo apt-get install lvm2
Olenevalt operatsioonisüsteemist võib olla vajalikud pakeid juba installeeritud, kontrollida saab nii:
sudo lvm version
sudo lvm version LVM version: 2.02.66(2) (2010-05-20) Library version: 1.02.48 (2010-05-20) Driver version: 4.22.0
Lisaks on vajalik installeerida MySQL server ja klientprogramm serveriga ühendumiseks.
sudo apt-get install mysql-server
NB! Kuna LVM-i kasutuselevõtmine vajab mõningast MySQL-i ümberseadistamist, tuleb arvestada asjaoluga, et MySQL-i data kausta ümbertõstmisel ei pruugi olemasolevad andmed säilida (InnoDB) ja vajalik oleks serveris olevatest andmetest enne .sql kujul tagavarakoopia teha.
LVM -i seadistamine
LVM ise jaguneb kolmeks eri kihiks: plokkseadmed (PV), „Volume groups“ (VG), milledesse on organiseeritud füüsilised plokkseadmed ja „Logical volumes“ mis on jagatud VG-d ehk „Volume groups“. Iga kihiga toimetamisel on oma käsud, mis viitavad sellele, mis kihiga hetkel toimetatakse: pv*, vg* ning lv*. Näiteks pvcreate, vgcreate ja lvcreate.
Esimese asjana tuleb valida ketas/kettajagu, kus LVM-iga toimetama hakata. Uue ketta puhul oleks võimalusel mõtekas luua üks tervet ketast hõlmav partitsioon.
Näites on kasutatud ühte 4 GB suurust ketast (VirtualBox-i lisatud 4GB suurune virtuualne kõvaketas). Operatsioonisüsteem tunnistab seda kui /dev/sdb ja seega on näites kasutatavad ketta nimed/asukohad just sellised. Partitiooni tüübiks tuleb kindlasti määrata Linux LVM ehk kood „8e“
sudo fdisk -l 2> /dev/null | grep Disk Disk /dev/sda: 8589 MB, 8589934592 bytes Disk identifier: 0x000bd8b1 Disk /dev/sdb: 4294 MB, 4294967296 bytes Disk identifier: 0x11844f48
Lisame vajaliku partitsiooni
sudo fdisk /dev/sdb Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-8388607, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-8388607, default 8388607): Using default value 8388607 Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Järgnevalt anname lvm-ile teada, et loodud partitsioon on „pv“ ehk physical volume.
sudo pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created
Kui kõik läks hästi siis peaks tulemus olemas selline:
sudo pvdisplay "/dev/sdb1" is a new physical volume of "4.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 4.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID EdmaX9-bXmQ-Oevp-p9W9-I2qY-gpMM-1w77aQ
Loome uue „volume group“ -i ja nimetame selle mysql -iks.
sudo vgcreate mysql /dev/sdb1 Volume group "mysql" successfully created
- sudo vgdisplay
--- Volume group --- VG Name mysql System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 4.00 GiB PE Size 4.00 MiB Total PE 1023 Alloc PE / Size 512 / 2.00 GiB Free PE / Size 511 / 2.00 GiB VG UUID s5AjT8-ss7D-Gm9m-XY6j-ULMv-RLbR-xdy0K6
Järgnevalt saame luua „volume group“ -ile „logical volumes“ ehk loogilised kettajaod. Need on justkui partitsioonid füüsilisel kõvakettal ja neid saab juba andmete talletamiseks kasutada. Nimetame kettajao nimega data ja määrame tema suuruseks 1GB (antud suurus sobib väga hästi katsetamiseks aga reaalsetes süsteemides tuleb muidugi oluliselt suuremaid numbreid kasutada. ). Suuruse seadistamisel tuleb arvestada, et sama „volume group“ peale tuleb mahutada veel vähemalt üks sama suur loogiline kettajagu, mis on loodava LV snapshot. Näide kui VG suurus on kokku 10GB siis on võimalik teha maksimaalselt 5GB suurune loogiline kettajagu. Vastasel ei mahu tema kõrvale, samale VG-le tehtud LV snapshot.
sudo lvcreate -n data -L 1GB mysql Logical volume "data" created
Kontrollime tulemust:
sudo lvdisplay --- Logical volume --- LV Name /dev/mysql/data VG Name mysql LV UUID SL0yWI-Mc2b-KhkE-V8P1-bW7E-3iL8-8zD6Uf LV Write Access read/write LV Status available # open 0 LV Size 1.00 GiB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0
Teadmiseks: lvdisplay käsu käivitamisel on näha parameeter „LV Status“. See näitab, kas kettajagu on saadaval või mitte. Kasutada on võimalik ainult available olekus kettajagu. Eemaldada saab ainult NOT available olekus kettajagusid. Kettajao NOT available olekusse viimiseks saab kasutada käsku:
sudo lvchange -a n /dev/mysql/data
ja tagasi:
sudo lvchange -a y /dev/mysql/data
Nüüd on loodud uus kettajagu, mida saab andmete säiltamiseks kasutada. Loome sellele kettajaole failisüsteemi:
sudo mkfs -t ext4 /dev/mysql/data
Järgmisena tuleb loodud kettajagu kuhugile mountida. Mina teen sellejaoks /srv/mysql kausta ja haagin ketta sinna.
sudo mkdir /srv/mysql
Lisame /etc/fstab faili lõppu kirje, et ka järgmisel süsteemi käivitamisel oleks ketas kohe külgehaagitud
/dev/mysql/data /srv/mysql ext4 defaults 0 0
Muudame kausta õigused mysql-ile sobivaks (kausta omanik on kasutaja mysql ja kaustale on ligipääs ainult kausta omanikul)
sudo chown mysql:mysql /srv/mysql sudo chmod 0700 /srv/mysql
Nüüd tuleb olemasolev mysql data kaust liigutada /srv/mysql kausta. Esimese asjana peatada mysql server
sudo service mysql stop mysql stop/waiting
Kopeerime (!) kogu mysql-i data kausta loodud lvm kettajaole. Ubuntus (ilmselt ka paljudes teistes operatsioonisüsteemides) asub mysq-i data kaust /var/lib/mysql. Oleks vägagi soovitatav jätta andmed vanasse kausta alles ja kustuta see alles siis kui ollakse täiesti kindel, et server töötab tõrgeteta.
sudo cp -ar /var/lib/mysql/. /srv/mysql
Seejärel tuleb mysq-i konfiguratsioonifailis (/etc/mysql/my.cnf) muuta ära „datadir“ parameeter
datadir = /var/lib/mysql -> datadir = /srv/mysql
Teadmiseks: alates Ubuntu 7.10 -st on operatsioonisüsteemiga kaasas programm nimega „AppArmor“. Tegemist on kerneli turvamooduliga, mis teatavate programmide puhul piirab nende ligipääsu failisüsteemile. Et MySQL server uuesti korrektselt käivituks, tuleb „AppArmor“ -is mysq-i seadistust muuta. Sobiva tekstieditoriga tuleb avada /etc/apparmor.d/usr.sbin.mysqld konfifail ja teha seal vajalikud muudatused :
/var/lib/mysql/ r, -> /srv/mysql r, /var/lib/mysql/** rwk, -> /srv/mysql** rwk,
Osadel operatsioonisüsteemidel võib ka init skript ette anda, kus asub mysql-i datadir. Seega oleks mõistlik ka see /etc/init.d/mysql skriptist üle vaadata.
Käivitame uuesti mysql-i serveri. Kui kõik läks hästi, peaks olema tulemus sarnane:
sudo service mysql start mysql start/running, process 2588
Kontrollime mysql-i muutujaid:
mysqladmin -u{mysql-kasutaja} -p variables | grep datadir Enter password: {mysql-parool} | datadir | /srv/mysql/
Lisaks tuleks sobiva mysql kliendiga serverisse sisse logida ja kontrollida üle, kas kõik jäi korrektselt tööle.
Nüüd, kui MySQL server on korrektselt töödanud ja tekib vajadus varukoopiate tegemiseks. Töötavast serverist snapshoti tegemisel pole vajalik eelnev serveri väljalülitama. Lihtsalt protseduuri ajaks oleks vajalik keelata ära andmete kirjutamine „FLUSH TABLES WITH READ LOCK;“ käsuga, lisaks võiks tühjendada ka logid „FLUSH LOGS;“ käsuga. Snapshoti tegemise protsess on äärmiselt kiire ja andmete lugemine andmebaasist toimib endiselt edasi. Samas andmete kirjutamise protsess viibib seni, kui andmebaasilt kirjutamise lukk maha võetakse (kõik kirjutamise käsud täidetakse kohe peale luku vabastamist). Ehkki varukoopia tegemise protsess ei tekita katkestusi serveri töös, oleks hea mõte teha varukoopiaid sellisel ajal kui serveril on kõige väiksem koormus. On vajalik teada, et andmebaas lukustatakse ainult selleks ajaks, kui mysql serverisse on sisse logitud. Kohe kui sessioon lõpetatakse, vabastatakse ka lukud. Seetõttu peab snaspshoti tegemise ajal olema serverisse sisse logitud. Variant on kasutada kahte terminali sessiooni aga vajalikke käske saab käivitada ka MySQL-i käsurealt (vajalik on mysql-i klient käivitada root kasutaja õigustes).
sudo mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 75 Server version: 5.5.28-0ubuntu0.12.04.2 (Ubuntu) Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH LOGS; Query OK, 0 rows affected (0.00 sec)
mysql> SYSTEM /sbin/lvcreate -L 1G --snapshot -n sql_backup /dev/mysql/data File descriptor 3 (socket:[15065]) leaked on lvcreate invocation. Parent PID 3514: sh Logical volume "sql_backup" created mysql> UNLOCK TABLES; Query OK, 0 rows affected (0.01 sec) mysql> exit Bye
Snapshoti kettajagu nimetati kui sql_backup ja viide loogilisele seadmele asub /dev/mysql/sql_backup. Käivitades käsu „lvs“, saab näha, et lisaks mysql/data LV-le on juurde tekkinud mysql/sql_backup
sudo lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert data mysql owi-ao 1.00g sql_backup mysql swi-a- 1.00g data 0.00
Kui nüüd haakida tehtud snapshoti kettajagu, on seal kättesaadav kogu mysql-i data sellel hetkel, kui snapshot tehti.
sudo mkdir /mnt/bk sudo mount /dev/mysql/sql_backup /mnt/bk sudo ls -la /mnt/bk total 28720 drwx------ 8 mysql mysql 4096 Dec 12 15:59 . drwxr-xr-x 3 root root 4096 Dec 12 16:34 .. -rw-r--r-- 1 root root 0 Nov 30 17:18 debian-5.5.flag -rw-rw---- 1 mysql mysql 18874368 Dec 12 16:18 ibdata1 -rw-rw---- 1 mysql mysql 5242880 Dec 12 16:18 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 Nov 30 17:18 ib_logfile1 drwx------ 2 root root 16384 Dec 12 15:58 lost+found drwx------ 2 mysql root 4096 Nov 30 17:18 mysql -rw-rw---- 1 root root 6 Nov 30 17:18 mysql_upgrade_info drwx------ 2 mysql mysql 4096 Nov 30 17:18 performance_schema drwx------ 2 mysql mysql 4096 Nov 30 17:28 phpmyadmin drwx------ 2 mysql root 4096 Dec 12 16:18 test drwx------ 2 mysql mysql 4096 Nov 30 17:33 wp
MySQL-i server töötab peale snapshoti tegemist katkestusteta edasi. Tehtud snapshoti andmeid võib varundada arhiivi jaoks. Andmete varundamisel tuleb spashoti kettajagu failisüsteemi külge haakida ja selle sisu „tar“-i abil arhiveerida ja hiljem eemaldada snapshoti kettajagu
sudo mkdir /mnt/bk sudo mount /dev/mysql/sql_backup /mnt/bk sudo tar -cjf /teekond/arhiivi/kuupäev.tar.bz2 -C /mnt bk sudo umount /dev/mysql/sql_backup sudo lvremove /dev/mysql/sql_backup Do you really want to remove active logical volume sql_backup? [y/n]: Y Logical volume "sql_backup" successfully removed
Kogu protseduuri automatiseerimiseks on võimalik koostada ka skript, mida saab käivitada sobival aja või kasutades „cron“ ajastamise vahendeid.
Lisaks on võimalik mysql-i data kaust haakida ümber snapshoti kettajaole ja taastada server sellesse seisu, mis oli snapshoti tegemise hetkel minimaalse katkestuse ajaga.
Kokkuvõte
LVM -i kasutamine varundamisel on väikestes ja mittekriitilistes süsteemides küllaltki hea lahendus. See ei nõua eriteadmisi ja kallist riistvara/tarkvara. Kuid suurematesse ja keerukamatesse lahendustesse see ei sobi, kuna see ainult aitab luua snapshoti hetke seisust aga ei paku võimalust seda eraldi salvestada. Arhiveerimiseks tuleb kasutada eraldi vahendeid ja selle protseduuri käigus võib minna kaduma vajalikke andmeid. Ka ei võistle LVM proffessionaalsete vahenditega nagu Arkeia (http://www.arkeia.com/) või BrightStor, mis on just varundamise lahenduste jaoks loodud ja muudavad antud tegemise mugavaks ja kiireks.
Kasutatud kirjandus
http://kuutorvaja.eenet.ee/wiki/LVM
http://www.web-manual.net/linux-3/logical-volume-manager-in-linux/
http://www.lullabot.com/articles/mysql-backups-using-lvm-snapshots
http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html
https://wiki.ubuntu.com/Lvm
Autor
Madis Lauri AK 31
Täiendamine: Carolys Kallas A32
Aine: Linuxi administreerimine Viimati muudetud: 07.01