Skocz do zawartości
Zaloguj się, aby obserwować  
Jarosław Szmańda

Rsync - pytanie

Polecane posty

no to chciałbym zapytać czy jest jakiś sposób na robienie kopii "przyrostowej" baz danych ?

nie

Tak. Replikacja bazy danych jest w pewnym sensie kopią przyrostową, tyle, że musi być skonfigurowana na przynajmniej dwóch maszynach. Zawsze też można kopiować też logi binarne.

 

Nie ukrywam, że niektóre wasze wypowiedzi zmieniły mój "światopogląd", choć trochę się dziwie (ale znowu nie podważam), bo już kilka razy przywracałem tak bazę i nie miałem problemów...

Miałeś szczęście. Nie wiem co w tym dziwnego, wyobraź sobie, że robisz rsynciem kopię z /var/lib/mysql przy włączonym serwerze MySQL. Bazy powiedzmy mają po kilkaset MB. W momencie, kiedy rusza rsync mysql zaczyna zapisywać zmiany do pliku. I co wtedy? Nie można kopiować /var/lib/mysql przy włączonym serwerze MySQL. W ten sposób możecie sobie kopiować logi binarne.

log_bin				 = /var/log/mysql/mysql-bin.log
expire_logs_days		= 10
max_binlog_size		 = 50M

 

Jeżeli ktoś ma 2 maszyny to niech zainteresuje się zagadnieniem replikacji bazy danych. Jest to stosunkowo łatwa operacja, przez google można znaleźć sporo tutoriali, w manualu jest opisany cały scenariusz przykładowej replikacji (też do wygooglowania).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Po prostu wywalasz opcje autoryzacji, bo client i tak Cię połączy według danych ~/.my.cnf.

Wielkie dzięki, działa :D

W momencie, kiedy rusza rsync mysql zaczyna zapisywać zmiany do pliku. I co wtedy?

 

Rsync wywala błąd? Coś na wzór "file has vanished".

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Miałeś szczęście. Nie wiem co w tym dziwnego, wyobraź sobie, że robisz rsynciem kopię z /var/lib/mysql przy włączonym serwerze MySQL. Bazy powiedzmy mają po kilkaset MB. W momencie, kiedy rusza rsync mysql zaczyna zapisywać zmiany do pliku. I co wtedy? Nie można kopiować /var/lib/mysql przy włączonym serwerze MySQL. W ten sposób możecie sobie kopiować logi binarne.

Czyli w moim przypadku:

rsync $OPTIONS "$OPTIONSE" /var/lib/mysql/ $SERVER:$DEST/mysql_source/

także najpierw powinienem zastopować serwer mysql, zrobić ten rync, a potem go uruchomić?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość patrick

by dajny były spójne tak, ciężko to zrobić jeżeli mysql wykonuje odczyt/zapis.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No i właśnie...

mysqldump: Got error: 1146: Table 'cybe..._sklep.cennikCategoriesMap' doesn't exist when using LOCK TABLES

Na tym skrypt kończy działanie - dalsze bazy nie są dumpowane. Dlatego zacząłem robic rsync zamiast dumpa :D

 

Edit: czy opcja --force ma tutaj takie zastosowanie, że pójdzie dalej mimo błędów?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

to chciałbym jeszcze zapytać ..

 

po 1. czy jeśli ustawię replikację to co się stanie jesli na serwerze "master" zmieni się struktura tabel ?

tj. np. replikuje wszystkie bazy na serwerze, w pewnym momencie kasuje jedną baze, bądź jedna tabele, co wtedy się dzieje na drugim serwerze ?

 

po 2. "Zawsze też można kopiować też logi binarne." w jaki sposób ? tj.. jak to zautomatyzować aby nic się nie zgubiło i nie trzeba było kopiować niepotrzebnych danych ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
po 1. czy jeśli ustawię replikację to co się stanie jesli na serwerze "master" zmieni się struktura tabel ?

tj. np. replikuje wszystkie bazy na serwerze, w pewnym momencie kasuje jedną baze, bądź jedna tabele, co wtedy się dzieje na drugim serwerze ?

Replikacja polega nie na kopiowaniu plików bazy danych a na wykonywaniu na zreplikowanym serwerze tych samych poleceń SQL. Jeżeli na serwerze master wykonasz ALTER TABLE i zmodyfikujesz strukturę tabeli albo ją usuniesz ta sama komenda wykona się na wszystkich serwerach slave.

 

po 2. "Zawsze też można kopiować też logi binarne." w jaki sposób ? tj.. jak to zautomatyzować aby nic się nie zgubiło i nie trzeba było kopiować niepotrzebnych danych ?

Dlaczego tak można? Bo log binarny to zwykły plik dopisywany zawsze na końcu - jeżeli będzie zapisywany podczas odczytu w najgorszym wypadku nie zostanie skopiowana ostatnia instrukcja (zostanie gdzieś "urwana"). Żeby kopiować bezpieczne log binarny trzeba poczytać na jakiej zasadzie jest "zwijany" po przekroczeniu ustalonego limitu. Właśnie zerknąłem do /var/log/mysql i mysql-bin.000001 jest sprzed ponad miesiąca, a sama maszyna stoi już ponad rok, więc jak widać numerowanie plików jest w jakiś sposób "resetowany" (.000001 to najstarszy plik).

 

Nigdy tego nie stosowałem, ale pomysł na kopiowanie logów binarnych jest do wykonania. Kopiować można rsynciem a na maszynie docelowej jakiś proces może dodawać dane z kolejnych logów binarnych do bazy danych (jest taki program w paczce z mysql - mysqlbinlog?). Chociaż z drugiej strony mógłby być problem z oznaczaniem ostatniej wykonanej instrukcji z logu, żeby przy kolejnym cyklu jej nie powtórzyć.

 

Generalnie to lepiej użyć replikacji :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×