Warning: count(): Parameter must be an array or an object that implements Countable in /home/pasokime/domains/mysql.lt/public_html/forumas/include/parser.php on line 820

Topic: mysql backup

Nežinau ar į gerą skilti pataikiau, bet man reikia tokios atsarginių kopijų sistemos, kuri galėtų

1) išexplortuoti taip duomenų bazę, kad ją importavus matytusi visos lt raidės (mysqldump būtų lt raidžių nebelieka)
2) kad kiekvienas INSERT būtų vis naujoje eilutėje, o ne kaip mysqldump, labai daug eilučių sudedami į vieną eilutę
3) galėtų kiekvienos duomenų bazės lentelę iš exportuoti atskirai, kad dumpo pavadinimas sutaptu su lenetlės pavadinimu ir tie dumpai būtų dedami į folderius, kurių pavadinimai atitinka duomenų bazės pavadinimą. žodžiu tokia turėtų būti failo strūktūrą

/pirma_duomenu_baze
----/users.sql
----/news.sql
/blogas
----/blogo_useriai.sql
----/blogo_linkai.sql
/kita_duomenu_baze
----/kita_lentele.sql

ir t.t.

Realiai man užtektų skripto, programos ar šelo, kuris galėtų padaryti dumpą iškkonkerčios lentelės į konkerčią vietą, ir kad tenkintų pirmas dvi salygąs, na o trečia jau pats pasidaryčiau.

Re: mysql backup

Reikia rašyti shcell script'ą, kuris tai atliktu su mysqldump'u.

Koduotės yra tikrai palaikomos. Tikriausiai kažką darai neteisingai ir prarandi arba failo koduotę arba lentelės arba stulpelio.

Tiesa, tiksliai nežinau ar palaikomas atskirų eilučių formatas, bet mana rodos galima nustatyti per parametrus, tiek, kad eksportuotu visas eilutes atskirai, tiek kad eksportuotu vieną lentelę.

Shell scriptas turėtų gauti db ir lentelių sąrašą, ir dumpinti duomenis į atitinkamus katalogus/failus.

Re: mysql backup

Tik tiek, kad darant tokį backup'ą praktiškai atsiranda dideli pavojai dėl duomenų integralumo, nes akivaizdu, kad eksportuojant kiekvieną lentelę atskirai gali jie būti modifikuoti. čia aišku reikia pasitikslinti mysqldump dokumentacijoje ar nėra integruoto lentelių/db skaidymo failais.

Re: mysql backup

Kiek skaičiau nieko panašaus nesuradau. Kopija būtų daroma vėla naktį, be to gal galima užrakinti visą duomenų bazę?

Re: mysql backup

O čia skaitei?

http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html

Re: mysql backup

aha, nedaskaičiau apie --tab argumentą. Reikės pasibandyti, ir jaučiu jog visą kitą pasidarysiu, dėkui už pastebėjimą :)

Be to, gal žinai kasgali būti, jog mysql visur naudoju tik UTF8 koduotę. Visi laukai, visi susijungimai ir visą kitą tik UTF8 koduotėje. Padarius atsarginę kopiją su mysqldump ir šitą kopiją įkelus per mysql programą, visos Lietuviškos raidės pasidaro kringeliai. Viena lietuviška raidė tampa į du kringelius (UTF-8 koduotėje viena lietuviška raidė susideda iš dviejų simbolių)

Re: mysql backup

mysqldumpas turi parametrus, kurie taip pat nurodo koduotę.

Taip pat, ar "mysql visur naudoju tik UTF8 koduotę" reiškia, kad ir duomenų bazių/lentelių koduotės pagal nutylėjimą (default) irgi yra UTF8?

Re: mysql backup

taip, pagal default UTF8. Reikės pabandyti mysqldumpe per parametrus nurodyti koduotę.

mysql dumpo anntraštė:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `agonija`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `agonija` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

O sakykim negali būti tai, jog mano prisijungimas prie serverio SSH2 protokolu naudoja ne UTF8 koduotę?

Re: mysql backup

neworld wrote:

O sakykim negali būti tai, jog mano prisijungimas prie serverio SSH2 protokolu naudoja ne UTF8 koduotę?

Jeigu tu per ssh klientą vykdai tik komandas tai neturi turėti įtakos.

Jeigu tu per ssh klientą įvykdei takim eksporto komandą ir per tą patį klientą žiūri SQL failą, tai be abejo, kad tu nematysi UTF8 jeigu klientas to nepalaiko ar nėra tam reikalui sukonfigūruotas.

Taip pat kalbėdamas apie mysqldump'o koduotę turėjau omenyje: http://dev.mysql.com/doc/refman/5.0/en/ … et-charset

Re: mysql backup

Jo šitą būtinai įdėsiu, tik dabar mane užspaudė šiokie tokie riekaliukai ir neturiu laiko pratestuoti. Visai gali būti jog tik to ir tereikėjo

11 (edited by neworld 2008-11-10 10:54:53)

Re: mysql backup

pratesiu temą. mysqldumpas su -tab atributu viska daro lyg ir gerai, tačiau duomenys būna *.txt faile, kuriame duomenis padaryti taip, kad kiekviena mysql eilutė yra vis naujoje faile eilutėje, bei stulpeliai atskirti tab'ais. Man toks variantas netinka

Taigi pasidariau savo pilnai veikianti variantą:

#!/bin/sh

DB=`mysql -u root --password="*******" -s -e "SHOW DATABASES"`

rm -f -R /tmp/DB
mkdir /tmp/DB

for database in $DB
do
  if [ ! "information_schema" = "$database" ]; then
    mkdir "/tmp/DB/$database"
    TABLES=`mysql -u root --password="********" -s -U $database -e "SHOW TABLES"`
    for table in $TABLES
    do
      echo "$database $table"
      mysqldump -u root --password="********" "$database" "$table" > "/tmp/DB/$database/$table.sql"
    done
  fi
done

tar --create --bzip2 --absolute-names --preserve-permissions --file=/backup/DB/mysql-`date '+%Y-%m-%d'`.tar.bz2 /tmp/DB
rm -f -R /tmp/DB

exit 0

Tačiau kaip pastebėjote, dėl UTF8 nieko nedariau, nes neveikia. Jeigu dumpe įdedu --set-charset=utf8, ar --set-charset=utf8_general_ci gaunu klaidą:

Warning: mysqldump: ignoring option '--set-charset' due to invalid value 'utf8'

gal turite kokių įdėjų dėl UTF8?

P.S. man dar nepatinka tai, jog visi duomenys surašomi vienoje eilutėje. Daug patogiau man būtų, jeigu duomenys būtų surašomi per INSERT, ir kiekviena duomenų bazės eilutė, kad būtų kiekvieno failo eilutėje.

Re: mysql backup

Na taip... jeigu būtum pažiūrėjęs dokumentacijoje, kur daviau linką, tai suprastum, kad jokios reikšmės nurodyti nereikia, šita opcija tik liepia naudoti defaultine koduotę iš duomenų bazės.

13 (edited by neworld 2008-11-10 10:58:58)

Re: mysql backup

neįsiskaičiau, tuojau pažiūrėsiu kaip seksis :)

P.S. vualia, tikrai veikia. Dabar bent jau pats backupas yra utf8 koduotėje

Re: mysql backup

Nu va .. matai, kaip viskas paprasta (-;

Re: mysql backup

jo, bent dėl atsarginių kopijų būsiu ramus :)

Re: mysql backup

Ramus nelabai būsi... nes iš karto matosi, kad yra tikimybė problemom dėl duomenų integralumo. Tai galima išspręsti su vienu duomenų bazės failu ir --single-transaction opcija...

Re: mysql backup

skaičiau skaičiau apie tą --single-transaction ir nelabai supratau, nei kaip ją naudoti, ir kaip ją konkrečiai panaudoti savo pavyzduke.

Tačiau ištraukti dumpui reikia vos keletos sekundžių, o dumpą traukiu tada, kai būna pačios mažiausios apkrovos.

Re: mysql backup

čia šitą dalyką galima panaudoti kai veikia InnoDB variklis, tada jis visą backup'ą įvelka į vieną tranzakciją. Kitaip sakant paima integralią duomenų atžvilkių duomenų bazę. čia gal labiau ateičiai rekomenduočiau (-;

Re: mysql backup

pas mane myISAM deje yra, innoDB + MyISAM + likęs serveris nesutelpa ant 256MB RAM