Latest Entries »

Replikacja PostgreSQL

Od wersji 9.0 PostgreSQL umożliwia nam replikację baz danych. Możliwe są dwa tryby:

- Streaming Replication

- Hot Standby

Prezentację na ten temat mozna znaleźć pod adresem http://www.pgcon.org/2010/schedule/events/264.en.html

Przykład jak uruchmić Streaming Replication znajduje sie pod adresem http://wiki.postgresql.org/wiki/Streaming_Replication

Lady Java

Prosty sposób na backup

Dzisiaj chciałem się podzielić z wszystkimi moim sposobem na backup najważniejszych plików mojego malutkiego serwera domowego. Na serwerze mam kilka baz danych w MySQL oraz całą masę plików, które chciałbym żeby były zabezpieczone tak aby szybko można odpalić kopię zapasową (wiem, wiem – zawsze jest RAID ale nie każdy ma pieniądze na takie rozwiązanie, a rozwiązanie programowe nie do końca do mnie przemawia…) Postanowiłem więc odpalić starego PC-ta i zainstalować na nim linux-a (CentOS był pod ręką). Serwer na, którym znajdują się pliki, które chcę backupować jest postawiony na systemie linux Debian. Założyłem sobie, że pliki powinny backupować się raz dziennie – najlepiej w nocy, natomiast bazy danych powinny być backupowane na bieżąco. Rozwiązanie jest banalne, mianowicie:

  • do tworzenia kopii w czasie rzeczywistym baz danych posłuży mi mechanizm replikacji bazy danych MySQL
  • do backupowania plików użyję rcync-a + crontab

Najpierw zaprezentuję w jaki sposób skonfigurowałem replikację baz MySQL:

Na serwerze, który chcę backupować (Debian) wykonałem następującą konfigurację:

  1. Skopiowałem plik /etc/mysql/my.cnf tak dla bezpieczeństwa -> cp /etc/mysql/my.cnf /etc/mysql/my.cnf.copy
  2. Następnie owtorzyłem plik my.cnf do edycji -> nano /etc/mysql/my.cnf
  3. W sekcji [mysqld] wprowadziłem następujące wpisy:
    log-bin = /var/log/mysql/master.log
    server-id = 1
    binlog-do-db = baza_danych_1
    binlog-do-db = baza_danych_2
  4. Restartujemy bazę danych -> /etc/init.d/mysql restart
  5. Następnie logujemy się do bazy danych i tworzymy specjalne konto użytkownika dla serwera, na którym będzie kopia zapasowa (SLAVE):
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.11' IDENTIFIED BY 'haslo';
  6. Kolejnym krokiem jest zrobienie dump-a baz danych które chcemy backupować. W tym celu logujemy się do bazy danych i wykonujemy zapytanie
    FLUSH TABLES WITH READ LOCK;
    następnie wykonujemy backup:
    mysqldump -u root -p –databases baza_danych_1 > baza_danych_1.sql
    mysqldump -u root -p –databases baza_danych_2 > baza_danych_2.sql
    teraz logujemy się do bazy danych i odblokowujemy tabele:
    UNLOCK TABLES;
  7. Kopiujemy wykonane bazy danych na serwer SLAVE
  8. Na serwerze backupowym też musimy skonfigurować odpowiednio bazę danych. W tym celu też kopiujemy plik konfiguracyjny – w systemie CentOS  znajduje się on w lokalizacji /etc/my.cnf czyli cp /etc/my.cnf /etc/my.cnf.copy
  9. Otwieramy plik my.cnf do edycji -> nano /etc/my.cnf
  10. w sekcji [mysqld] wpisujemy następujące ustawienia:
    server-id = 2
    master-host = 192.168.1.10

    master-user = slave
    master-password = haslo
    replicate-do-db = baza_danych_1
    replicate-do-db = baza_danych_2
  11. Wgrywamy dump-y baz danych:
    mysql -u root -p baza_danych_1 < baza_danych_1.sql
    mysql -u root -p baza_danych_2 < baza_danych_2.sql
  12. Następnie restartujemy usługę -> /etc/init.d/mysqld restart
  13. Jeśli serwer SLAVE nie może nawiązać połączenia z  bazą danych serwera MASTER to należy sprawdzić, czy na serwerze MASTER (Debian) nie mamy w pliku my.cnf wpisanego ustawienia:
    bind-address = 127.0.0.1
    jeśli mamy to trzeba go zakomentować:
    #bind-address = 127.0.0.1
    i ponownie restartujemy usługę
  14. Teraz na serwerze MASTER wykonujemy następujące zapytanie:
    SHOW MASTER STATUS\G;
    Odczytujemy wartość File oraz Position.
  15. Na serwerze SLAVE wykonujemy następujące zapytania:
    STOP SLAVE;
    CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='slave', MASTER_PASSWORD='haslo', MASTER_LOG_FILE='wartosc File', MASTER_LOG_POS=wartość Position;
    START SLAVE;
  16. Aby zdiagnozować czy wszystko jest w porządku należy na serwerze MASTER wykonać zapytanie:
    SHOW MASTER STATUS\G;
    a na serwerze SLAVE:
    SHOW SLAVE STATUS\G;
    Podane wartości File i Position powinny się zgadzać. Na serwerze SLAVE dodatkowo wyświetlone zostaną dane na temat połączenia z serwerem MASTER.

To by było na tyle jeśli chodzi o tworzenie kopii zapasowych baz danych. Teraz czas na kopie plików:

  1. Na serwerze, który chce backupować dane instaluję rsync-a -> apt-get install rsync
  2. Następnie aby przesyłać pliki na serwer z kopią zapasową bez podawania hasła musimy wykonać następujące czynności:
    ssh-keygen -t rsa -> zostaniemy zapytani o trzy wartości – wciskamy 3xENTER – zostaną przyjęte wartości domyślne
    przesyłamy wygenerowany plik na drugi serwer: scp /root/.ssh/id_rsa.pub login@192.168.1.11
    Po wysłaniu pliku logujemy się na drugi serwer (CentOS) i wykonujemy następujące operacje:
    mkdir .ssh
    cat id_rsa.pub >> .ssh/authorized_keys
    chmod 700 .ssh
    chmod 600 .ssh/authorized_keys
    Jeśli wszystko poszło dobrze to można się już logować z serwera głównego na backupowy bez podawania hasła
  3. Teraz aby stworzyć kopię interesujących nas plików wykonujemy następujące polecenie:
    rsync -avz /home/login/jakis_plik login@192.168.1.11:/home/login/backup/ -> oczywiście odpowiednia struktura katalogów musi istnieć na serwerze backupowym
    Użycie rsync-a pozwoli backupować tylko nowe pliki lub takie, które się zmieniły od ostatniego backupu.
  4. Ja chcę aby takie kopiowanie wykonywało się automatycznie o wybranej porze w tym celu tworzę prosty skrypt bash:nano backup.sh
    i wpisuję w nim następujący kod:
    #!/bin/bash
    rsync -avz /home/login/jakis_plik login@192.168.1.11:/home/login/backup/
    Zapisujemy i dodajemy odpowiedni wpis w crontab-ie. W tym celu wpisujemy w konsoli:
    crontab -e
    i w otwartym oknie wpisujemy:
    10 03 * * * /bin/bash /home/login/backup.sh
  5. Jeśli chcemy backupować większą ilość plików/katalogów to należy dodać odpowiednie wpisy w pliku backup.sh
  6. Zapisujemy wprowadzone zmiany i to by było na tyle – mamy gotowy mechanizm backupu plików
  7. Jeśli chcemy aby backup wykonywał się częściej to wystarczy dopisać odpowiednie reguły w crontab-ie – w moim przypadku backup jest wykonywany dziennie o godzinie 3.10 w nocy.

To by było na tyle. Może komuś się przyda.

Witam wszystkich

Dwa tygodnie temu założyłem sobie, że wypozycjonuję sklep internetowy znajomego na frazy „omnigena”, „pompy omnigena”, „sklep omnigena” no i można powiedzieć, że zadanie zostało w pewnym stopniu osiągnięte. Poniżej prezentuję zrzuty ekranu prezentujące pozycję sklepu w wynikach wyszukiwania:

Czas na kolejne wyzwania – może uda się coś więcej wypozycjonować :)

Krótki poradnik SEO

Pod adresem http://www.jayphilips.com/2010/08/02/seo-what-seo-how-great-tips-for-all/ można znaleźć krótki poradnik dotyczący SEO pod tytułem „SEO What? SEO How? Great Tips For All”

Jeśli w aplikacji pisanej w symfony chcemy za pomocą url przekazywać parametry, które zawierają „.” lub „-” to otrzymamy następujący błąd:

„Empty module and/or action after parsing the URL „/user/name.surname” (/).”

Po długich bojach udało mi się znaleźć rozwiązanie tego problemu. Wystarczy w pliku routing.yml dopisać:

requirements:
sciezka_pliku: \w(\w|\.|\-)*\w

Cały wpis dla jednego z moich modułów:


moje_pliki:
class: sfDoctrineRouteCollection
options:
model:                moje_pliki
module:               moje_pliki
prefix_path:          /moje_pliki
column:               plik
with_wildcard_routes: true
requirements:
plik: \w(\w|\.|\-)*\w

Na koniec oczywiście powinniśmy wykonać operację:

php symfony cc

„Programowanie” na Androida dla każdego

Google pracuje nad rozwiązaniem, dzięki któremu każdy będzie mógł stworzyć aplikację na system operacyjny Android. Wystarczy, że trochę pobuduje się z „klocków” i gotowe :) Krótka zapowiedź poniżej:

Bajeranckie menu – odsłona druga

Poniżej znajduje się link do kolejnej partii przykładów menu:

http://naldzgraphics.net/inspirations/30-inspiring-website-navigation-menus/

Poniżej wkleiłem link do zbioru 15 ciekawych przykładów wykonania menu z użyciem jQuery:

http://www.zlwo.com/tutorials/15-amazing-jquery-navigation-menu-tutorials/

Jesteście gotowi na SEOktoberfest 2010?!

Powered by WordPress | Theme: Motion by 85ideas.