strony www, sklepy internetowe, oprogramowanie

Archiwum kategorii ‘Bazy danych’

MySQL – kodowanie bazy danych

Czwartek, styczeń 12th, 2012

Dzisiaj podamy przykłady zapytań SQL przydatnych gdy nie mamy możliwości skorzystania z PHPMyadmina i musimy poprzez komendy SQL zarządzać kodowaniem bazy danych MySQL. Poniżej lista przydatnych naszym zdaniem komend:

1) Sprawdzenie kodowania bazy danych

W pierwszej kolejności wybieramy naszą bazę danych poprzez USE DATABASE_NAME; następnie możemy skorzystać z dwóch komend:

- SHOW VARIABLES LIKE “character_set_database”;

- SHOW VARIABLES LIKE “collation_database”;

Jeżeli wyniki nas nie usatysfakcjonowały będziemy za pewne chcieli zmienić kodowanie. Robimy to przy pomocy komendy:

2) ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;

Jeżeli nie wiemy jakie opcje wpisać w kodowaniu możemy dodatkowo sprawdzić obsługiwane przez bazę danych kodowania, wołając komendę:

3)  SHOW COLLATION;

Symfony2,Doctrine2- migracje bazy / uaktualnianie bazy

Piątek, listopad 25th, 2011

Robiąc modyfikacje i aktualizacje bazy danych przywykłem do wykorzystywania app/console doctrine:schema:update –force

Jak się okazuje istnieje inne lepsze rozwiązanie tzn zastosowanie migracji:

  • Po zmianie schema i wygenerowaniu nowych entities wykonujemy polecenie app/console doctrine:migrations:diff –env=nasze_env
  • W efekcie zostaje wygenerowany plik migracji w katalogu app/DoctrineMigrations
  • wgranie różnic należy wykonać poprzez polecenie app/console doctrine:migrations:migrate –env=nasze_env

I to wszystko , mam dzięki temu uaktualnioną strukturę tylko ostatnio zmienionej tabeli.

Połączenie poprzez konsolę do serwera MongoDB

Czwartek, listopad 24th, 2011

W trakcie programowania systemów wykorzystujących bazę MongoDB, warto wspierać się poprzez testowanie zapisu i odczytu informacji poprzez konsolę.

Aby połączyć się do serwera tej bazy danych wykonujemy polecenie: /usr/bin/mongo 127.0.0.1:27017/nazwa_bazy_danych

które połączy nas do wskazanej bazy danych, a tam np możemy już wyszukiwać elementy poprze polecenie : db.collection_name.find();

Możemy również zapoznać się z całym szeregiem innych metod do wywołania poprzez polecenie help() np: db.help()

Automatyczny backup plików i bazy danych

Niedziela, kwiecień 17th, 2011

Jeżeli ktoś z Was dysponuje dedykowanym serwerem i chciałby cyklicznie wykonywać backup plików i bazy danych bądź chciałby zabezpieczać dane ze swojego komputera – rozwiązaniem może być skrypt uruchamiany poprzez Cron’a. Rozwiązanie to jest skuteczne w przypadku systemów Linux. Nasz przykład będzie opierał się o system FreeBSD.

W pierwszej kolejności opiszmy schemat działania. W kolejnych krokach wygląda to w sposób następujący:

  1. utworzenie katalogu tymczasowego w którego nazwie będzie dzisiejsza data
  2. utworzenie wewnątrz katalogu tymczasowego katalogu na pliki i oddzielnego na dump bazy danych
  3. utworzenie backupu bazy danych i zapisanie w naszej lokalizacji
  4. utworzenie backupu plików w naszej lokalizacji
  5. usunięcie ewentualnych plików SVN
  6. spakowanie wszystkiego do formatu tar.gz
  7. wysłanie informacji o utworzeniu kopii na naszego maila
  8. czyszczenie plików tymczasowych
  9. zakończenie skryptu

Na podstawie tego schematu możemy utworzyć niezbędny kod.

#!/bin/sh
# utworzenie zmiennej wykorzystanej do budowania ścieżki
BACKUP_DIR=backup_"`/bin/data +%d_%m_%Y`"
# utworzenie katalogu tymczasowego z datą
/bin/mkdir /usr/home/uzytkownik/$BACKUP_DIR
# utworzenie katalogu na pliki wewnątrz katalogu tymczasowego
/bin/mkdir /usr/home/uzytkownik/$BACKUP_DIR/www
# utworzenie backupu bazy danych
/usr/local/bin/mysqldump -u user -phaslo nazwa_bazy > /usr/home/uzytkownik/$BACKUP_DIR/dump.sql
# backup plików
/bin/cp -rf /sciezka/katalog_z_plikami/* /usr/home/uzytkownik/$BACKUP_DIR/www/
# usuniecie plików SVN jeżeli takie istnieją
/bin/rm -rf `/usr/bin/find /usr/home/uzytkownik/$BACKUP_DIR/www/ -type d -name .svn`
# spakowanie wszystkiego do pliku tar.gz
/usr/bin/tar -zcvf /usr/home/uzytkownik/$BACKUP_DIR.tar.gz /usr/home/uzytkownik/$BACKUP_DIR/*
# utworzenie tresci maila o stworzeniu backupu
/usr/bin/touch /usr/home/uzytkownik/$BACKUP_DIR/mail.txt && /bin/echo "NASZA TREŚĆ WIADOMOŚCI">/usr/home/uzytkownik/$BACKUP_DIR/mail.txt
# wysyłka wiadomości

/usr/bin/mail -s "tytul wiadomosci" "adresat@domena.pl" # usuniecie katalogu tymczasowego
/bin/rm -rf /usr/home/uzytkownik/$BACKUP_DIR
# zakończenie skryptu
exit

Skrypt tez zapisujemy pod dowolną nazwą a następnie przyznajemy mu prawa wykonywania 0777 i możemy już uruchamiać.
Należy zwrócić uwagę na ścieżki poleceń i plików – muszą one być ścieżkami bezwzględnymi. Mogą one również różnić się od tu podanych, które obowiązują w FreeBSD.

Jeżeli chcemy, możemy również plik ten uruchamiać poprzez crona np komendą:
1 1 * * * root cd /usr/home/uzytkownik && ./nasz_plik.sh

MySQL Multi Delete – usuwanie przy wykorzystaniu wielu tabel

Poniedziałek, kwiecień 4th, 2011

Załóżmy że mam złożone zapytanie którego zadaniem jest pobieranie danych z dwóch tabel połączonych ze sobą poprzez LEFT JOIN.

Zapytanie będzie miało postać podobną do:

SELECT * FROM table1 as t1 LEFT JOIN table2 as t2 ON (t1.property1=t2.property1 AND t1.property2=t2.property2) WHERE t1.property3=123 AND t1.property4 IS NOT NULL

Jak teraz sprawnie przekształcić to zapytanie w usuwanie?

Musimy skorzystać z mechanizmu nazywanego w MySQL “Multi Delete” . Modyfikujemy zapytanie do postaci następuącej:

DELETE t1 FROM table1 as t1 LEFT JOIN table2 as t2 ON (t1.property1=t2.property1 AND t1.property2=t2.property2) WHERE t1.property3=123 AND t1.property4 IS NOT NULL

W formule dodajemy po prostu tabelę z której chcemy usuwać. Równie dobrze moglibyśmy usuwać jednocześnie z dwóch tabel modyfikując początek zapytania do postaci:

DELETE t1,t2 FROM …

Więcej na ten temat można doczytać na stronie MySQL : http://dev.mysql.com/doc/refman/5.0/en/delete.html