Topic: MySQL (ir kitos info) backup'inimas/migracija

Mastau tiek apie atsarginių kopijų, tiek apie migravimo tarp stage <-> live serverių sistemą (taip, idealiu atveju duomenys turi galėti judėti abiem kryptimis) :)

Kiekvienas esat susidūręs su tokia situacija, kai jūs padarote projektą, klientas jį naudoja, atlieka pakeitimus. Vėliau prireikia atlikti atnaujinimo darbus, kurie aišku turi būti padaryti ne live versijoje, bei apima tiek programinio kodo, tiek turinio atnaujinimą.

Jei pasiseka ir remontuoji Wordpressinį frankenšteiną, reikalavimą viską atlikti offline galima apeiti, bet kai kalba pasisuka apie didesnius projektus...

Idealiu atveju kas kartą pasidarai live tinklapio kloną, sutvarkai ir vėl sumeti į  live. Tik kad labai nepatogu. Ypač jei pakeitimai yra reguliarūs ir apima tiek naujas prekės eshope, tiek turinio pasikeitimus. Kartais net naujus pluginus ar kliento daugelio atliktus pataisymus.


Tad klausimas, kaip tai valdoma didesniuose projektuose. Ypač kai neretai abu serveriai skirtingose šalyse, o duomenų bazėje saugoji ir nuo serverio priklausantys nustatymai?

Re: MySQL (ir kitos info) backup'inimas/migracija

Kadangi serveriai gali būti bet kur pasaulyje, be jokio root priėjimo, bene vienintelis pastovus dalykas yra tai kad jie visi gali vykdyti PHP skriptus.

Mano teorinis planas, padinkim jį SuperSync (TM) būtų toks, kad į kiekvieną projekto serverį būtų galima įdiegti super.php skriptą. Patvirtinęs tapatybę per oAuth, leistu valdyti serverį nuotoliniu būdu. Pvz:
1) centrinis serveris kas kelias valandas vis užprašytų SHOW CREATE TABLE + visų duomenų exporto, bei pas save parsisiųstu į centrinę saugią vietą.
2) Kai reikia sinchronizuoti duomenis, centriniame serveryje paspaudus didelį raudoną mygtuką info būtų nusiųsta į reikiamą serverį
3) įkėlus info įvykdoma serija UPDATE TABLE, kuri už tave pakeičia visus reikiamus parametrus.
4) Atlikus visus pakeitimus procedūra kartojama, tik jau kita kryptimi.

Norint sumažinti downtime visas importas atliekamas į table-name_NEW lenteles, ir tik visoms sėkmingai įsikėlus su RENAME TABLE aktyvuojama.
Vėliau analogiškai perkeliamos nuotraukos, attachementai, kitos duomenų bazės.


Atrodo paprasta, bet negi nėra gatavų tokio tipo sistemų? CI įrankiai kaip pvz Jenkins, bet ar jie turi tinkamų modulių?

Re: MySQL (ir kitos info) backup'inimas/migracija

Ale rimtai miręs forumas :)

Re: MySQL (ir kitos info) backup'inimas/migracija

Tai kad klausimas labai specifinis ir reikalauja specifinio atsakymo. Jei niekas negali atsakyt - tai niekas ir nerašo...
Bet kokiu atveju tokio dalyko nelabai bus, mat neaišku ką tarkime daryti su duomenimis jei pasikeičia stulpelio tipas iš decimal į kokį nors int. O kažkaip susigaudyt, kad COLUMN1 duomenys turi būti perkelti į COLUMN2 ir tada tik pakeistas COLUMN1 tipas - neįmanoma. 'Automatinis' skriptas tiesiog padarys ALTER TABLE ir viskas... Tai kam kurt tokią sistemą? Ir dar ant PHP :)
Bene vienintelis būdas yra loginti VISAS, ne SELECT užklausas ir jas iš eilės vykdyti SLAVE serveryje, kaip kad daro mongoDB replicaSets. Antraip kaži ar sugaudytum visus pakeitimus.
Bet kokiu atveju be normalios prieigos nieko padaryt negalėsi. Nebent kaupti eksportuotus failus ir iš jų atkūrinėt savo dev serverį.

Taip pat reikia turėti omenyje, kad beveik visi continuous integration sprendimai būna vienapusiai dev -> staging -> production, o minties, kad kažkas kažką padaro production ir viskas turi atsidurti dev aplinkoje - net negali būti tokiose komandose, kurios aplamai naudoja tokius sprendimus. Jei reikia dvipusio: downloadini viską pas save, sumergini su tuo ką tu turi ir tada įkelinėji per CI sistemą.

Viskam sureguliuoti reikia tikrai nemažai laiko, tai kaži ar tie WP blogai to verti...

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: MySQL (ir kitos info) backup'inimas/migracija

Kalbu ne apie tokius atvejus kaip pradeda keistis pačios lentelės struktūra. Labiau kai keičiasi jos duomenys ar sukuriamos naujos lentelės (pvz įdiegtas naujas modulis).

Hmm, o kaip daroma jei pvz koks nors eshopas nori atsinaujinti vos ne visus savo vidinius puslapius bei jų struktūrą? Su visais maketavimais ir derinimais tai gali užtrukti kelias dienas. O krūva lūžusių ar niekur nevedančių nuorodų skamba kaip košmaras :)

Re: MySQL (ir kitos info) backup'inimas/migracija

Tai dėl duomenų tada geriausia tinka pilnas dump'as, kur reikia ten įsikeli. Nesudėtingas skriptas būtų. Bet čia žinoma tinka tik tada, kai pakeitimai keliami production->dev

Dėl nuorodų - pasikeitus struktūrai/viduriams paprastai padaromi redirektai, jei yra kažkokia logika iš ko į ką redirectinti - puiku, jei ne tada rankytėmis suvedi :(

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: MySQL (ir kitos info) backup'inimas/migracija

Dumpas gerai. Bet gerai tik iki to momento, kai dumpe nera kokiu su serveriu susijusiu nustatymu. Sugalvoja kas nors kad domena reikia DB o ne confige saugoti - ir prasideda džiaugsmai :/

Re: MySQL (ir kitos info) backup'inimas/migracija

Tas tiesa, bet jei žinai kas kur turi būti, tai po dumpo importo reikia pasileisti keletą update, jei nežinai (pvz. kokie nors mistiniai pluginai mistinėse vietose įrašo mistinius dalykus) - tada jau kiek sunkiau. Bet gali pasearchint dump'e tokių dalykų. Dažniausia saugomas domenas ir dar gal koks path.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: MySQL (ir kitos info) backup'inimas/migracija

Back to sqare one.
Kaip tai optimizuoti :)

Re: MySQL (ir kitos info) backup'inimas/migracija

Tai pasirašyt skriptą. Pirmą kart gal ir užsiknisi. bet vėliau gal paspartins reikalus.
Jau sukurtų tokių dalykų nėra, arba aš jų nežinau.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer