![]() |
|
||||||
|
|
| 07.02.12 / 23:05 |
|
Montez
Mis on MySqlDump ? Tegemist on MySQL-i utiili, või kliendiga mis installeeritakse samaaegselt MySQL-i installeerimisega. Mysqldump on kasulik eelkõige andmete liigutamiseks eri andmebaasiserverite vahel, kuid sobib suurepäraselt ka andmetest tagavarakoopiate tegemiseks.Mida MySqlDump teeb? Lühidalt öeldes loeb ta andmebaasi(de)s olevad tabelid tagasi algosadeks ja kirjutab need siis tekstifaili. Siinkohal oleks vist segase jutu illustreerimiseks asjakohane üks näide. TEEME VARBAD MÄRJAKSOletame et meil on vaja luua mingi andmebaas, pangem talle nimeks näiteks test. SQL-i lause selle loomiseks oleks: mysql>CREATE DATABASE test;Kuna meil mõistus päris õige koha peal pole, siis mingitel arusaamatutel asjaoludel loome võrdlemisi mõttetu tabeli kus säilitatakse ees- (fname) ja perekonnanime(lname) ning võtmeks (PRIMARY KEY) on auto_increment väli traditsioonilise nimega id. Tabel ise võiks välja näha näiteks selline: mysql>CREATE TABLE tabel (Et tabel ilma andmeteta on vähemalt nagu Kati ilma karuta siis sisestame sinna igaks juhuks midagi, no näiteks Madis Maamesilase ja Juhan Juurika nimed, SQL selle teostamiseks näeb välja järgmine: mysql>INSERT INTO tabel (id, fname, lname) VALUES (0, 'Madis', 'Maamesilane');Kõik on ilus ja tore, ise oleme hirmus rahul, aga korraga tekib vajadus liigutada kogu andmebaas serverist A serverisse B. Loomulikult võiks andmebaasi serveris B uuesti luua, aga kui tabeleid on kümneid ja ridasid (kümneid)tuhandeid? Võibolla on aga üldse vaja kõik MySQL serveris leiduvad andmed üle viia hoopis teise masinasse? Just siin tuleb appi MySqlDump-i No nii, aga näide? Meie eelpool loodud andmebaasi test "dumpimiseks" tekstifaili tuleks käsurealt (promptis) teostada järgmine protseduur: Windows platvormil: Unix/Linux platvormil: Mis toimub? Pole hullu harutame lahti. Esimene osa peaks olema arusaadav ka võhikule. edasi? andmebaas > c:\minukataloog\koopia.sqlkui sellist faili veel pole siis see luuakse MysqlDump-I poolt, faili võib kirjutada kasvõi desktopi ning samuti pole mingit vahet kas faili laiend on *.sql, *.txt või *.vanaema. Põhimõttelist vahet mis platvormil MySqlDump-i kasutada ei ole, tulemus on sama. Erinevus on vaid kaldkriipsude suunas ja teekonna (path) määratlemisel ning tuleneb failisüsteemide erinevusest. Siit ka MySqlDump-i üks tugevaimaid külgi - võime liigutada andmebaase eri platvormide vahel. Näiteks võite kogu andmestiku oma lokaalses win masinas sisestada ja pärast selle kõik linuxi serverisse ümber tõsta. Kuidas ? Vaatame nüüd kuidas protseduur teistpidi välja näeb. Selleks et kogu eelnevast jutust pisut selgemat aimu saada vaatame korra milline näeb välja meie äsjaloodud dumpfail (koopia.sql). Avades faili suvalise tekstöötlejaga avaneb meile järgmine pilt: Teadupärast on # sql-is kommentaari tähiseks, MySqlDump-i kirjutab lihtsalt, nagu üks tõsine tööriist kunagi, lisaks SQL-ile ka asjakohased ääremärkused (kui tihti oled sina mõelnud oma vanu koode lahti harutades - miks kuradi pärast ma ühtegi kommentaari vahele ei kirjutanud…? ). Nüüd peaks asja olemus juba selgemaid piirjooni omama, igaüks kellel SQL-ist nägemus on, saab aru et nende käskude abil moodustub samasugune andmebaas nagu me selle artikli alguses käsurel käskhaaval lõime. Ainus mis pisut segadust võib tekitada on TYPE=MyISAM sellest ei tasu aga lasta ennast heidutada tegemist on tabeli tüübiga, kui see ka ära kustutada ei juhtu midagi kuna kõigis uuemates MySql-I versioonides on MyISAM ka default tabelitüübiks. Kuidas aga seda tekstifaili (teise)serverisse tagasi lugeda? Asume asja kallale. Windows platvormil: C:\mysql\bin>mysql -u root -h localhost -p test < c:\minukataloog\koopia.sqlUnix/Linux platvormil: [kasutaja@server kasutaja]$ mysql -u root -p -h localhost test < /home/minukataloog/koopia.sqlÜsna sarnane, kas pole? Tähelepanu tasuks pöörata kahele nüansile: NB! Üks kala siiski asja juures on, nimelt tuleb win platvormil enne dumpfaili uuesti sisselugemist kustutada dumpfaili esimene rida. Mingil arusaamatul põhjusel tahab MySql windowsi peal vastuseks reale Enter password: # MySQL dump 8.16 anda errori.HÜPPAME PEA EES VETTENüüd kus oleme dumpimise põhiolemuse rõõmsalt selgeks teinud, on aeg võtta ette andmete dumpimise süvaõpe. Mida siis kõike saab MySqlDump-i abil teha? Kui andmete dumpfailist serverisse lugemine on oma põhiolemuselt sama, siis dumpfaili loomisel on võimalusi ja variatsioone päris palju. Kuivõrd MySqlDump-i unix/linux ja windows platvormil kasutamise erinevused on juba kuuldud muusika siis jätkame siinkohal ühega. Kuna lokaalses masinas olen ka mina (koos paljude saatusekaaslastega) billi ori siis saab selleks siinkohal win. Olgu põhiline siis veelkord ära toodud: Edasistes näidetes opereerime ainult osaga sellest lausest kuna kordamine võib küll olla tarkuse ema, kuid mõtetu dubleerimine pole seda mitte. Seetõttu kärbime ja muudame lauset pisut ja jätkame baasilt: andmebaas > c:\dumpfile.sqlNonii. Mis saab siis kui me tahame dumpida mitu andmebaasi korraga? --databases andmebaas1 andmebaas2 > c:\dumpfail.sqlAga kui on vajadus kogu andmebaasiserver ümber kolida? --A > c:\dumpfail.sqlKui soovime ainult tabelistruktuuri… --no-data andmebaas > c:\dumpfail.sql…või hoopis ainult andmeid --no-create-info andmebaas > c:\dumpfail.sqlkui me teame et andmebaasis kuhu me andmeid "siirdame" võib olla sama nimega tabeleid (näiteks mingi varasem versioon meie tööst), aga meid nende tabelite saatus ei huvita siis võime lisada dumpfaili DROP TABLE IF EXISTS lause (lisatakse iga CREATE TABLE lause ette):--add-drop-table andmebaas > c:\dumpfile.sqltingimusi saab omavahel kombineerida, põhiloogika on siin järgimine: tingimus1 tingimus2 andmebaas1 andmebaas2 > dumpfile.sql näiteks mida teeb järgmine käskude ja tingimuste kombinatsioon… --add-drop-table -no-data db1 db2 > c:\dumpfile.sql Voila! Natukene jälle targem. Kõigist MySqlDumpis kasutada olevatest võimalustest saab täpse ülevaate ( Ära arvasid!) loomulikult manuaalist aadressil : LÕPETUSEKSPalju nendest asjadest saab ära teha ka prompti ronimata kasutades phpMyAdmin-i , ometi on kasulik oma arsenali selles artiklis toodud teadmistega täiendada. Nimelt on phpMyAdmin siiski veebipõhine mysql-i klient, mis seab asjale omad piirid. Eks sa proovi üle veebibrauseri teha dumpfaili andmebaasist milles on näiteks kümme tabelit , igaühes 10000 rida ja 10 lahtrit, vaata mida server ja brauser sulle selle peale räägivad. Ma ükskord huvi pärast proovisin u. 3000-ga ja midagi head sellest ei tulnud. Samas MySqlDump-i kasutades mingeid probleeme ei esinenud. Vastukaja ja kommentaare oodates Montez Artikli kommentaarid |
|