Sziasztok!
Van egy (szerintem) nagyon jó feladatom számotokra. Adott 7 szerver, teljesen más-más adatbázisokkal. Valahol csak 2 DB van, van ahol 22. Van amelyik 10 MB, van ami 3 GB. Ki lett találva, hogy időspórolás és HW erőforrások megfelelő elosztása érdekében legyenek csak havonta teljes backup-ok, naponta viszont legyen differenciális backup. Na, én meg rábólintottam, hogy ez jó ötlet... csak épp nem tudtam, hogy a MySQL alapból nem tud ilyet és csak mókolt szkripteket találtam a Google segítségével.
A backup úgy készül jelenleg, hogy van egy Backup szerver aki X időközönként be SSH-zik a kliensekre, csinál egy SQL dumpot kompletten, csinál egy tar-gz fájlt a /var/www-ről majd ezt a 2 fájlt az rsnapshot szépen átmásolja a szerverre a megfelelő helyre. Ez addig szépen és jól ment míg el nem értük a gigás méreteket. :)
Kérdés: Ti hogyan csinálnátok minden adatbázisról különbözeti mentéseket? És, ha lehet nem növekvőt, hanem különbözetit. Szerintem az biztonságosabb, de cáfoljatok meg kérlek, ha nem. :)
A rendszerek amúgy CentOS 6-7 alapúak.
Hozzászólások
Ezt nezd meg:
https://www.percona.com/software/mysql-database/percona-xtrabackup
+1
Mi Percona-zunk (néhol Percona XtraDB Cluster is), de backupra a jó öres mysqldump megy --single-transaction opcióval. SSD van alatta, megy rá egy targz és 1-2-4 óránként (ügyfél függő) van teljes dump. Megy. Mondjuk nem videokat streamelünk DB-ből, max 100-500Mb a targz-zett dump.
innodb inkrementális backup-ra ez jó. debian-ban benne van alapból és nem csak percona-val megy.
Ha biztonságos és gyors hálón eléri a backup gép az éleset, akkor inkább egy külön sql-re dedikált SQL juzert csinálnék és a backup gép tömörítene.
+1
A backup gépre mysql kliens. Ha a hálózat nem biztonságos, akkor tls-sel.
--
PtY - www.onlinedemo.hu, www.westeros.hu
Én minden adatbázisra csak a mentéshez szükséges jogokat tartalmazó userrel szoktam napi teljes mentést csinálni és a db szerveren tömöríteni. Ha ez megfekteti pár 10GB-ig akkor már nagy a tré a géppel. De igen, így javasolt.
Igen, ezt szoktam én is és igénytől/lehetőségtől függően esetleg a backup gépről indítani a dumpot. Ez utóbbiban sincs semmi izgalmas, gigás hálón átjön szépen a dbdump és utána a backup gép szüttyögjön.
Jaja, igaz, a backup gépről indítva még jobb, főleg ha a szkript képes egy megfelelő rotációra is, napi/hét, havi és heti / év mentéseket megtartani mert sose lehet elég verzió semmiből sem.
Szerintem bonyolult szkript se kell. Kapsz egy SQL dump-ot, ami egy szöveges fájl. Ezen kell futtatni egy backup-programot, ami tud mindent, ami kell.
Ki lett találva, hogy időspórolás és HW erőforrások megfelelő elosztása érdekében legyenek csak havonta teljes backup-ok, naponta viszont legyen differenciális backup.
nyugtass meg, hogy ez csak vicc akart lenni...
--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)
Ilyen az amikor a hozzá nem értő vezető találja ki, hogy mit csináljon a szakember :D Nem tippelek szférára.
Ha 2Gb adaton szarrágnak akkor nem tudok mit mondani csak rondát.
+1
Ahelyett, hogy azt mondaná: "Lehet ezen optimalizálni valamit? Legyen max 16 óra kutatás és 40 óra végrehajtás! Ezzel beleölünk havifizu/4 pénzt...spóroljunk vele legalább ennyit!"
Megnéztem a backup scripjeinket és eszembe jutott még valami:
Vannak nagy, felesleges tábláink: Activity vagy LogActivity, benne minden oldallátogatás. Ezek jók valamire, de nagyok ahhoz, hogy túl fontosak legyenek. Néha a DB fele ez.
Ezeket az óránkénti mentésből kihagyjuk, csak a napi nagy mentésben vannak benne. Már a felét megspóroltuk a méretnek...
mysqldump --skip-table=XXX
Nem lenne érdemes esetleg az Activity{Log} táblákból a nagyon régi elemeket(akár archiválást követően) törölni?
Érdekes, teoretikus kérdés. A mi álláspontunk erről:
- A tábla adatai fontosak.
- Nem csak az utolsó 6 hónap, hanem az utolsó 5 év is.
- A tábla adatai annyira fontosak, hogy az operatív 25GB mellett ez megér +25GB-ot (kb. 250GB SSD egy VPS-ben $30/hó)
- Az óránkénti mentést jelentősen gyorsítja ha ezeket kihagyjuk.
- Ha havaria van (ne legyen, mentés emiatt van, soha ne legyen rá szükség), akkor max az utolsó napi logból hiányozhat adat a restore után.
A zárójeled egy másik gondolatot indított el: akár csinálhatnánk azt is (köszi az ötletet!), hogy egy data-pump a különböző szerverek logjait folyamatosan pakolja egy dedikált LOG-gépre. Annak a mentése pedig az operatív adatoktól független lehet. Jó lenne SQL alapon logolni, mert könnyebb lekérdezni, de talán lehetne nosql is (mongo), ha a különböző szerverek különböző adatokat raknak el.
adott kornyezetben az is mukodhet, hogy egy slave-re replikalod az adatokat, majd amikor eljon a mentes ideje, akkor suspendeled a replikaciot, kiflush-olsz mindent (valahogy), aztan elteszed a mysql db konyvtarakat.
--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)
Nem teljesen erre gondoltam, de örülök, ha gondolatébresztő volt a kommentem. Ha nem túl sűrűn vannak lekérdezve az Activity{Log} táblák, akkor meg lehetne csinálni, hogy a "régi" rekordokat, amik kvázi statikusak, egy külön DB-ben (DW) tárolni, amiről nem kell óránkénti, csak napi mentés készüljön. Minden nap végén egy karbantartó folyamat legutna, ami a "régi" rekordokat áttolnná a DW adatbázisba. Aki pedig lekérdezéseket akar futtatni, az megteheti a DW-n, annak tudatában, hogy csak az előző napig vannak benne adatok.
http://dev.mysql.com/doc/refman/5.7/en/point-in-time-recovery.html
binlog segítségével lehet valami hasonlót elvégezni.
Vagy. LVM/FS szintű snapshottal történő mókolgatás.
De őszintén hagyd a fenébe, az egész ötlet beteg ahogy van. Ha csak nem akarsz mysql db-ben több jártasságot szerezni akkor ne foglalkozz vele. Ha helyet akartok spórolni akkor kell egy compress+dedup fs a tömörítetten dumpok tárolására azt csókolom. A 2Gb meg kerek 20 mp egy GB hálón.
LVM vagy FS szinten szerintem nem lesz túl konzisztens az adatbázis. :)
dehogynem: mysql stop elotte :-)
--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)
Hát nem. Az egész egy döglött macska futtatása.
Szerintem a konzisztencia - backupról van szó - irreleváns, ha tranzakciós DB-t mentesz.
Ugyanis, ha vissza kell állnod, mindenképpen veszíteni fogsz adatot. 5-6 perc ide/oda nem mindegy?
Egy InnoDB simán visszaáll a legutolsó konzisztens állapotra, ha a visszaállított fájlszintű "backup" nem konzisztens.
Nam hiszem, hogy nagyon sok olyan db van, ami megharagszik, ha MyISAM-ról InnoDB-re megy át.
--
PtY - www.onlinedemo.hu, www.westeros.hu
Attól, hogy egy adatbázis tranzakciós, még nem következik, hogy fájlszinten backupolhatod, anélkül hogy a táblákat lockolnád. Nyitott adatbázist menteni így felér egy orosz rulettel.
Miert?
mert a nyitott adabazisban egy nagy mennyisegu adat a buffer poolban lehet, ami nem garantaltan syncelodott meg ki az adatfileokba.
Ahogy mas irta, nem mind1 nehany masodperc?
Az én rendszerem alatt az a néhány másodperc 2-3ezer tranzakciot jelent nyugalmi idoszakban. :)
Azaz? Ket backup kozott meg (szaz)millios tranzakcio lesz vagy meg tobb.
Attól még az a 2-3k tranzakció sem veszhet el :-P
Mirol beszelsz? Nem, az a 2-3k fog elveszni, hanem a ket backup kozotti osszes.
Az _sem_, nem, hogy a többi :-P Normális esetben tud a DB olyat, hogy a lezárt tranzakciók adatait kitolja a diszkre, és amíg nem szólunk neki, addig a logba írja csak az időközben lezáródó tranzakciók okozta változásokat - hogy az adatfájl konzisztens maradjon, míg elmásoljuk/snapshot-ot csinálunk, stb.
Nana, hogy igen.
De banyek azert aggodik, hogy 2 csepp furdoviz meg a kadban van, de a gyerek mar reg nincs.
Najo, ez eleg huje hasonlat.
banyek, szoval?
Komolyan kerdezem, en igy csinalom es szeretnem tudni, ha rosszul...
Snapshotból csinálod a mentést? Próbáltad már visszaállítani a mentést? És ellenőrizted is az adatokat?
Ja, de az semmit nem jelent, ha a lehetosege fennall a gebasznak.
A tábla lock biztosan azt jelenti, hogy ki is ír a diszkre egy konzisztensz állapotot? :)
Jogos. Eszembe sem jutna így menteni adatbázist, ezért csak félig gondoltam végig. :)
miért ne lenne konszisztens? erről szól a fs snapshot... (zfs, btrfs...)
FS szinten konzisztens lesz, de egy MyISAM táblánál vagy bárminél amiben nincs tranzakció naplózás ez egyáltalán nem biztos, hogy adatbázis szinten is értékelhető. Egy postgres vagy innodb jó eséllyel visszaáll, de az igazi mindíg a saját natív mentőeszközt használni. Sokmindent mentek LVM snapshot alapon, de adatbázisokat mindíg dumpolgatok, ahogy a nagykönyvben van.
aki myisam-ot használ 2015-ben, az valószínűleg nem akar napi inkrementális backupot és valószínűleg nem fontosak az adatai.
amúgy már rég innodb a default storage engine a mysqlben...
:) Hát és még mennyi legacy cucc fut vagy mennyi olyan van, ahol a db sémában fixen myisam van beégetve... Természetesen bármilyen változás óriási sikítás hogy jajjmindenelromlik és "már megint" minek kell "mindent" megváltoztatni. Olyan apróságok, hogy amit használnak régen nem supportált, elavult stb. az falra hányt borsó.
+1 for "jajjmindenelromlik és "már megint" minek kell "mindent" megváltoztatni"
Ennél van durvább is: alkalmazásban használják az "ls" parancsot egy rakat kapcsolóval paraméterezve - aminek a kimenete a dátum/idő mezőkben nem azonos a friss ls által produkálttal. (Amit használnak, az a fileutils-ból a 4.1, miközben a coreutils-ból az 5.97 az aktuális). Lecserélni, kódot módosítani nem lehet - a régi, 32 bites "ls" binárist kell felmásolni minden érintett gépre, és a PATH-t úgy beállítani az alkalmazás alá, hogy ez a f0s hamarabb legyen, mint a "gyári" ls...
Pedig a --time-style használatával megoldás is lett volna a problémára, de nem, mert a fejlesztő így adta át a kódot és kész...
Ez megy a takinfo-nal? Vonzo:)
sub... :P
Lehet megérné írni egy patch-et a coreutils-hoz, hogy a benne lévő kurrens ls paraméter nélkül adja meg a kimenetnek a szükséges time-style-t...
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."
Ha már szóba jött...
Mik azok a feature-ök, amik nem engedik meg, hogy egy generálisan régi, MyISAM-os db-t áttegyen a jóember InnoDB alá?
Mellékesen jegyezném meg, hogy lehet szídni a MyISAM-ot, de alacsony táblaszám és relatíve kis méretű táblák mellett erőforrástakarékosabb.
--
PtY - www.onlinedemo.hu, www.westeros.hu
Ezt ne tőlem kérdezd. :) Én tudom, hogy átpakolható. A baj ott lesz, ha mondjuk csinál egy website reinstallt majd a séma megint MyISAM-os. Nekem speciel a MyISAM-mal sincs bajom, valóban takarékos az InnoDB-hez képest és az innodb buffert se kell az egekbe emelni. :)
Nem kifejezetten Tőled kérdeztem :)
DB-t meg ne pakolgasson senki csak úgy hébe-hóba a tudtom nélkül.
--
PtY - www.onlinedemo.hu, www.westeros.hu
Hogy lesz abbol *megint* myisamos sema?
Mert így indul a dbdump, amiből visszatölt: DROP TABLE x; CREATE .... ENGINE=MyISAM; :)
sed 's/MyISAM/InnoDB/g'
--
PtY - www.onlinedemo.hu, www.westeros.hu
Én nem tudok belenyúlni abba, ami a juzer betölt magának és igazából nem is akarok. :)
Ha phpMyAdmin alól tölti fel, abba pont bele lehet nyúlni :)
Ha konzolja van, az már más.
--
PtY - www.onlinedemo.hu, www.westeros.hu
A migrálást követően nem lehet kikúrni a myisam támogatást kompletten? Akkor többet nem tölt be ilyet :D
mysql.* semaja tovabbra is mysql ezert kell.
Vagy azt is at lehet convertalni?
Regex-szel ki lehet ölni (replace is elég) az "Engine=myisam" dolgokat és akkor a szerver beállításai szerinti (mondjuk InnoDB) táblastruktúra jön létre.
Ja ertem, azt hittem arrol van szo, ha backup-bol allitodik vissza. Amugy a thread elvileg arrol szol:P
de ha a dumpot innodb-s tablakkal csinalja, akkor a visszatolteskor is az marad.
Akkor kifejtem. :) Arról volt, hogy LVM snapshot alapú mentés jön és az nem biztos, hogy az FS szintű db mentést rendesen konzisztensen viszi. Erre jött a válasz, hogy a innodb elviseli, mert megfelelően kezeli a helyzetet. Nekem még elég sok MyISAM formátumú DB-hez van szerencsém, amikkel különösebben nem akarok foglalkozni és hiába passzírozom át őket InnoDB-re mondjuk most, ha a juzer magának létrehozza újra a tábláit bármiért az eredeti sémája szerint, akkor megint MyISAM lesz. Legalábbis ahol fixen bekerült az ENGINE=MyISAM a tábladefiníció.
Tudomásom szerint a fulltext search nem megy innodb alatt, csak myisam-mel.
Igen, valami ilyesmi rémlett.
--
PtY - www.onlinedemo.hu, www.westeros.hu
~5.6 óta már innodb-vel is megy.
Kösz, ma is tanultam valamit.
+1
--
PtY - www.onlinedemo.hu, www.westeros.hu
ha fulltext search kell, akkor jobban jarsz sphinxsearch-csel...
--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)
Ja, én nem használom, csak ez az egyedüli olyan feature (volt), amit nem tudott az innodb.
legalabbis mysql 5.6 elott. Az 5.6-os verzioval tokeletesen mukodik.
Na ne basz, erről szól a Write-ahead log, hogy de, legyen már konzisztens. MSSQL konkrétan úgy backupol, hogy VSS-el csinál egy snapshotot az adatbázis fájlról...
http://www.postgresql.org/docs/9.1/static/wal-intro.html
http://dev.mysql.com/doc/refman/5.7/en/binary-log.html
https://technet.microsoft.com/en-us/library/ms186259%28v=sql.105%29.aspx
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
Itt most mysql a kerdes, amiben boven lehet myisam tabla is.
Jó, aki tökön akarja szúrni magát, az tegye. Ettől függetlenül a snapshoting egy életképes megoldás, amennyiben nem retard módon van felépítve a DB.
(Mondjuk halkan jegyzem meg, hogy a MySQL-el az utolsó tapasztalatom az volt, hogy még azt sem képes ellenőrizni, hogy elfogyott-e a lemezhely alóla és csini hibaüzenet helyett inkább összeomlott és lehetett mysql repair tablet nyomni, míg a PostgreSQL ilyenkor rollbackelte az utolsó tranzakciót, kiírt egy hibaüzit a logba - külön köteten volt - és nem egy összeomlással zárta a napot.*)
((*Azt most ne feszegessük, hogy miért fogyott el a lemezhely. Csak. Balesetek előfordulnak.))
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
A monitoring telerottyantotta azzal az üzenettel, hogy fogytán a hely :-P
Mysql innodb nekem is leallt emiatt, de rollback volt, vagyis megjavitotta onmagat. Miutan ujra elinditottam, mert leallt
Nem csak egy snapshot-ot csinál VSS-el, hanem a VSS hívja meg a SQL Writer Service-t, ami "csitatja" a DB-t. Ettől lesz konzisztens.
+1, ha szól valaki a DB-nek, hogy mostan snapshot jön, akkor rá tud készülni - de nem ez a normál üzemi állapota.
Pontosan
LVM/FS snapshottal konzisztens lesz (pont úgy fog kinézni, mintha a gép megállt volna a snapshot pillanatában, és nyomtál egy rebootot - ebből egy rendes tranzakcionális adatbázisnak fel kell állnia). Csak annyi a feladat, hogy a _teljes_ adatbázisra egyszerre készüljön a snapshot. Ez ugye nem triviális, ha nem egy fájlrendszeren/volume-on lakik az egész.
Viszont snapshot nélkül (tehát ha csak szimplán elkezded a fájlokat/diszket a futó, módosuló adatbázis alól kimásolni) jó esélyed van arra, hogy korrupt legyen a mentés, és ezen az innodb sem segít.
Erről van valakinek gyakorlati tapasztalata?
Van egy KVM -en futó Win+MSSQL adatbázisom, amit menteni szeretnék, de semmilyen adatbázis hozzáférésem sincs.
Adná magát az LVM snapshot, de kipróbálni sem tudom a visszatöltést.
A sima LVM snapshot gyakorlatilag olyan, mintha fizikai gépből kihúznád a tápot. Nem lehet tudni, hogy mi éli túl, mi lesz inkonzisztens, mi sérül meg.
Eleg baj, ha arra nem keszult fel, nem?
Ha tudnád, hogy hány sw nem viseli el, ha kikapcsolod alatta a gépet...
Persze egy rdbms esetén ez azért durva dolog lenne, de "mezei" alkalmazások rendszeresen fosok ilyen szempontból.
Igen, leginkabb az rdbms-re es az OS-re irtam a konkret esetben.
Tudsz irni peldat service alkalmazasoknal, amelyik nem birja?
Inkább régebbi tapasztalás volt ez, amikor még nem volt divat boldog-boldogtalan alkalmazás alá külső rdbms-t rakni. Ha az alkalmazás fájlokban tartja a cuccait, és nem tisztán adatbázislibet használ erre (pl. libdb.so, libgdbm.so), akkor ott nagyon gyorsan felmerülnek a kétségek (régi HP NNM, 46020, hogy a két "kedvencemet" emlegessem).
Azt mondjuk sosem mertem megnézni, hogy ha random Linux alatt pl. package telepítés/frissítés közben nyomok egy resetet, akkor mi történik. Nem tartom kizártnak, hogy esetleg ilyenkor lehet elővenni a backupot/install médiát, mert menthetetlen lesz a cucc.
> Inkább régebbi tapasztalás volt ez, amikor még nem volt divat boldog-boldogtalan alkalmazás alá külső rdbms-t rakni.
OK, de ez ne legyen mar a felsoroltak mellett:)
Amugy igy erzesre az sem szabadna, hogy inkonzisztens legyen. Napi backuprol van szo, sorban az utolso commmitok elveszhetnek, csak legyen konzisztens.
> Azt mondjuk sosem mertem megnézni, hogy ha random Linux alatt pl. package telepítés/frissítés közben nyomok egy resetet, akkor mi történik. Nem tartom kizártnak, hogy esetleg ilyenkor lehet elővenni a backupot/install médiát, mert menthetetlen lesz a cucc.
Szerintem meg annak sem kene problemaznia.
Nade épp ez az: default beállításokkal a fájlrendszerek nem garantálják az I/O műveletek sorrendiségét egymáshoz képest (sem egyik fájl-másik fájl, sem egyik fájl-másik fájl/könyvtár metaadata vonatkozásban, de talán még talán a fájl és az ő saját metaadata vonatkozásban sem). Értsd: létrehozol egy fájlt, meg belemódosítasz egy másikba, és lehet, hogy az első fájl elveszik, a második módosítás meg megmarad. Ez minden, csak nem konzisztencia.
Épp ezért raknak az RDBMS-ekbe naplózást, aminek hatására:
- Nem lesz meg minden adat, ami kiküldtél a HDD-re (!!!)
- De konzisztens marad az adat (egyben kiküldött (egy tranzakció) adatok egyszerre fognak kiíródni vagy elveszni)
Ha a naplófájl sync-kel kerül kiírásra (mysql beállítás, hogy mennyire legyen "sync": OS vagy disk szinten), akkor a fentiek elégségesek, gyakorlatban mindegy egy visszaállításnál, hogy az utolsó 30mp megvan-e vagy nincs. Ha a sync nem okés (nincs sync vagy SSD-nél kiment a sync, de az áram elkóborolt...), akkor a naplózó DB sem lesz jó. De általában az is javítható, max találsz egy létező számlát, aminek nincsenek meg a tételei (vagy fordítva, foreign key failed). De ez olyan ritkán fordul elő, hogy inkább kifizeted a szoftveres munkáját, mint hogy földbe ásd a szervert RAID-10-zel, külön aggregátorral.
Mindig a mérlegelés dönti el, hogy mi éri meg...
Nem teljesen ertem.
Szerverekrol van szo. Amennyibe ez erdekes, akkor az alkalmazasnak meg kell gyozodnie, hogy jol csinalja.
Amenyiben az FS nem hazudik szandekosan (javits ki, de ilyen nincs default beallitasnal), akkor minden jonak kell lennie.
De ha megis, ne hasznalj default beallitast.
Te nem keszited fel a szerveredet varatlan leallasokra? Ha van UPS, ha nincs, en nem szoktam ra szamitani.
De bevallom, mindig tovirol hegyire nem szoktam utana jarni. Remelem, nem lesz belole gond.
Ha nem bugos az FS, a driver, a firmware es a tobbi es azt teszi, amit mondanak neki, akkor nem lehet problema.
Ezek kozul azert jellemzoen szokott lenni gebasz en megsem talalkozom surun ilyennel.
De megegyszer, azt nem mondanam, hogy 100%-ig mindig minden esetben megbizom bennuk. De ahol ez gond es szamit, ott mar ugyis meg kell oldani tisztessegesen (= pl. dump).
Amennyibe ez erdekes, akkor az alkalmazasnak meg kell gyozodnie, hogy jol csinalja.
Amenyiben az FS nem hazudik szandekosan (javits ki, de ilyen nincs default beallitasnal), akkor minden jonak kell lennie.
Az alkalmazás nem teszi. Feltételez olyan dolgokat az írója, amiket a FS alatta nem garantál default beállításokkal, de mondjuk egy hard reset/crash pillanatáig nem is derül ki, akkor is csak attól függően, hogy éppen mennyire tekert az alkalmazás (ha éppen üresen ketyegett, akkor megintcsak nem történik semmi), illetve mekkora volt a mázlifaktor. Nyilván aki RBDMS-t fejleszt, az azért nagyjából tisztában van ezekkel a fogalmakkal, de aki mondjuk egy telkó eszközhöz ír felügyeleti szoftvert, az esetleg teljesen clueless lehet a témában.
Akkor megoscsak az sw-ben van a hiba.
Azaz szarbol nem lehet varat epiteni es sysadmin level szintjen lehet mwgoldani workaroundolva.
Amugy konkretan mit feltetelez?
Megjegyzem, a dba srac nalunk epp a multkor mondta, emc storage, snapshot, es nem ment a recovery, Oracle-vel.
De ezt en nem akarom elhinni.
Ott jott elo a tema, h mire jo a zfs snapshot, mire nem.
A snapshot-ot úgy képzeld el, hogy kirántod a gépből az összes tápkábelt. Na ezt nem minden esetben éli túl egy RDBMS. Sem.
+1
Egyébként Google jó barát: https://www.percona.com/blog/2006/08/21/using-lvm-for-mysql-backup-and-…
Orákulumul meg valahogy úgy hangzik, hogy alter database begin backup/end backup - bár marha rég volt, amikor ilyennel is foglalkoztam :-) A lényeg, hogy szólni köll az adatbázisnak, hogy próbáljon jó képet vágni a snapshothoz, és a diszken igyekezzen konzisztens állapotot létrehozni :)
Nem fog. Se jó képet vágni, se konzisztens állapotot létrehozni. Mármint abban az értelemben, hogy ha visszatöltöd a db fáljlokat és az instance ráindul, akkor a szívéhez kap, és sértődötten közli, hogy physical recovery needed. Asszem (10+ éve volt :D). A begin backup annyit csinál, hogy mint állat elkezdni írni a redo log fájlt (is), abba is elhelyezve mindent, amit amúgy a db-be írna. A db fájlok mentés közben meg is fognak változni. Az eleje még a 131231-es SCN-en van, de a vége már mondjuk 131235-ön (+4). Ezért az alter database end backup után (utána célszerű :D) le kell menteni a redo log fájlokat is. Ebből fogja majd helyrepofozni a csálé blokkokat.
Persze lehet futtatni a db-t archivelog módban is, akkor lehet tekergetni ide-oda az időben. Ezt pl. tudja mysql is (nekem már mentette meg az életemet, hogy a delete from elé el tudtam tekerni mentésből).
Remélem jól emlékszem, ha nem, akkor majd egy dba kijavít. A lényeg, hogy a lementett db marhára inkonzisztens (mert mentés közben írható és íródik is), de javítható. Annó kifejezetten féltem (rettegtem) ettől a megoldástól, de 10+ helyreállításból egyszer se volt gond belőle.
Persze, így teljes - nem véletlen, hogy külön tanfolyás volt mentés és helyreállítás témában Oracle-höz... Az archivelog mód számomra alap. A fájlok önmagukban nem lesznek 100%-ban konzisztensek, de a teljes fájlkészlet, ha betartja az ember a mentési eljárás lépéseit, akkor konzisztens állapotra hozható.
A lényeg annyi, hogy ha az RDBMS nem tud arról, hogy mentik a fájlokat, akár snapshot-tal egyszerre, akár úgy, hogy raid-tükörből kihúzzák az egyik diszket (ilyen ötlet is jött szembe, de arról gyorsan lebeszéltük a delikvenst), akkor egyáltalán nem garantálható, hogy a diszken olyan állapot lesz, amiből értelmes ráfordítással élő, működő adatbázis rittyenthető.
Ööö.... az alter system switch logfile (flush logs) annak számít hogy tud róla? :D Utána kéne olvasni, de kb. az rémlik, hogy amíg van egy kiinduló állapot - "full mentés" - a db-ből, addig elég a logfile-okat menteni - "inkrementális mentés" -, mert helyreállítható a cucc. Nem kell bűvészkedni snapshottal, read lockkal, ésatöbbi.
A checkpoint kényszerítése az egyik része a dolognak. A "ha van full backup, akkor csak a logokat kell rápakolni" jól hangzik, de... Kellően bőséges archivelog bedolgozása azért kellően hosszú ideig is tarthat (a mennyiség alapján azért becsülhető idő alatt). Úgyhogy "néha" azért kell full backup - az alter database begin backup egyébként emlékeim szerint pont egy kikényszerített logváltással indít - de nekem is utána kéne olvasnom.
Melyik?
Melyik igen? Nem azt írtam, hogy kötelezően maga alá rondít mindegyik és minden ilyen esetben, de messze nem lehet garantálni azt, hogy elfogadható időn belül konzisztens állapot lesz a snapshot-ból. Márpedig menteni azért ment az emberek értelmesebbik része, hogy a mentésből könnyebb legyen újraépíteni a rendszert, mint a romokat helyrevakarni.
Melyik sw?
RDBMS nevu sw-t nem ismerek.
Eddig azt gondoltam, hogy elég nagy vagy már a Google használatához, de segítek: http://goo.gl/Zrs5AH
OK, szoval azt mondod, igy van barmelyik eseten.
Fennhejazas nelkul is lehet:)
Szerintem nem tekinthető RDBMS-nek az, ami nem él túl bármikor egy hard resetet/tápelvételt, illetve ennek megfelelően egy snapshotból visszaállást. Vagy egy shutdown abortból hasonlóan.
Azt írtam, hogy nem minden esetben éli túl. Ez azt jelenti, hogy lehetséges olyan állapot, aminél elvéve a tápot bizony értelmes időn belül nem fogod tudni a romokból feléleszteni a rendszert. Elméletileg lehet, hogy nincs ilyen, de a gyakorlat sajnos mást mond. A mentésnek meg illendően úgy kell elkészülnie, hogy ilyen probléma ne lehessen vele.
A shutdown abort az a lemezen rendet hagy maga után - az agyonvágott tranzakciókkal együtt; ez utóbbiak csak a logikai konzisztenciát törik meg - azt meg az induláskor szépen ki lehet gereblyézni.
A shutdown abort pontosan egy kill -9. Egészen biztosan nem küld ki már több I/O-t a szoftver.
Amennyiben ez különbözik a tápelvételtől, akkor valahol valaki valamit hibásan csinál = nem tartja be az ígért garanciákat, vagy olyat próbál kihasználni, amit nem ígértek meg neki. Ezt én simán bugnak nevezném.
Nem pont az. Tranzakciók szintjén az (nem görget vissza - az majd az indulás utáni feladat lesz), de a cache-elt adatok kimennek a diszkre, a fájlokat lezárja, és utána lép ki.
Igen, errol beszeltem en is.
Es en azt az allapotot mar konzisztensnek nevezem, amikor ossze tudja kaparni magat.
Akkor megoscsak az sw-ben van a hiba.
Hát kb. innen indultunk :D
Amugy konkretan mit feltetelez?
Pl. hogy ha két fájlt módosít, adott sorrendben, vagy egy fájlt módosít, egy másikra meg FS műveletet végez (create, rename, stb.), akkor ezen műveletek végrehajtási sorrendjével ellentétes sorrend nem fordulhat elő a diszk I/O szintjén. Azaz feltételezi, hogy nem állhat elő olyan állapot, hogy a második műveletet a diszk végrehajtja, az első meg elveszik. Pl. létrehozunk egy fájlt (mondjuk egy upload form kapott egy fájlt), majd miután kiírtuk és lezártuk a fájlt, beírjuk egy másik (text) fájl végére a nevét. Ha a text fájlban ott a sor, de a fájl "eltűnt", akkor hasra esik a sw.
OK, de altalaban az fs-ek igy csinaljak, nem?:)
Ez érdekes amit mondasz. Úgy gondolom, hogy ha nem garantál az FS semmit, akkor csak sync a megoldás. Vagy az, hogy tudjon a sw róla hogy mi került ki sync-kel a disk-re sikeresen. Ez tudható vajon?
Erre való az fsync(), nyilván az sw írójának használnia is kell.
Ez nem evidens, mert ugye a sync lassítja a gépet. Tehát ha nem abszolút kritikus az adat (ahol egyértelmű a sync használata), ott már érdekesebb a kérdéskör, ha szeretnénk hogy gyors is legyen a művelet a szoftverben.
Hát van async io (POSIX aio), O_DIRECT-tel kiegészítve az már elég a fájl tartalmára vonatkozóan, illetve a több fájl egymás közti konzisztenciájához, így a performanciával sem lesz gond. A fájl metaadatokat illetően viszont szerintem nincs API erre, tehát az marad a lutri, vagy a sync() az egész gépre...
Más fájlrendszerek alatt sem tudni ilyen feature-ről vajon? Hamar hirtelen belegondolva egy olyat tudnék elképzelni kernel oldalról, hogy a folyamat által nyitott file descriptor-okra adhatna jelzést egy flag-gel, hogy ezek kiíródtak fájl és meta adatokkal együtt sikeresen.
Bár ugye még ott van ezen felül a gyorsító memória pufferek kérdése, melyek lehetnek lemezen, illetve raid kártyákon vagy egyéb vezérlőkben. Az lenne a jó, ha a backend disk vagy tároló tudna visszajelezni, hogy az adatok sikeresen eltárolódtak.
Mindenesetre nagyon érdekes a kérdéskör.
Abból adódhatnak problémák :) A napokban abba szaladtam bele, hogy CentOS-en megszakadt a frissítés (már a cleanupnál, tehát a csomagból jövő fájlok a helyükön), utána bootkor kernel panic. Korábbi kernel elindít, akkor láttam, hogy a kernel ott van a helyén, a grub már meg is találta, hogy ott van a kernel és úgy gondolta, hogy akkor initram is biztos van - csak persze nem volt... (dracut oszt öröm és bódogság)
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
Amíg egy DVD 4.7GB és 299Ft, addig nem szempont a HW spórolás...
Az (olcsó) optikai adattárolók nem éppen a megbízhatóságukról híresek (hosszú távon különösen nem).
A HDD/SSD is ilyen árban lehet, csak szemléltetni akartam, hogy a tárhely mérete nem lehet akadálya egy PROFI megoldásnak. Nem profi esetben persze a CPU-t is cserélhetjük TexasInstrument processzorra..
Profi megoldás ott kezdődik, hogy enterprise hdd, azok közül is valami 15krpm SAS lemez, amiből mondjuk egy 600 gigás olyan 120-150k HUF+Áfa
(Ha brand storage van ráadásul, akkor oda ilyen lemezek brand változatai jók csak, az árcédula meg 2-2,5x szorzóval értendő.)
Ezek is RAID10-ban, bár backup esetében kiegyezek RAID5-6 vagy azzal ekvivalens megoldással (RAIDZ1-2 pl.).
Tehát nem jól szemléltetted, mert consumer wd green és tsai lemezeket (amik kb analóg kategória az általad említett olcsó optikai adathordozóval) akár backup-szerverbe is rakni, nem a PROFI megoldás, hanem a GÁNY megoldás.
Esetled ha háromszor annyit raksz belőlük, és csoportonként 3 lemezt RAID1-ba teszel, a csoportok fölé meg kihúzol egy RAID6-ot, akkor esetleg. :) (persze ez csak vicc volt, de remélem átjön a probléma...)
Senki nem használ 15k SAS diskeket backupra.
(Mellesleg manapság senki nem használ 15k SAS diskeket semmire)
A zárójeles megjegyzésedre azért ne vegyél mérget... :-P
tenyleg?
akkor holnap en is kodobom mindet a serverekbol.
meg a 10k 2,5"-osoket is a storagekbol.
mit tegyek a helyukre, Mester?
Ne dobd ki, de új beszerzés esetén értelmelten, mert árban a flash drive-okkal vannak egy szinten, de teljesítményben messze elmaradnak. És ezt nem én mondom, hanem pl Larry Ellison (ha kell, kikeresem a keynote részletet), vagy éppen a HP:
https://www.linkedin.com/pulse/20140721193344-18391615-have-we-hit-a-fl…
"Mester?"
A stílus maga az ember.
Nekik eladó a motyó :-) A karos diszk már bőven behozta a belefeccölt fejlesztési erőforrásokat, az új, "picit" drágább ssd még nem.
Egyébként van abban valami, hogy új beszerzés esetén tényleg el lehet azon gondolkodni, hogy karos diszkből raid 10 jellegű tárolás, vagy ssd-ből mondjuk raid5/raid6. Azokat a régi alapvetéseket, hogy ami gyors/nagy iops-ot nyújt az a raid10, ami meg f0s lassú az a raid5, meg a raid6, azt ssd-nél szerintem el lehet felejteni.
nem hiszem, hogy igy van. a RAID10 barmin gyorsabb, mint a RAID5/6 ugyanazon, SSD-n csak a nagysagrend mas a HDD-hez kepest, de boven vannak, akik az SSD-k sebessegkorlatait feszegetik.
Nem biztos, hogy ki tudod mérni, hogy gyorsabb. Ha elég gyors a vezérlő vagy a szoftraid megoldás, akkor könnyen lehet, hogy a RAID5/6 adott vason ugyanolyan lesz, mint a RAID1+0.
+1 Komolyabb storage esetén sem biztos, hogy a mérhető különbség ér annyit, amennyivel több SSD kellene ugyanannyi nettó kapacitású raid1-hez, mint raid5-höz.
pont arra probaltam utalni fentebb, hogy ezt teljes mertekben az alkalmazas donti el es biztosan van, akinek az az elhanyagolhato kulonbseg is fontos. ami neked 5 ezrelek teljesitmeny, az masnak ketmillio sor orankent a megrendeles-adatbazisaba.
Ahol elsőre az SSD-ből összerakott raid-tömb felépítéséből adódó sebességbeli különbség a probléma, ott sem biztos, hogy költség oldalról az n+1 helyett 2n darab ssd a jó megoldás - láttam én olyat, hogy az alkalmazás hangolásával, itt-ott jelentősebb átírásával, addig nem használt technológiák bevezetéséven a "sebességben kinőttük" hardvert tovább tudták használni. Kiszámolták, hogy a storage átalakítása többe kerülne, mint a szoftver részleges újragondolása.
Nem azt mondom, hogy nincs olyan workload, ahol számít, hogy milyen elven áll össze a logikai diszk a fizikai meghajtókból, csak azt, hogy SSD-k esetén nem a tömb nyers I/O-teljesítménye az, ami csúcsra járatva a storage-ot elsőként fog elfogyni. Szerintem...
en ezzel a mondattal nem ertettem egyet, kicsit eltavolodtunk tole, ami nem baj, csak mondom.
persze, en is lattam mar nem optimalisan megirt alkalmazast, ahogy nem optimalis adattarolast is es minel nagyobb a storage, annal olcsobb a fejlesztesi oldalon modositani. a komoly adattarolas amugy sem a RAID-rol szolt sosem.
mellesleg nemreg atment a kezeim kozt egy marketinganyag, amiben SAS SSD-kbol allo Ceph clusterben NVMe SSD-ken voltak a journalok es annak is volt megadva maximalis teljesitmenye, szoval barmit ki lehet koppantani a jelek szerint:)
Hát, mostmegnéztem azért, hogy ez tényleg így van-e:
-15krpm 600GB LFF SAS disk 120ezer Ft körül van.
-Intel SSD DC S3500 600GB pedal 230-240ezer Ft körül.
Azért egy nem egy szint, azt SSD kb. a duplája.
Nálunk van egy 8x15k rpm-es SAS zfs RAID10 tömb, 10g iSCSI-n csatlakozik egy vmware host-hoz. Van rajta kb. 18 virtuális gép, amiből kb. 10 az ilyen VDI megoldás, egy fileserver, meg kisebb szerverek (adatbázis, firewall, proxy, stb.stb.).
Egyáltalán nem lassú semmi se, nem tudom, miért lenne jobb kb. 1.000.000 Ft-tal többért SSD-t venni a 8 darab 15k rpm SAS helyére.
Ha tennék is bele SSD-t, akkor azt is max. ZIL LOG-nak tudnám elképzelni, esetleg ARC cache-nak, de talán az is pénzkidobás, mert sok RAM van a zfs gépben.
Összegezve árban rohadtul nincsenek egy szinten, teljesítményben papíron persze, hogy sokkall jobb az SSD, gyakorlati hasznosításban nálunk, és még biztos sok helyen, nem hoz annyi plusszt, hogy a teljesítménybeli fölény marginális legyen.
Árban a duplája, lehet. (Bár erre még visszatérek.)
Csak az intel SSD-re az intel ezt írja:
Random 4KB Reads: Up to 75,000 IOPS
Random 4KB Writes: Up to 11,500 IOPS
A 15k-s vinyóból mennyit is tud random IOPS-ben? Párszázat?
Mert van olyan workload, amikor az számít, a helyigény pedig nem olyan nagy. Iyen esetben veszel mondjuk 2 db 600-as SSD-t mirror-ban, és ez simán úgy teljesít, mint 10-20, vagy akár 50-100 15k-s vinyó. Ez utóbbiból persze nem kell 600-as, simán elég a jóval kisebb is, de még úgy is sokkal drágább lesz.
És vissza az árra. Ha nem 600-as SSD-t veszel, hanem 300-ast és azt rakod raid0-ba, akkor 2x82k-ból megúszod (bruttó kisker ár), ami már alig drágább a vinyó 120-ánál. Mondjuk ez SATA és nem SAS, de még így is sokkal jobb.
De terás samu 850 pro-t is látok árlistában bruttó 140 alatt, ez pedig minden paraméterben jobb lesz a vinyónál, Ft/GB arányban is.
En elgondolkoznek, h miert annyi.
Nyilván azért, mert nem enterspájz gréd cucc.
Persze vehetsz olyat is, 3x-5x annyiért, én nem beszélnélek le róla. Ha az IOPS számít, akkor még az is sokkal olcsóbb lesz, mint ha ugyanazt összerakod bármilyen tengelyes HDD-s raid cuccból.
Fileserver hány userre? Ez a "nem lassú" ez relatív azért.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
en lattam mar olyan storage-ot, ami igen...
--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)
Ahogy elnézem, jelenleg kettő dolognak van értelme:
1) olcsó 2-3-4+ Tb-s SATA diskeknek, ha tárhely kell.
2) SSD-nek.
Ha sebesség kell, kiröhögik az SSD-k a 15k-s SAS diskeket, ha tárhely, akkor meg az ára miatt. Profi-e vagy sem.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
igen, de ha PROFI megoldas, akkor nem consumer lakossagi SSD nyilvan, hanem enterprise-grade.
az meg megint nem a 299 Ft-os DVD lemezzel ekvivalens kategoria.
egyebkent hol rohogik ki az SSd-k a 15k SAS diszkeket árban?
IOPS/$-ban biztosan.
Nincs mindenhol igény a »PROFI« megoldásra. Nekünk pl. 6x3T WD Red van egy gépben raidz2-ben, backupra. Működik nincs vele baj. Ha kihullik egy disk, akkor meg gyakorlatilag végtelen mennyiségben áll a polcon úgy is. (Igaz, megvan az az előnyünk, hogy egy nagyker vagyunk.) Igényeket kielégíti ez is _bőven_.
DVD-t meg hagyjuk, archiválásra se igazán használnám, túl sok macera, Ft/Gb-ben is piszok drága.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
299??? Ha Te ennyiért veszed akkor szívesen lennék hozzád DVD szállító :D
Szia!
Ha kész az inkrementális MySQL mentés megoldásod, akkor ha használod és kipróbálod, leírhatnád a tapasztalataidat a visszaállításról, és hogy miként működik az inkrementális mentés alapvetően és hogy mennyire vállt be.
Olvastam erről a binlog-os megoldásról, de nem találkoztam még ilyennel a gyakorlatban.
Nekem nem tűnik jó ötletnek.
Esetleg javaslom mint alternatíva átgondolni az aszinkron MySQL replikálást a backup gépre.
Vagy ha nem fontos a folyamatos működés, leállítod a MySQL-t, majd rsync a backup gépre, majd ha kész, elindítani a MySQL-t.
Ezt az utóbbit csak retro fun megoldásként javaslom :)
Én a teljes dump-ot javaslom, vagy amit már többen javasoltak, hogy a backup gépről lépjen be az SQL kliens, az úgy a leggyorsabb, ha elég gyors a net a gépek között.
Sakk-matt,
KaTT :)
Vagy, ha nem az idő, hanem a méret a lényeg, akkor a full beckup és az aktuális között egy diff (feltéve, ha az insertek soronként vannak).
--
PtY - www.onlinedemo.hu, www.westeros.hu
Ez is érdekesen hangzik. Mondjuk egy 5 GB-os dump-ra én nem szívesen eresztenék diff-et.
Sakk-matt,
KaTT :)
Ha van két kész dumpod, amivel ráérsz játszani, nem mindegy? :)
--
PtY - www.onlinedemo.hu, www.westeros.hu
Egészen addig, ameddig nem IO hiányos a rendszer de.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
Az IO hiányos rendszer jellemzően IOPS-ban gyenge, ehhez meg az nem kell.
Backuphoz? Haha, egyik géppel rendszeresen volt abból problémánk, hogy a PostgreSQL nekiállt backupolni éjjel úgy ~40-45 Gb-nyi adatbázist és időnként komolyan veszélyeztette a backup az oldal működését, akkora IO-t generált a diskeken. 4x10 vagy 15kRPM SATA disk ftw.
Öröm volt migrálni a DB-t arról a gépről egy újra, amiben végre volt külön SSD storage az adatbázisnak. (Sajnos az oldal még onnan fut, de az nemigazán csinál nagy IO-t, max a static tartalom, de az a DB-hez képest lóf...)
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
Négy tengely komolyabb terheléshez marhára kevés, pláne, ha duplán használod (olvasol és írsz is rajta egyszerre nagy mennyiségben). Sajnos a legtöbben csak az elérhető hely méretére szokták kalkulálni a diszkeket, ami otthon/kkv szektorban elmegy, de nagyobb terhelés esetén iops-ra köll lőni - inkább sok kisebb diszkkel, mint kevés naggyal. (A méret adja a helyet, a tengely meg az io-teljesítményt...)
Mentségemre szólva, nem igazán volt beleszólásom, hogy mit raknak alánk. Mikor meg már felmerült, hogy ezt talán most már igazán rendbe kellene tenni, eszünkbe se jutott HDD-ben gondolkodni a DB alatt.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
Jol hangzik. Tenyleg rakjak be 7db kis 10k hdd-t valami raidbe es jobb lesz mint 1TB hdd.
Ssd eseten is szamit a tengely?
Az áramfogyasztása, hőtermelése biztosan jobb lesz :)
Elég sok ára van a sok kis HDD-nek az 1 naggyal szemben, csak kérdés, hogy megéri-e.
Sakk-matt,
KaTT :)
Meg az egységnyi idő alatt elvégzett I/O műveletek számában is, és storage méretezésénél ez is legalább olyan fontos, ha nem fontosabb, mint a nettó méret.
nyílván de közel sem annyira, mert úgyis az interfész/vezérlő/whatever lesz a szük keresztmetszet, nem az SSD.
Az NVMe SSD a megoldás erre. :)
Válaszoltam. :)
Na sziasztok!
Elnézést kérek, hogy csak dobtam ide egy topicot aztán ide se bagóztam, de annyira belemerültem a probléma megoldásába, hogy csak oda koncentráltam. :) Vegyük sorra akkor, hogy Miért, Mit, Hogyan.
Miért:
- A VPS-ek csak minimális webkiszolgálók, nem rendelkeznek nagy erőforrásokkal. Egy 1GB-os SQL import is képes megfektetni, akárcsak az dump. Ilyen "erőforrás igényes" folyamatokat pedig nem engedhetünk meg napi szinten mert a honlapnak működnie kell. Volt már, hogy dump alatt a honlap nem volt elérhető. (Na ilyen már nem lesz több)
- Mint mondtam, a honlapnak 0-24, 7/7 mennie kell. Ne arra "fecsérelje az erejét a gép, hogy nekem dumpoljon
- A backup szerver itt van lokálisan, a VPS meg messze valahol. Az adatok közvetlen SSH útján jönnek-mennek (scp, rsync, rsnapshot, stb). Nem szoktunk olyan webes megoldásokat alkalmazni mint phpMyAdmin vagy cPanel, ismét azért, hogy ezzel se kelljen foglalkoznia a VPS-nek. Egyszerű legyen a szerver, minél kevesebb funkcióval.
Mit:
- MySQL dumpok kellenek a honlapról arra az esetre (jaj, nehogy ilyen történjen akármelyikünkkel), ha a honlap kompromittálódik vagy sérül. Ilyenkor a legfontosabb ami kell: /var/www mappa, valamint az sqldump. (meg persze opcionálisan a /etc/nginx mappa mindenestül, hogy ezzel is kevesebb idő menjen el, sőt a /etc/php.ini és /etc/php-fpm.conf)
- Az SQL adatbázisról legyen elég a komplett mentés hetente vagy havonta. Viszont legyen napi mentés, hogy bármelyik időpillanatra vissza lehessen állni.
Hogyan: (most jön a lényeg,hogy oldottam meg)
- A legelső hozzászólás blackluck-tól (köszönöm utólag is) pontosan az amire én is gondoltam. gyakorlatilag pontosan erre találták ki. Azonban gondjaim adódtak a használatával. Lehet járatlanságom miatt, de egyszerűen nem tudtam visszaállítani adatokat a teszt rendszeren, hiába voltak meg a backup-ok. Valamiért minden helyreállítás után azt az üzenetet kaptam, hogy sikeres volt, de mégse jött vissza mondjuk egy droppolt tábla.
- További kutatás után találtam egy remek Python "alkalmazást" ami az XtraBackup-ot felhasználva felhasználóbaráttá teszi a használatot. A lényege, hogy a mentéseket ő maga elintézi, neked csak user+pass kombót, a mentés helyét és a teljes mentés helyét kell egyszer megadni a konfigurációjába. Onnantól ő a megadott mappába lementi az inkrementális mentéseket a megjelölt mappában lévő teljes backup alapján. Kellett kicsit turkálnom a kódban, ugyanis két hibába futottam bele.
- Az első hiba a futtatás volt. A srác aki a script-et csinálta, debianon tesztelte csak és ennek megfelelően hardcode-olta a service újraindítás metódusát. Megkerestem a megfelelő fájlt, átírtam benne a MariaDB szerver indítását, leállítását vezérlő sort és átírtam.
-- command = ['/etc/init.d/' + service_name, action]
++ command=['systemctl' + action, service_name]
Innentől már futottak a mentések.
- Cron-ba beállítottam magamnak a teszt rendszeren egy óránkénti mentést és néha-néha felmegyek a teszt környezetbe, kitörlök egy táblát, hozzáadok egy új usert, felveszek új táblát, vagy épp új adatbázist, stb
- A második hiba az első visszaállításnál jelentkezett. Ugyanis lefutott a visszaállító script, azonban leállt a MySQL szerver és nem tudtam sehogy se újraindítani. Szó szerint sehogy, se safe módban, se reboot után. Szóval kilőttem a script-el valahogy véglegesen. :) Na, majdnem feladtam, mikor rájöttem, hogy a /var/log/mariadb/mariadb.log hibaüzenet szerint a programban megadott "innodb_log_file_size" különbözött a valóstól. Hála az égnek mivel kiírta a valós méretet is, Crtl+C, Ctrl+V-vel meg is oldottam.
Szóval így csináltam meg az inkrementális backup-ot a mysql adatbázisomról. Kicsit nyakatekert, de ha már valaki leírja, hogy mit kell csinálni akkor utána az egész beállítása maximum 5 perc, de legyen 10 mert lassan írok.... :)
Erről a megoldásról mi a véleményetek?
"További kutatás után találtam egy remek Python "alkalmazást" ami az XtraBackup-ot felhasználva felhasználóbaráttá teszi a használatot.": mentés idejére leállítja a szolgáltatást (mysqld)? Ez azért kritikus (nálunk), mert a mentés lehet gyors, de mikor lőjük ki 2-20 percre a DB-t?
Update: kipróbáltam, nem állítja le a szolgáltatást...
Update2: Játszottam vele 1 órát. Fullbackup tök gyors, incremental néha lassabb mint a full (összesen 4-5GB-ról beszélünk), pedig a delta fáljok kicsik, pár 100 sor ment be. Van benne database/table megadási lehetőség, azaz hogy mit mentsen csak le, de ibdata fájlt mindig menti, abban az összes db adatrészei benne vannak.
Jópofa, tetszik, de szerintem nálunk marad a mysqldump --skip-table | gzip | sshpass...
1etemi tanulmányaim alapján (nem nagy kedvenceim az adatbázisok, és szerencsére nem nagyon dolgozok velük élesben) a transaction log mentésével lehet a legcélszerűbben differenciális backupot csinálni.
A tranzakció log előnye, hogy mindig konzisztens visszaállást tesz lehetővé, és egy tisztességes DB esetén úgyis jelen van, csak el kell streamelni a backup vasra is.
Ha fájlrendszer szinten backupolsz, az azért lehet inkonzisztens, mert az adatbázis csak annyit garantál, hogy a fájlrendszer bármely pillanatképéből konzisztensen vissza tud állni az addig kiírt legutolsó tranzakcióig. Viszont a fájlrendszer szintű backup nem garantálja, hogy pillanatképet tudsz menteni, ha közben párhuzamosan fut a DB is, mivel lehet, hogy a DB B,A sorrendben írja a fájlokat, a mentés meg A,B sorrendben készül. Máris kész a baj. (Ha van olyan fájlrendszer, ami konzisztens pillanatképet tud csinálni, az elvileg elég lehet, ehhez a részhez nem értek.)
Azok a differenciális backupok, amik nem eleve differenciálisan írt adatokon (pl log fájlok, vagy verziókezelő kommitok eleve differenciális formában adottak lehetnek) futnak, természetüknél fogva számításigényesek (pl egy rsync egy rakás hash-t végigszámol), és ha a tárolás nem direkt erre van kihegyezve, akkor előfordulhat, hogy egyáltalán nem hatékonyak. Például ha egy update véletlenszerűen teleszór egy nagy fájlt, akkor peches esetben a differenciális mentés akkora is lehet, mint az eredeti. A tranzakció log viszont természeténél fogva a műveletek számával skálázódik. A legtöbb esetben szerintem az lesz a tuti. (Ha relatíve kevés sor változik a táblában.)
Ha mindenképpen differenciális kell, de a hálózat gyors, akkor meg lehet próbálni teljes backupot csinálni (leállással vagy anélkül, ahogy a szerver támogatja), és a backup szerveren diffelni a tömörítetlen állományt amikor már ketyeghet tovább az adatbázis szerver. Ha szerencséd van, akkor talál néhány egyforma blokkot és tud tömöríteni.
Szerk: Thread necromancer lettem egy kicsit.
mysqldump > weekly
patch -o weekly.tmp < incremental-daily-0
mysqldump > daily && diff -ruN weekly.tmp daily > incremental-daily-1 && rm daily
rm weekly.tmp
Persze a patcheket folyamatosan ra kell tolni mielott elkeszulne az uj incremental.
Igy teljes sql dump lesz napra visszavezetheto allapotban.
A masik megoldas pedig egy git repo hasznalata. mysqldump && git commit.
A klasszikus backup eszkozok is jok lehetnek. Amit hasznalok most az igy mukodik tomoren:
- Agent alapon helyi mysql felhasznaloval fs szinten konzisztens allapotba hozza a dbt.
- kernel modul segitsegevel fs snapshot szeruseget hiz letre.
- elengedi a mysql write lockot.
- letolti az fs snapshotot.
- deduplikalva es tomoritve tarolja es replikalja tobb telephelyre valamint szalagra.
A szervert egy boot cd segitsegevel helyre tudod allitani.
A mysql adatfajlokat sajnos csak file szinten tudja ertelmezni.
A backup letoltese a hatterben zajlik es nem okoz szolgaltatas kiesest. A write lock max 2 mp.
Ez egy fizetos megoldas.
Siman jo oreg mysql-el megcsinalhato. Ha beallitod a replication opciot, az osszes irast dump-olja egy visszajatszhato file-ba a mysql. Ha 1G-t elerte, kezd uj file-t. Namost egy paranccsal is ki lehet kenyszeriteni az uj file-t, ha tehat pl. 5 percenkent kezdesz egy uj file-t, akkor a teljes dump + replication bekapcsolassal 5 perces pontossaggal barmilyen allapotot vissza lehet jatszani. Sot, a replication client-el jatszva szerintem meg azon belul is menni fog, csak engem sose erdekelt annyira.
Ma is tanultam :) Köszi.
### ()__))____________)~~~ ########################
# "Do what you want, but do it right" # X220/Arch
Egyes pont: Profile... Profile... Profile..
Mennyi idő a dump.
Mennyi idő a dump tömörítése? (mivel vagyon tömörítve?... ugye tömörítve van?)
Mennyi idő a site tar gézája? (miért pont tar géza?, van szebb jobb)
Mennyi idő az rsnapshot?
Mekkora a dump?
Mekkora a tömörített dump? (7zip simán ráfelezhet a gézára)
Mekkora a website géza?
Kettes pont: technikai kérdések:
Hogyan (nem van) biztosítva a db és a website mappa egymással való konzisztenciája?
Milyen gyakran változik a schema?
Milyen messzire akartok visszanyúlni tudni?
Milyen gyorsan kell tudni helyreállni tüzes menykő hullása esetén?
Hogyan (nem van) megoldva a backup off-site replikációja?
https://www.mcdruid.co.uk/content/comparison-of-compression-methods-for…
### ()__))____________)~~~ ########################
# "Do what you want, but do it right" # X220/Arch
ott van az innobackupex/xtrabackup: le sem kell állítani a mysql szervert, inkrementális backupot is tud, nem csak perconaval működik.