PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rsync - mysql db?



lechfusion
14.10.03, 09:37
hi folk,

hier gleich zum nächsten thema ... wie sync ich am besten die mysql datenbank? habe jetzt verschiedene meinungen, die einen sagen "auf keinen fall einfach /var/lib/mysql etc. hin und her kopieren", lieber über die replikationsfunktion von mysql.

die andern sagen "kein problem, einfach kopieren das passt"

wie z.b. http://www.gymmelk.ac.at/~nus/phpmysql/php/node105.html
... bin bei meiner suche auch auf purtec howto gekommen, dort wird auch nur über kopieren weggesichert (folglich auch so wieder eingespielt)

fakt ist, das es für mich von der administration, überwachung etc. um einiges besser wäre, wenn das mitm normalen kopieren (sprich über rsync) klappen würde.

habt ihr hier bereits erfahrung?

mfg lechfusion

Jasper
14.10.03, 09:45
Original geschrieben von lechfusion
fakt ist, das es für mich von der administration, überwachung etc. um einiges besser wäre, wenn das mitm normalen kopieren (sprich über rsync) klappen würde.


wenn die datenbank nicht läuft, sehe ich keine probleme, das zeug einfach zu kopieren. im laufenden betrieb sieht das anders aus. AFAIK kann man mysql nicht temporär anhalten (siehe quiesce bei oracle). da musst du wohl die replikation von mysql bemühen.

-j

lechfusion
14.10.03, 10:28
hmmmm, wie wärs mit nen cron - mysql stop/start - und somit für 1 min (kürzer wird ja ned gehn ... oder wie geb ich im cron sec an?) abschalten?

eine minuten in der früh um 4 dürfte jetzt nicht so "wild" sein ... in der minute die files rauskopieren...danach rüber rsyncen...

Jasper
14.10.03, 10:34
Original geschrieben von lechfusion
hmmmm, wie wärs mit nen cron - mysql stop/start - und somit für 1 min (kürzer wird ja ned gehn ... oder wie geb ich im cron sec an?) abschalten?

eine minuten in der früh um 4 dürfte jetzt nicht so "wild" sein ... in der minute die files rauskopieren...danach rüber rsyncen...

schreib doch alles in ein skript, damit das alles hintereinander abgearbeitet wird:

mysql stop && rsync ...
mysql start

dann hast du die minimalst mögliche downtime. um die zeit noch weiter zu minimieren (wenn es recht viele daten sind), könntest du lvm-snapshots oder raid1 (mysql stop, spiegel aufbrechen, mysql start (läuft auf hälfte1 des spiegels, rsync (verwendet hälfte2), resyncen) verwenden.

-j

lechfusion
14.10.03, 10:49
super idee ... thx, so wird ichs mal testen!

Jorge
14.10.03, 11:32
Was spricht eigentlich gegen ein mysqldump --opt database > backup-file.sql' in einem Script, welches anschließend per rsync die Datei backup-file.sql wohin auch immer kopiert? So hast Du kein Off der MySQL Datenbank.

lechfusion
14.10.03, 11:41
weil er nicht nur ein backup kopieren soll sondern dieses gleich auf dem andern server in die db hauen soll ... das denk ich wird im laufenden betrieb ebenfalls nicht gehn ...

beide server sollen von db und web identisch sein und gleichen sich einmal pro nacht ab ... über ein extra php script auf dem die domain (auf extra provider) aufläuft wird dann überprüft ob server 1 erreichbar ist, wenn ja geht er dorthin, wenn nein geht er zum zweiten server ... das nur zum hintergrund der ganzen sache

Jorge
14.10.03, 12:22
Original geschrieben von lechfusion
weil er nicht nur ein backup kopieren soll sondern dieses gleich auf dem andern server in die db hauen soll ... das denk ich wird im laufenden betrieb ebenfalls nicht gehn ...


manpage lesen soll manchmal helfen:


However, it's also very useful to populate another
MySQL server with information from a database:

mysqldump --opt database | mysql --host=remote-host
-C database


Diese Info findet man in der manpage von mysqldump.

Jasper
14.10.03, 12:48
Original geschrieben von Jorge
Was spricht eigentlich gegen ein mysqldump --opt database > backup-file.sql' in einem Script, welches anschließend per rsync die Datei backup-file.sql wohin auch immer kopiert? So hast Du kein Off der MySQL Datenbank.

funktioniert das auch bei innodb, sprich wenn transaktionen noch offen sind? ich bin kein mysql-experte, aber wenn ja, wozu gibts dann 'hotbackup' von mysql.

generell hat man bei online-backup das problem, ein konsistentes backup zu erhalten. mysql wird da keine ausnahme machen, aber ich lass mich gern eines besseren belehren.

-j

Jorge
14.10.03, 12:52
Bin auch kein MySQL Experte, kannte ich eben nur aus der Lektüre der manpage...

lechfusion
14.10.03, 14:01
gute frage, müsste man testen.

aber ich werd mich jetzt doch eher auf die lösung mit mysql stop/start und kopieren konzentrieren, habs grad getestet und hatte ne db downtime von weniger als 3 secunden (da die files ja erst nur auf der platte kopiert werden und danach syncronisiert)

ich denke die downtime ist akzeptabel ...

lechfusion
14.10.03, 15:33
leider hat das einspieln der db noch nicht ohne weiteres geklappt ...

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/.....php on line 30

also denk ich mal das noch irgendwelche mysql dateien fehlen ... frage ist nur welche ich kopieren kann ohne die db zu schrotten ... den problem: auf der ziel DB ist noch eine DB angelegt, die dort leider laufen muss (confixx...das klappt ned so einfach zu kopieren/überspielen) ... nur wenn ich den /var/lib/mysql/mysql ordner komplett kopiere werd ich die db wohl somit schießen ... aber wenn ich ihn nicht kopiere erkennt er die anderen dbs ned ... oder lieg ich irgendwo falsch?

frage ist halt, welche datei ist für die obige mysql_num_row meldung verantwortlich?

lechfusion
14.10.03, 18:04
ok jetzt klappts ... beim kopieren der db hat er die rechte geändert, diese lass ich nachm sync über nen script automatisch über chown setzten ... einwandfrei :D