inne php i mysql witryna www oparta na bazie danych wydanie iv kevin yank ebook

background image

PHP i MySQL. Witryna
WWW oparta na bazie
danych. Wydanie IV

Wykorzystaj potencja³ PHP oraz MySQL w Twoich serwisach WWW!

• Jak zainstalowaæ i uruchomiæ w³asny serwer WWW?
• Jak stworzyæ autorski system zarz¹dzania treœci¹?
• Jak kontrolowaæ dostêp do stron WWW?

PHP i MySQL to najpopularniejszy tandem webmasterski. Iloœæ serwisów opartych na
tym po³¹czeniu jest nie do ogarniêcia. Sk¹d taka popularnoœæ? Niezale¿nie od innych
zalet atutem tego rozwi¹zania jest prostota. Ju¿ kilka chwil wystarczy, ¿eby rozpocz¹æ
przygodê z profesjonalnym tworzeniem serwisów WWW. A je¿eli poœwiêcisz trochê
wiêcej czasu, poznasz i wykorzystasz jeszcze wiêcej mo¿liwoœci PHP i MySQL.
Ale czy rzeczy proste nie mog¹ byæ jeszcze prostsze?

Mog¹. Z ksi¹¿k¹ „PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IV”
b³yskawicznie przebrniesz przez proces instalacji wszystkich niezbêdnych komponentów
– niezale¿nie od systemu, którego u¿ywasz. Autor opisuje tu sposób instalacji na platformach
Windows, MacOS X oraz Linux. Po udanej instalacji napiszesz swój pierwszy skrypt,
a nastêpnie przejdziesz do kolejnych, coraz bardziej zaawansowanych tematów. Wœród
nich znajdziesz opisy takich zagadnieñ, jak: jêzyk SQL, sk³adnia PHP, nawi¹zywanie
po³¹czenia z baz¹, publikowanie treœci znajduj¹cych siê w bazie. Ponadto zdobêdziesz
wiedzê z zakresu administrowania baz¹ MySQL, systemów zarz¹dzania treœci¹,
zarz¹dzania sesj¹ czy te¿ wykorzystania wyra¿eñ regularnych. Ksi¹¿ka ta jest nieocenion¹
pomoc¹ dla wszystkich osób zaczynaj¹cych przygodê ze stronami WWW oraz jêzykami
PHP i SQL.

• Instalacja systemu na platformach Windows, Linux oraz MacOS X
• MySQL – podstawowe zagadnienia
• PHP – sk³adnia, podstawowe polecenia i struktury
• Nawi¹zywanie po³¹czenia z baz¹ danych z poziomu PHP
• Publikacja treœci zawartych w bazie MySQL
• Zasady projektowania relacyjnej bazy danych
• Tworzenie systemu zarz¹dzania treœci¹
• Wykorzystanie wyra¿eñ regularnych
• Kontrola dostêpu do stron
• Zarz¹dzanie sesj¹ oraz „ciasteczkami”
• Zadania administracyjne w bazie MySQL
• Tworzenie zaawansowanych zapytañ MySQL
• Przechowywanie i wykorzystanie danych binarnych

Twórz dynamiczne, bogate w treœci i ³atwe w zarz¹dzaniu witryny WWW!

Autor: Kevin Yank
T³umaczenie: Daniel Kaczmarek
ISBN: 978-83-246-2580-2
Tytu³ orygina³u:

Build Your Own Database

Driven Web Site Using PHP & MySQL

Format: 158×235, stron: 424

background image

Spis tre

Ĉci

5

Spis tre

Ĉci

Przedmowa .................................................................................... 11

Rozdzia

ä 1. Instalacja ....................................................................................... 19

W

áasny serwer WWW .................................................................................................... 20

Instalacja w systemie Windows ...................................................................................... 21

Jednoczesna instalacja wszystkich komponentów ................................................. 21
Instalacja poszczególnych komponentów .............................................................. 26

Instalowanie w systemie Mac OS X ............................................................................... 34

Jednoczesna instalacja wszystkich komponentów ................................................. 34
Instalacja poszczególnych komponentów .............................................................. 37

Instalacja w systemie Linux ............................................................................................ 43

Instalowanie serwera baz danych MySQL ............................................................. 44
Instalowanie j

Ċzyka PHP ....................................................................................... 47

Zadania poinstalacyjne ................................................................................................... 53
O co zapyta

ü dostawcĊ usáug internetowych? ................................................................. 56

Nasz pierwszy skrypt PHP .............................................................................................. 57
Narz

Ċdzia gotowe, pora do pracy ................................................................................... 60

Rozdzia

ä 2. Wprowadzenie do systemu MySQL .................................................. 61

Wprowadzenie do baz danych ........................................................................................ 61
Logowanie si

Ċ na serwerze MySQL ............................................................................... 62

SQL — Strukturalny J

Ċzyk ZapytaĔ ............................................................................... 67

Tworzenie bazy danych .................................................................................................. 67
Tworzenie tabel .............................................................................................................. 68
Wstawianie danych do tabeli .......................................................................................... 70
Przegl

ądanie danych przechowywanych w bazie ........................................................... 72

Modyfikowanie danych przechowywanych w bazie ...................................................... 74
Usuwanie danych przechowywanych w bazie ................................................................ 75
Niech PHP sam napisze kod SQL ................................................................................... 75

Rozdzia

ä 3. Wprowadzenie do jözyka PHP ......................................................... 77

Podstawowe polecenia i sk

áadnia ................................................................................... 79

Zmienne, operatory i komentarze ................................................................................... 81
Tablice ............................................................................................................................ 82
Interakcja z u

Īytkownikiem i formularze ....................................................................... 84

Struktury steruj

ące .......................................................................................................... 95

background image

6

PHP i MySQL. Witryna WWW oparta na bazie danych

Ukrywanie spoin ........................................................................................................... 103

Nie nag

áaĞniaj swoich decyzji w zakresie technologii ......................................... 104

U

Īywaj szablonów PHP ....................................................................................... 105

Wiele szablonów, jeden kontroler ........................................................................ 107

Dajcie mi baz

Ċ danych! ................................................................................................ 110

Rozdzia

ä 4. Publikowanie w sieci WWW danych przechowywanych

w bazie MySQL ............................................................................. 111

Idea dzia

áania ................................................................................................................ 111

àączenie siĊ z bazą MySQL za pomocą PHP ............................................................... 113
Wysy

áanie zapytaĔ SQL za pomocą jĊzyka PHP .......................................................... 118

Obs

áuga zbiorów wyników zapytania SELECT ........................................................... 120

Wstawianie danych do bazy ......................................................................................... 125
Usuwanie danych z bazy .............................................................................................. 133
Misja zako

Ĕczona ......................................................................................................... 139

Rozdzia

ä 5. Projektowanie relacyjnych baz danych .......................................... 141

Umo

Īliwianie autorom podpisywania kawaáów ........................................................... 142

Prosta regu

áa: dane trzeba przechowywaü osobno ........................................................ 143

Korzystanie z wielu tabel ............................................................................................. 147
Proste relacje ................................................................................................................ 151
Relacje typu wiele-do-wielu ......................................................................................... 153
Jeden za wszystkich, wszyscy za jednego! ................................................................... 155

Rozdzia

ä 6. Programowanie strukturalne w jözyku PHP .................................... 157

Do

áączanie plików ........................................................................................................ 158

Do

áączanie zawartoĞci HTML ............................................................................. 158

Do

áączanie kodu PHP .......................................................................................... 160

Rodzaje do

áączania .............................................................................................. 164

Wspó

áuĪytkowane pliki doáączane ....................................................................... 165

Funkcje u

Īytkownika i biblioteki funkcji ..................................................................... 167

Zasi

Ċg zmiennych i dostĊp do zmiennych globalnych ......................................... 169

Programowanie strukturalne w praktyce: funkcje pomocnicze szablonów ................... 173
Najlepszy sposób .......................................................................................................... 176

Rozdzia

ä 7. System zarzñdzania zawartoĈciñ ................................................... 177

Strona startowa systemu ............................................................................................... 178
Zarz

ądzanie autorami ................................................................................................... 181

Usuwanie autorów ............................................................................................... 183
Dodawanie i edytowanie autorów ........................................................................ 186

Zarz

ądzanie kategoriami ............................................................................................... 190

Zarz

ądzanie kawaáami .................................................................................................. 195

Wyszukiwanie kawa

áów ...................................................................................... 195

Dodawanie i edytowanie kawa

áów ....................................................................... 201

Usuwanie kawa

áów .............................................................................................. 211

Podsumowanie .............................................................................................................. 212

Rozdzia

ä 8. Formatowanie zawartoĈci przy uĔyciu wyraĔeþ regularnych ............ 215

Wyra

Īenia regularne ..................................................................................................... 216

Formatowanie

áaĔcuchów tekstu za pomocą wyraĪeĔ regularnych .............................. 220

Wyt

áuszczenie i kursywa ..................................................................................... 221

Akapity ................................................................................................................ 223
Hiper

áącza ............................................................................................................ 225

Domykanie znaczników ....................................................................................... 228
Sk

áadamy wszystkie elementy w jedną caáoĞü ..................................................... 229

Automatyczne zatwierdzanie zawarto

Ğci ...................................................................... 232

background image

Spis tre

Ĉci

7

Rozdzia

ä 9. Obsäuga cookies i sesji oraz kontrola dostöpu ............................... 233

Cookies ......................................................................................................................... 233
Obs

áuga sesji w PHP ..................................................................................................... 238

Prosty koszyk na zakupy ...................................................................................... 240

Kontrola dost

Ċpu .......................................................................................................... 248

Projekt bazy danych ............................................................................................. 248
Kod

Ĩródáowy kontrolera ..................................................................................... 252

Biblioteka funkcji ................................................................................................ 257
Zarz

ądzanie hasáami i rolami ............................................................................... 266

Kolejne wyzwanie, czyli moderowanie kawa

áów ................................................ 273

Nieograniczone mo

ĪliwoĞci .......................................................................................... 275

Rozdzia

ä 10. Administrowanie bazñ MySQL ....................................................... 277

phpMyAdmin ............................................................................................................... 278
Kopie zapasowe baz danych MySQL ........................................................................... 282

Wykonywanie kopii za pomoc

ą programu mysqldump ....................................... 282

Kopie przyrostowe w binarnym dzienniku aktualizacji ....................................... 283

Kontrola dost

Ċpu w MySQL ......................................................................................... 286

Nadawanie uprawnie

Ĕ za pomocą polecenia GRANT ......................................... 287

Odbieranie uprawnie

Ĕ przy uĪyciu polecenia REVOKE ..................................... 289

Porady na temat kontroli dost

Ċpu ......................................................................... 290

Problem braku dost

Ċpu ........................................................................................ 292

Sprawdzanie i naprawianie plików danych MySQL ..................................................... 293
Lepiej si

Ċ ubezpieczaü, niĪ potem Īaáowaü .................................................................. 295

Rozdzia

ä 11. Zaawansowane zapytania SQL ...................................................... 297

Sortowanie wyników zapytania SELECT .................................................................... 297
Ustawianie limitów dla zapyta

Ĕ .................................................................................... 299

Blokowanie tabel .......................................................................................................... 300
Aliasy nazw kolumn i tabel .......................................................................................... 302
Grupowanie wyników zapytania SELECT ................................................................... 305
Z

áączenie lewostronne .................................................................................................. 306

Ograniczanie wyników za pomoc

ą klauzuli HAVING ................................................. 309

Dalsze lektury ............................................................................................................... 310

Rozdzia

ä 12. Dane binarne ................................................................................ 313

Cz

ĊĞciowo dynamiczne strony WWW ......................................................................... 313

Obs

áuga áadowania plików ........................................................................................... 319

Przypisywanie plikom niepowtarzalnych nazw ................................................... 322

Rejestrowanie w bazie danych

áadowanych plików ...................................................... 324

Binarne typy kolumn ........................................................................................... 325
Zapisywanie plików ............................................................................................. 327
Przegl

ądanie zapisanych plików .......................................................................... 328

Kompletny skrypt ......................................................................................................... 332
Problemy zwi

ązane z wielkimi plikami ........................................................................ 338

Rozmiar pakietów MySQL .................................................................................. 338
Ograniczenia czasu dzia

áania skryptów PHP ....................................................... 338

Zako

Ĕczenie .................................................................................................................. 339

Dodatek A Sk

äadnia MySQL ........................................................................... 341

Instrukcje j

Ċzyka SQL obsáugiwane przez MySQL ...................................................... 342

ALTER TABLE ................................................................................................... 342
ANALYZE TABLE ............................................................................................. 344
CREATE DATABASE ........................................................................................ 344
CREATE INDEX ................................................................................................ 345

background image

8

PHP i MySQL. Witryna WWW oparta na bazie danych

CREATE TABLE ................................................................................................ 345
DELETE .............................................................................................................. 347
DESCRIBE/DESC ............................................................................................... 348
DROP DATABASE ............................................................................................ 348
DROP INDEX ..................................................................................................... 348
DROP TABLE ..................................................................................................... 348
EXPLAIN ............................................................................................................ 348
GRANT ............................................................................................................... 349
INSERT ............................................................................................................... 349
LOAD DATA INFILE ......................................................................................... 350
LOCK/UNLOCK TABLES ................................................................................. 351
OPTIMIZE TABLE ............................................................................................. 352
RENAME TABLE ............................................................................................... 352
REPLACE ........................................................................................................... 353
REVOKE ............................................................................................................. 353
SELECT ............................................................................................................... 353
SET ...................................................................................................................... 359
SHOW ................................................................................................................. 359
TRUNCATE ........................................................................................................ 360
UNLOCK TABLES ............................................................................................. 361
UPDATE ............................................................................................................. 361
USE ...................................................................................................................... 362

Dodatek B Funkcje MySQL ............................................................................ 363

Funkcje przep

áywu sterowania ..................................................................................... 363

Funkcje matematyczne ................................................................................................. 364
Funkcje tekstowe .......................................................................................................... 366
Funkcje daty i czasu ..................................................................................................... 370
Pozosta

áe funkcje .......................................................................................................... 374

Funkcje u

Īywane w klauzulach GROUP BY ............................................................... 378

Dodatek C Typy danych dla kolumn tabel MySQL ........................................... 379

Typy liczbowe .............................................................................................................. 380
Typy znakowe .............................................................................................................. 383
Typy daty i czasu .......................................................................................................... 387

Dodatek D Funkcje PHP wspó

äpracujñce z MySQL .......................................... 389

Najcz

ĊĞciej uĪywane funkcje mysqli_* w jĊzyku PHP ................................................ 389

mysqli_affected_rows .......................................................................................... 390
mysqli_character_set_name ................................................................................. 390
mysqli_close ........................................................................................................ 390
mysqli_connect .................................................................................................... 390
mysqli_connect_errno .......................................................................................... 391
mysqli_connect_error .......................................................................................... 391
mysqli_data_seek ................................................................................................. 391
mysqli_errno ........................................................................................................ 392
mysqli_error ......................................................................................................... 392
mysqli_fetch_all .................................................................................................. 392
mysqli_fetch_array .............................................................................................. 393
mysqli_fetch_assoc .............................................................................................. 393
mysqli_fetch_field ............................................................................................... 393
mysqli_fetch_field_direct .................................................................................... 393
mysqli_fetch_fields .............................................................................................. 394

background image

Spis tre

Ĉci

9

mysqli_fetch_lengths ........................................................................................... 394
mysqli_fetch_object ............................................................................................. 394
mysqli_fetch_row ................................................................................................ 395
mysqli_field_count .............................................................................................. 395
mysqli_field_seek ................................................................................................ 395
mysqli_field_tell .................................................................................................. 395
mysqli_free_result ............................................................................................... 395
mysqli_get_client_info ........................................................................................ 395
mysqli_get_client_version ................................................................................... 396
mysqli_get_host_info ........................................................................................... 396
mysqli_get_proto_info ......................................................................................... 396
mysqli_get_server_info ........................................................................................ 396
mysqli_get_server_version .................................................................................. 396
mysqli_info .......................................................................................................... 396
mysqli_insert_id .................................................................................................. 397
mysqli_num_fields ............................................................................................... 397
mysqli_num_rows ................................................................................................ 397
mysqli_ping ......................................................................................................... 397
mysqli_query ....................................................................................................... 397
mysqli_real_escape_string ................................................................................... 398
mysqli_real_query ............................................................................................... 398
mysqli_select_db ................................................................................................. 398
mysqli_set_charset ............................................................................................... 398
mysqli_stat ........................................................................................................... 399
mysqli_store_result .............................................................................................. 399
mysqli_thread_id ................................................................................................. 399
mysqli_use_result ................................................................................................ 399

Skorowidz .................................................................................... 401

background image

Rozdzia

ä 10.

Administrowanie
baz

ñ MySQL

Sercem niemal ka

Īdej dobrze zaprojektowanej witryny tematycznej jest relacyjna baza

danych. W tej ksi

ąĪce utworzyliĞmy bazĊ danych przy uĪyciu systemu relacyjnych

baz danych MySQL. Programi

Ğci witryn internetowych chĊtnie wybierają MySQL,

poniewa

Ī jest darmowy, a takĪe ze wzglĊdu na áatwoĞü uruchomienia. Jak siĊ przeko-

nali

Ğmy w rozdziale 1., „Instalacja”, nowy uĪytkownik, uzbrojony w odpowiednie instruk-

cje, mo

Īe zainstalowaü i uruchomiü serwer MySQL w czasie krótszym niĪ 30 minut —

a przy niewielkim do

Ğwiadczeniu nawet w krótszym niĪ dziesiĊü!

Ten, kto zamierza wykorzysta

ü serwer MySQL tylko do wypróbowania przykáadów

i poeksperymentowania, prawdopodobnie nie potrzebuje niczego poza opisem procesu
instalacji, który omówili

Ğmy w rozdziale 1., „Instalacja”. Natomiast czytelnik, który

chce zbudowa

ü bazĊ danych bĊdącą podstawą dla prawdziwej witryny WWW — na

przyk

áad witryny firmowej — powinien zapoznaü siĊ jeszcze z kilkoma zagadnieniami,

zanim zacznie polega

ü na serwerze MySQL w codziennej pracy.

Najpierw, zgodnie z obietnic

ą, którą záoĪyáem w rozdziale 2., pokaĪĊ, jak skonfiguro-

wa

ü narzĊdzie phpMyAdmin, aby przeglądaü i edytowaü bazy danych oraz administrowaü

nimi z poziomu przegl

ądarki internetowej. Korzystanie z phpMyAdmin jest generalnie

o wiele

áatwiejsze niĪ zmaganie siĊ z wierszem poleceĔ serwera MySQL, zwáaszcza gdy

serwer ten dzia

áa na innym komputerze.

Ĩniej zajmiemy siĊ kopiami zapasowymi. Tworzenie kopii zapasowych danych waĪ-

nych dla nas albo naszej firmy powinno mie

ü wysoką pozycjĊ na liĞcie priorytetów

administratora. Niestety, konfigurowanie wykonywania kopii zapasowych nie nale

Īy

do najciekawszych obowi

ązków administratora, wiĊc zazwyczaj taka procedura tworzona

jest jednorazowo, z konieczno

Ğci i uznawana za „wystarczająco dobrą” dla wszystkich

zastosowa

Ĕ. KaĪdy, kto dotychczas na pytanie: „Czy powinniĞmy zrobiü kopie zapa-

sowe naszych baz danych?” odpowiada

á: „W porządku, zrobimy kopie razem z caáą

background image

278

PHP i MySQL. Witryna WWW oparta na bazie danych

reszt

ą”, powinien uwaĪnie przeczytaü ten rozdziaá. Zademonstrujemy, dlaczego stan-

dardowe rozwi

ązanie tworzenia kopii zapasowych jest niewystarczające przy wielu

instalacjach MySQL oraz poka

Īemy wáaĞciwą metodĊ wykonywania i przywracania

kopii zapasowej bazy MySQL.

W rozdziale 1., „Instalacja”, skonfigurowali

Ğmy serwer MySQL tak, aby pozwalaá na

áączenie siĊ jako specjalny uĪytkownik root z dowolnie wybranym hasáem. UĪytkownik
root w MySQL (który zreszt

ą nie ma nic wspólnego z uĪytkownikiem root w Linuksie

i podobnych mu systemach) ma prawa odczytu i zapisu do wszystkich baz i tabel.
W wielu organizacjach konieczne jest tworzenie u

Īytkowników mających dostĊp tylko

do poszczególnych baz i tabel oraz ograniczanie w jaki

Ğ sposób tego dostĊpu (na przy-

k

áad dostĊp do pewnej tabeli z prawem tylko do odczytu). W tym rozdziale dowiemy

si

Ċ równieĪ, jak umoĪliwiü takie obostrzenia przy uĪyciu dwóch nowych poleceĔ MySQL,

czyli

GRANT

i

REVOKE

.

W pewnych sytuacjach, takich jak zaniki pr

ądu, bazy MySQL mogą ulec uszkodze-

niu. W takim przypadku mo

Īna siĊ jednak odwoáaü do sporządzonych wczeĞniej kopii

zapasowych. Zako

Ĕczymy przegląd administrowania bazami MySQL, poznając narzĊ-

dzie do sprawdzania i naprawiania prostych uszkodze

Ĕ baz.

phpMyAdmin

Podobnie jak wi

ĊkszoĞü kodu prezentowanego w ksiąĪce, phpMyAdmin

1

to skrypt PHP

przeznaczony do komunikowania si

Ċ z serwerem MySQL za poĞrednictwem stron

WWW generowanych „w locie”. Jednak zamiast prezentowa

ü uĪytkownikom strony

mi

áe dla oka, phpMyAdmin ma za zadanie udostĊpnienie interfejsu WWW, za pomocą

którego b

Ċdzie moĪliwe administrowanie serwerem MySQL.

Aplikacja phpMyAdmin pozwala na wykonanie niemal ka

Īdej czynnoĞci, dostĊpnej

z poziomu wiersza polece

Ĕ serwera MySQL. Jednak w phpMyAdmin uĪywa siĊ do tego

celu myszy, a nie wpisywanych r

Ċcznie zapytaĔ jĊzyka SQL. OczywiĞcie, jeĪeli musisz

wykona

ü zadanie, które moĪna wyraziü wyáącznie za pomocą rĊcznie napisanego kodu

SQL, phpMyAdmin równie

Ī na to pozwoli, poniewaĪ udostĊpnia formularz sáuĪący

do wpisywania kodu SQL. Kod ten zostanie wykonany, a wynik zostanie wy

Ğwietlony

w przegl

ądarce.

Na wi

ĊkszoĞci komercyjnych serwerów WWW dostĊpne są juĪ prekonfigurowane wersje

phpMyAdmin, stanowi

ące element konsoli administracyjnej. Poza tym, jeĪeli samo-

dzielnie zainstalujesz serwer MySQL pochodz

ący z rozwiązania pakietowego, takiego

jak WampServer czy MAMP, szybko zauwa

Īysz, Īe tam równieĪ udostĊpniana jest

aplikacja phpMyAdmin. Wówczas konieczne jednak b

Ċdzie odpowiednie skonfiguro-

wanie aplikacji przez podanie has

áa uĪytkownika root serwera MySQL, które zostaáo

zdefiniowane w rozdziale 1.

1

http://www.phpmyadmin.net/

background image

Rozdzia

ä 10.

i Administrowanie bazñ MySQL

279

Je

Īeli na serwerze, którego uĪywasz, phpMyAdmin jest niedostĊpna, moĪesz zainstalo-

wa

ü aplikacjĊ samodzielnie, co nie jest trudnym zadaniem. W tym celu naleĪy przejĞü

na stron

Ċ pobierania phpMyAdmin

2

i pobra

ü najnowszą zalecaną wersjĊ (w trakcie

powstawania tej ksi

ąĪki byáa to wersja 3.1.3.2) w preferowanym formacie (.zip dla

systemu Windows lub Mac OS X b

ądĨ teĪ .tar.gz dla Linuksa). Plik trzeba rozpakowaü,

a po rozpakowaniu oka

Īe siĊ, Īe archiwum zawiera katalog phpMyAdmin-wersja-

-j

Ċzykowa. NazwĊ tego katalogu trzeba zmieniü na phpMyAdmin i przenieĞü do gáów-

nego katalogu dokumentów WWW serwera internetowego.

Nast

Ċpnie w edytorze tekstu trzeba utworzyü nowy plik o nazwie config.inc.php i zapi-

sa

ü go w katalogu phpMyAdmin. W pliku naleĪy wpisaü nastĊpujący fragment kodu:

<?php
$cfg['blowfish_secret'] = 'bhvhbv3577h3qguw83qdh37b2fnqelinbq38qhg';

$cfg['Servers'][1]['auth_type'] = 'cookie';
?>

Elementowi

$cfg['blowfish_secret']

mo

Īna przypisaü dowolną wartoĞü záoĪoną z liter

i cyfr. Nie trzeba nawet zapami

Ċtywaü wpisanej wartoĞci, poniewaĪ wystarczy, by byáa

jak najtrudniejsza do zgadni

Ċcia przez potencjalnego hakera. Dlatego im bardziej ciąg

znaków b

Ċdzie przypominaá ciąg wygenerowany losowo, tym lepiej.

Drugi wiersz kodu konfiguruje phpMyAdmin w taki sposób, by aplikacja

áączyáa siĊ

z serwerem MySQL znajduj

ącym siĊ na tym samym komputerze oraz serwer baz danych

wymaga

á podania nazwy uĪytkownika i hasáa. JeĪeli wykorzystywany serwer MySQL

dzia

áa na innym komputerze albo chcesz, by phpMyAdmin logowaá siĊ do serwera

baz danych automatycznie, trzeba wprowadzi

ü pewne zmiany, które najlepiej są opisane

w dokumentacji aplikacji. Wystarczy w przegl

ądarce internetowej otworzyü plik

Documentation.html, który znajduje si

Ċ w katalogu phpMyAdmin.

Gdy plik konfiguracyjny jest ju

Ī gotowy, naleĪy otworzyü przeglądarkĊ i wywoáaü

adres http://localhost/phpMyAdmin/ (lub inny, który wskazuje na serwerze WWW kata-
log

phpMyAdmin). W odpowiedzi w przegl

ądarce powinna pojawiü siĊ strona logowa-

nia, widoczna na rysunku 10.1.

Je

Īeli na stronie logowania pojawi siĊ ostrzeĪenie dotyczące braku moĪliwoĞci zaáa-

dowania rozszerzenia mcrypt, mo

Īna je z czystym sumieniem zignorowaü. Na wiĊk-

szo

Ğci serwerów rozszerzenie mcrypt jest komponentem opcjonalnym, którego zainsta-

lowanie do

Ğü znacząco powinno zwiĊkszyü wydajnoĞü dziaáania phpMyAdmin, lecz

i bez tego rozszerzenia aplikacja b

Ċdzie sobie radziü bez problemu

3

.

2

http://www.phpmyadmin.net/home_page/downloads.php

3

Rozszerzenie mcrypt jest wymagane w niektórych 64-bitowych systemach operacyjnych. Aplikacja
phpMyAdmin wy

Ğwietli odpowiedni komunikat, jeĞli okaĪe siĊ, Īe nie moĪe obyü siĊ bez tego rozszerzenia.

W takim przypadku trzeba b

Ċdzie dodaü rozszerzenie do PHP. W systemie Windows wystarczy w tym

celu jedynie odkomentowa

ü wiersz

extension=php_mcrypt.dll pliku php.ini

, lecz w systemach Mac OS X

i Linux konieczne jest zainstalowanie biblioteki programistycznej libmcrypt i wykonanie rekompilacji
PHP. Trudno powiedzie

ü, by byá to najlepszy sposób spĊdzania popoáudnia!

background image

280

PHP i MySQL. Witryna WWW oparta na bazie danych

Rysunek 10.1.
Ekran logowania
do aplikacji
phpMyAdmin

W polu U

Īytkownik naleĪy wpisaü

root

, natomiast w polu Has

áo trzeba podaü hasáo

u

Īytkownika root na serwerze MySQL. Alternatywnie, jeĪeli nie znasz hasáa uĪytkow-

nika root na serwerze baz danych, z którym si

Ċ áączysz, wpisz nazwĊ uĪytkownika

i has

áo, jakie znasz. Aplikacja phpMyAdmin zacznie wówczas pracĊ z takimi samymi

uprawnieniami, jakie posiada zastosowany u

Īytkownik MySQL.

Po zalogowaniu si

Ċ w przeglądarce powinna pojawiü siĊ strona podobna do widocznej

na rysunku 10.2.

Rysunek 10.2. Interfejs aplikacji phpMyAdmin mo

Īe byü trochĊ zniechĊcający, ale nie poddawaj siĊ!

Nie warto stresowa

ü siĊ przytáaczającą liczbą opcji udostĊpnianych przez phpMyAdmin.

Aplikacja rzeczywi

Ğcie jest bardzo záoĪona, lecz gdy tylko poznasz ją trochĊ bliĪej,

praca z ni

ą przestanie byü jakimkolwiek problemem.

background image

Rozdzia

ä 10.

i Administrowanie bazñ MySQL

281

Na pocz

ątek warto spojrzeü na listĊ dostĊpnych baz danych, widoczną po lewej stronie.

Je

Īeli phpMyAdmin áączy siĊ z serwerem MySQL, na którym implementowaáeĞ przy-

k

áady opisywane w tej ksiąĪce, powinieneĞ wĞród dostĊpnych baz danych ujrzeü miĊdzy

innymi baz

Ċ

ijdb

. Je

Ğli tak nie jest, moĪesz ją utworzyü choüby teraz.

Je

Īeli posiadasz uprawnienia do tworzenia baz danych na serwerze MySQL, skorzystaj

z formularza Utwórz now

ą bazĊ danych widocznego mniej wiĊcej na Ğrodku ekranu,

aby zbudowa

ü nową bazĊ danych

ijdb

. Na li

Ğcie rozwijanej System porównaĔ dla

po

áączenia MySQL moĪna pozostawiü wartoĞü domyĞlną. Gdy klikniesz przycisk Utwórz,

phpMyAdmin utworzy now

ą, pustą bazĊ danych

ijdb

i wy

Ğwietli komunikat „Nie zna-

leziono tabeli w bazie danych”, widoczny na rysunku 10.3.

Rysunek 10.3. Nie znaleziono tabeli w bazie danych

Je

Īeli natomiast moĪesz korzystaü tylko z jednej bazy danych, którą specjalnie utwo-

rzy

á administrator (na przykáad administrator dostawcy usáug internetowych), kliknij

nazw

Ċ tej bazy w menu po lewej stronie. RównieĪ w tym przypadku w przeglądarce

wy

Ğwietlona zostanie lista tabel lub komunikat „Nie znaleziono tabeli w bazie danych”,

je

Īeli baza danych bĊdzie pusta.

Teraz za pomoc

ą phpMyAdmin moĪesz utworzyü wszystkie tabele niezbĊdne do odpo-

wiedniego funkcjonowania bazy danych witryny zarz

ądzania kawaáami. W tym celu

kliknij zak

áadkĊ Import u góry strony, a nastĊpnie w sekcji Plik do importu wskaĪ plik

archiwum kodów

Ĩródáowych ksiąĪki o nazwie Rozdzial09/sql/ijdb.sql. KlikniĊcie

przycisku Wykonaj u do

áu strony spowoduje, Īe aplikacja phpMyAdmin przeĞle zawar-

to

Ğü wskazanego pliku do serwera MySQL i na tej podstawie powstaną tabele i przykáa-

dowe dane bazy do zarz

ądzania dowcipami.

Nazwy utworzonych tabel powinny si

Ċ pojawiü z lewej strony ekranu przeglądarki.

Po klikni

Ċciu myszą nazwy którejĞ z tabel bĊdzie moĪna przejrzeü jej zawartoĞü; warto

równie

Ī przejrzeü wszystkie zakáadki dostĊpne w aplikacji phpMyAdmin. WiĊkszoĞü

dost

Ċpnych opcji nie powinna budziü wątpliwoĞci, jednak przeznaczenie niektórych

zak

áadek moĪe wydaü siĊ niejasne. JeĪeli jesteĞ ciekaw, do czego sáuĪy dana funkcja, po

prostu uruchom j

ą i zobacz, jaki bĊdzie wynik (oczywiĞcie, na serwerze MySQL, który

nie zawiera

Īadnych danych!). Szczególną ostroĪnoĞü naleĪy zachowaü przy przeglą-

daniu zak

áadki UsuĔ, która usuwa caáą bazĊ danych.

background image

282

PHP i MySQL. Witryna WWW oparta na bazie danych

Niewielu programistów PHP zna ka

Īdą funkcjĊ tak záoĪonego narzĊdzia, jakim jest

phpMyAdmin. Jednak nawet zrozumienie tylko podstawowych funkcji aplikacji sprawi,

Īe narzĊdzie szybko stanie siĊ nieodzowne do administrowania bazami danych na
serwerze MySQL.

Kopie zapasowe baz danych MySQL

Podobnie jak w przypadku serwerów WWW, wi

ĊkszoĞü serwerów MySQL musi dziaáaü

24 godziny na dob

Ċ, siedem dni w tygodniu. Powoduje to, Īe tworzenie kopii zapaso-

wych plików bazy MySQL jest problematyczne. Serwer MySQL u

Īywa pamiĊci pod-

r

Ċcznej i buforowania, aby zwiĊkszyü efektywnoĞü uaktualniania plików bazy prze-

chowywanych na dysku, co sprawia,

Īe w kaĪdej chwili pliki te mogą siĊ znajdowaü

w stanie niespójno

Ğci. Jako Īe standardowe procedury wykonywania kopii zapasowych

zak

áadają tylko kopiowanie plików systemowych i zawierających dane, kopie plików

danych MySQL nie s

ą wiarygodne. Nie ma bowiem Īadnej gwarancji, Īe skopiowane

pliki b

Ċdą w stanie nadającym siĊ do uĪycia w zastĊpstwie plików straconych w awarii.

Wiele baz danych otrzymuje nowe informacje przez ca

áy czas, zaĞ standardowe kopie

zapasowe zawieraj

ą tylko stan plików z daty ostatniego utworzenia kopii. JeĞli z jakie-

go

Ğ powodu pliki danych bazy MySQL zostaną zniszczone albo nie da siĊ ich odczytaü,

wszelkie informacje, które zmieni

áy siĊ w bazie od ostatniej kopii, przepadną bezpow-

rotnie. W wielu sytuacjach, na przyk

áad jeĞli serwer MySQL sáuĪy do Ğledzenia zamó-

wie

Ĕ klientów w sklepie internetowym, taka strata jest nie do przyjĊcia.

MySQL zawiera mechanizmy s

áuĪące do tworzenia aktualnych kopii zapasowych, na

które nie powinna mie

ü wpáywu aktywnoĞü serwera podczas archiwizacji. Niestety,

ich u

Īycie wymaga zaprojektowania specjalnej procedury wykonywania kopii zapa-

sowych dla danych MySQL, ca

ákowicie oddzielnej od wszelkich systemów archiwizacji,

które mog

áy powstaü dla innych danych. Jednak podobnie jak w przypadku kaĪdego

dobrego systemu kopii zapasowych, docenimy go, kiedy przyjdzie czas go wykorzysta

ü.

Wykonywanie kopii za pomoc

ñ programu mysqldump

Oprócz

mysql

, klienta MySQL, pakiet instalacyjny MySQL zawiera wiele przydatnych

programów narz

Ċdziowych. PoznaliĞmy juĪ na przykáad program

mysqladmin

, odpo-

wiedzialny za kontrol

Ċ i pobieranie informacji o uruchomionym serwerze MySQL.

Program

mysqldump

jest kolejnym z tych narz

Ċdzi. Po uruchomieniu áączy siĊ on z ser-

werem MySQL (w podobny sposób, jak program

mysql

albo skrypt PHP) i pobiera pe

áną

zawarto

Ğü wskazanej bazy danych. Pobrane dane są nastĊpnie wypisywane w postaci

szeregu polece

Ĕ SQL

CREATE TABLE

i

INSERT

, które, wykonane na serwerze MySQL,

odtworz

ą bazĊ danych (lub bazy danych) i zapeánią ją takimi samymi danymi, jakie

zawiera

á oryginaá.

Je

Ğli przekierujemy wynik dziaáania

mysqldump

do pliku, mo

Īemy zachowaü uzyskany

zrzut zawarto

Ğci bazy jako kopiĊ zapasową. PoniĪsze polecenie (zapisane w jednej linii)

background image

Rozdzia

ä 10.

i Administrowanie bazñ MySQL

283

áączy siĊ z serwerem MySQL uruchomionym na komputerze lokalnym, podając uĪyt-
kownika root i has

áo

password

, a nast

Ċpnie zapisuje kopiĊ zapasową wszystkich baz

danych do pliku full_backup.sql

4

.

mysqldump -u root -ppassword --all-databases > full_backup.sql

Poni

Īsze komendy odtworzą bazĊ po awarii:

mysql -u root -ppassword < full_backup.sql

Przytoczone polecenie

áączy siĊ z serwerem MySQL przy uĪyciu programu

mysql

i podaje do wykonania list

Ċ komend z utworzonego uprzednio pliku. JeĪeli wolisz korzy-

sta

ü z klienta wiersza poleceĔ serwera MySQL, moĪesz wykonaü polecenie

source

, aby

wykona

ü wszystkie polecenia zawarte w pliku full_backup.sql:

mysql> source full_backup.sql

Polecenie source nie jest poleceniem j

özyka SQL

Polecenie source jest säabo udokumentowanym

5

poleceniem obs

äugiwanym bez-

po

Ĉrednio przez program klienta mysql i nie jest to w Ĕadnym razie polecenie jözyka

SQL, takie jak na przyk

äad CREATE DATABASE. Dlatego na koþcu polecenia nie naleĔy

wstawia

è znaku Ĉrednika, poniewaĔ znak ten uniemoĔliwi poprawne wykonanie pole-

cenia.

W ten sposób mo

Īemy uĪywaü

mysqldump

do tworzenia kopii zapasowych naszych baz

danych. Program

mysqldump

nie kopiuje bezpo

Ğrednio plików znajdujących siĊ w kata-

logu danych MySQL, tylko pobiera dane,

áącząc siĊ z serwerem. DziĊki temu kopia,

któr

ą wykonuje, jest wáaĞciwą i pewną kopią bazy, a nie zrzutem plików, które mogą

by

ü niepeáne i nieaktualne, dopóki serwer MySQL jest uruchomiony.

Co zrobi

ü z dziurą miĊdzy kopiami zapasowymi, aby mieü pewnoĞü, Īe zarchiwizo-

wane dane z bazy s

ą zawsze aktualne? Rozwiązanie jest proste: naleĪy skonfigurowaü

serwer tak, aby prowadzi

á binarny dziennik aktualizacji.

Kopie przyrostowe w binarnym dzienniku aktualizacji

Jak ju

Ī wspomniano, w wielu zastosowaniach, w których uĪywa siĊ serwera MySQL,

utrata danych — jakichkolwiek danych — jest nie do zaakceptowania. W takich przy-
padkach trzeba znale

Ĩü sposób na utrzymywanie aktualnoĞci danych równieĪ pomiĊdzy

kopiami wykonywanymi przy u

Īyciu

mysqldump

. Rozwi

ązaniem tego problemu jest

skonfigurowanie serwera MySQL, tak aby prowadzi

á binarny dziennik aktualizacji.

Binarny dziennik aktualizacji jest zapisem wszystkich otrzymanych przez baz

Ċ zapy-

ta

Ĕ SQL, które w jakiĞ sposób zmieniáy zawartoĞü bazy. Zaliczają siĊ do nich miĊdzy

innymi polecenia

INSERT

,

UPDATE

i

CREATE TABLE

, natomiast

SELECT

ju

Ī nie.

4

Aby uruchomi

ü

mysqldump

i inne programy narz

Ċdziowe MySQL, trzeba znajdowaü siĊ w katalogu

bin serwera MySQL lub katalog ten musi znajdowa

ü siĊ w ĞcieĪce systemowej. JeĪeli wykonaáeĞ

instrukcje instalacji zawarte w rozdziale 1.,

ĞcieĪka systemowa powinna juĪ zawieraü odpowiednie wpisy.

5

http://dev.mysql.com/doc/refman/5.1/en/batch-commands.html

background image

284

PHP i MySQL. Witryna WWW oparta na bazie danych

Podstawowym celem jest umo

Īliwienie odzyskania zawartoĞci bazy dokáadnie z chwili

wyst

ąpienia awarii. MoĪna to osiągnąü przez przywrócenie kopii zapasowej (wyko-

nanej za pomoc

ą programu

mysqldump

) i zastosowanie fragmentu binarnego dziennika

aktualizacji, powsta

áego po utworzeniu ostatniej kopii zapasowej.

Mo

Īna takĪe edytowaü binarny dziennik aktualizacji, aby cofnąü ewentualne báĊdy. JeĞli

na przyk

áad wspóápracownik przypadkowo wyda polecenie

DROP TABLE

, mo

Īemy wyeks-

portowa

ü binarny dziennik aktualizacji do postaci tekstowej i z pliku tekstowego usunąü

szkodliwy wpis. Nast

Ċpnie moĪna przywróciü bazĊ danych z ostatniej kopii zapaso-

wej i wykona

ü zmodyfikowany binarny dziennik aktualizacji. W ten sposób zacho-

wujemy nawet te aktualizacje w innych tabelach, do których dosz

áo juĪ po wydaniu

omy

ákowego polecenia. A w ramach przeciwdziaáania powinniĞmy teĪ zapewne ode-

bra

ü wspóápracownikowi prawa do polecenia

DROP

(w nast

Ċpnej czĊĞci dowiemy siĊ,

jak to zrobi

ü).

Uruchamiaj

ąc serwer MySQL z wiersza poleceĔ, moĪemy uĪyü przeáącznika

--log-bin

,

aby tworzy

á binarny dziennik aktualizacji, na przykáad w systemie Mac OS X moĪe to

wygl

ądaü tak:

Komputer:~ uľytkownik$ sudo mysqld_safe --log-bin=binlog

Powy

Īsze polecenie uruchamia serwer MySQL i instruuje go, aby tworzyá w katalogu

danych serwera (/usr/local/mysql/data na komputerach z Mac OS X i Linuksem, je

Ğli

serwer jest skonfigurowany zgodnie z opisem w rozdziale 1., „Instalacja”) pliki binlog.
000001
, binlog.000002 itd. Nowy plik b

Ċdzie powstawaá, ilekroü serwer zapisze zawar-

to

Ğü dziennika na dysk; w praktyce nastĊpuje to za kaĪdym uruchomieniem serwera.

Je

Ğli chcemy przechowywaü binarny dziennik aktualizacji w innym miejscu (co jest

zazwyczaj dobrym pomys

áem — jeĞli zepsuje siĊ dysk zawierający katalog z danymi,

lepiej,

Īeby kopie zapasowe, mimo wszystko, przetrwaáy ten kataklizm!), moĪemy podaü

pe

áną ĞcieĪkĊ do niego.

Je

Ğli serwer MySQL ma dziaáaü stale, to prawdopodobnie system operacyjny odpo-

wiada za jego uruchamianie przy starcie. W takim przypadku dodawanie opcji w linii
komend mo

Īe byü utrudnione. Prostszą metodą utworzenia dziennika aktualizacji jest

ustawienie odpowiedniej opcji w pliku konfiguracyjnym MySQL o nazwie my.cnf lub
my.ini, je

Īeli uĪywany jest system Windows.

Podobnie jak plik php.ini, który definiuje konfiguracj

Ċ jĊzyka PHP na serwerze, tak samo

plik my.cnf lub my.ini jest zwyk

áym plikiem tekstowym, który zawiera listĊ opcji steru-

j

ących pracą serwera MySQL. DomyĞlnie MySQL jest instalowany bez Īadnego pliku

konfiguracyjnego i dzia

áa z wykorzystaniem ustawieĔ domyĞlnych. Aby wáączyü obsáugĊ

binarnych dzienników aktualizacji, nale

Īy utworzyü plik my.cnf lub my.ini i ustawiü

odpowiednie opcje.

W systemie Windows u

Īyj Notatnika lub innego edytora tekstu, aby utworzyü plik

o nazwie my.ini i zapisa

ü go w katalogu instalacyjnym serwera MySQL (na przykáad

w C:\Program Files\MySQL\MySQL Server 5.x).

background image

Rozdzia

ä 10.

i Administrowanie bazñ MySQL

285

W systemie Mac OS X lub Linux nale

Īy uĪyü wybranego edytora tekstu i utworzyü

plik o nazwie my.cnf z odpowiednimi ustawieniami konfiguracyjnymi; potem plik trzeba
przenie

Ğü do katalogu instalacyjnego serwera MySQL (/usr/local/mysql). Aby to wyko-

na

ü, prawdopodobnie potrzebne bĊdą uprawnienia administratora.

Instalacje pakietowe

W dalszej cz

öĈci punktu zakäadam, Ĕe samodzielnie zainstalowaäeĈ serwer MySQL od

podstaw. Jest to szczególnie dobre rozwi

ñzanie, jeĔeli instalujesz serwer produkcyjny.

Rozwi

ñzania pakietowe, takie jak WampServer czy MAMP, zawierajñ wbudowany, pre-

definiowany plik konfiguracyjny serwera MySQL. Oczywi

Ĉcie, moĔna zmieniè zawar-

to

Ĉè tego pliku, aby odpowiednio dostosowaè konfiguracjö serwera MySQL i wäñczyè

obs

äugö binarnych dzienników aktualizacji, lecz najlepiej cofnñè siö o krok i samo-

dzielnie w ca

äoĈci skonfigurowaè sposób dziaäania serwera.

W

äñczenie mechanizmu tworzenia binarnych dzienników aktualizacji na serwerze

rozwojowym jest tylko niepotrzebnym utrudnieniem. Je

Ĕeli chcesz mieè kopie zapa-

sowe serwera rozwojowego, po prostu go wy

äñcz i wykonaj kopiö zapasowñ plików

danych serwera MySQL.

Utworzony plik konfiguracyjny powinien zawiera

ü nastĊpujący wpis:

[mysqld]
log-bin=/tmp/binlog

Tak sformu

áowany wpis nakazuje serwerowi, by pliki binarnego dziennika aktualiza-

cji by

áy przechowywane w katalogu /tmp. W Ğrodowiskach produkcyjnych zwykle

wskazuje si

Ċ bardziej sensowną lokalizacjĊ (na przykáad dysk zapasowy). Na serwerach

Mac OS X i Linux trzeba si

Ċ przede wszystkim upewniü, Īe wskazana lokalizacja jest

dost

Ċpna do zapisu dla konta uĪytkownika

mysql

, na którym pracuje serwer MySQL.

Poniewa

Ī nowy plik konfiguracyjny jest juĪ gotowy, naleĪy zrestartowaü serwer MySQL.

Od teraz serwer b

Ċdzie zachowywaá siĊ tak, jakby uruchomiono go w wierszu poleceĔ

z opcj

ą

--log-bin

. Aby upewni

ü siĊ, Īe wszystko dziaáa prawidáowo, warto we wskazanej

lokalizacji sprawdzi

ü, czy w momencie uruchomienia serwera powstaá w niej nowy plik

dziennika.

Oczywi

Ğcie, pliki binarnych dzienników aktualizacji mogą zajmowaü znaczną iloĞü

miejsca zw

áaszcza wtedy, kiedy serwer jest intensywnie uĪywany. Z tego wzglĊdu trzeba

nakaza

ü serwerowi MySQL, aby za kaĪdym razem, gdy wykonywana jest peána kopia

zapasowa przy u

Īyciu

mysqldump

, serwer usuwa

á wszystkie przestarzaáe pliki binarnego

dziennika aktualizacji.

mysqldump -u root -ppassword --all-databases --flush-logs --master-data=2
´--delete-master-logs > backup.sql

Opcja

--flush-logs

nakazuje serwerowi MySQL, by bie

Īący plik binarnego dziennika

aktualizacji zamkn

ąü oraz utworzyü nowy plik, tak jakby serwer zostaá wyáączony

i ponownie uruchomiony. Opcja

--master-data=2

wskazuje programowi

mysqldump

,

Īe

na ko

Ĕcu pliku ijdb_backup.sql trzeba umieĞciü komentarz zawierający nazwĊ nowego

pliku binarnego dziennika aktualizacji. Plik ten b

Ċdzie zawieraá wpisy dotyczące pierw-

background image

286

PHP i MySQL. Witryna WWW oparta na bazie danych

szych zmian dokonanych w bazie danych bezpo

Ğrednio po wykonaniu peánej kopii zapa-

sowej. Ostatnia opcja

--delete-master-logs

nakazuje programowi

mysqldump

usuni

Ċcie

tych plików binarnego dziennika aktualizacji, które po utworzeniu pe

ánej kopii zapaso-

wej nie s

ą juĪ potrzebne.

W przypadku powa

Īnej awarii posiadanie peánej kopii zapasowej oraz plików binar-

nego dziennika aktualizacji wygenerowanych po utworzeniu pe

ánej kopii pozwoli na

stosunkowo bezproblemowe przywrócenie bazy danych. W tym celu trzeba b

Ċdzie

zainstalowa

ü i skonfigurowaü nową, pustą wersjĊ serwera MySQL i odtworzyü na nim

pe

áną kopiĊ zapasową, zgodnie z opisem z poprzedniego punktu. Potem zostanie juĪ

tylko zaaplikowanie plików binarnego dziennika aktualizacji przy u

Īyciu programu

narz

Ċdziowego mysqlbinlog, wchodzącego w skáad instalacji serwera MySQL.

Zadanie programu narz

Ċdziowego mysqlbinlog polega na przeksztaáceniu formatu danych,

w jakim zapisywane s

ą binarne dzienniki aktualizacji, w polecenia jĊzyka SQL, które

nale

Īy wykonaü na bazie danych. Powiedzmy, Īe istnieją dwa pliki binarnego dziennika

aktualizacji, które trzeba odtworzy

ü po przywróceniu bazy danych z ostatniej peánej

kopii zapasowej. Za pomoc

ą programu mysqlbinlog z dwóch plików binarnego dzien-

nika mo

Īna wygenerowaü tekstowy plik z odpowiednimi poleceniami jĊzyka SQL,

a nast

Ċpnie wykonaü zawartoĞü utworzonego pliku na serwerze MySQL tak, jakby byá

to plik wygenerowany przez narz

Ċdzie mysqldump:

mysqlbinlog binlog.000041 binlog.000042 > binlog.sql
mysql -u root -ppassword
< binlog.sql

Kontrola dost

öpu w MySQL

W rozdziale 2., „Wprowadzenie do systemu MySQL”, wspomnia

áem o bazie

mysql

, która

wyst

Ċpuje na kaĪdym serwerze MySQL i sáuĪy do przechowywania informacji o uĪyt-

kownikach, ich has

áach i o tym, co wolno im robiü. Dotychczas jednak zawsze áączy-

li

Ğmy siĊ z serwerem jako uĪytkownik root, co dawaáo nam dostĊp do wszystkich baz

i tabel.

Konto root MySQL mo

Īe wystarczyü do naszych celów, jeĞli do uruchomionego przez

nas serwera uzyskaj

ą dostĊp tylko skrypty PHP i zachowamy ostroĪnoĞü w podawa-

niu has

áa do konta. Jednak w sytuacjach, w których do serwera MySQL ma dostĊp

wielu u

Īytkowników (na przykáad jeĞli firma utrzymująca naszą witrynĊ WWW prze-

chowuje bazy danych klientów na jednym serwerze), warto skonfigurowa

ü konta uĪyt-

kowników z bardziej ograniczonymi prawami dost

Ċpu.

System kontroli dost

Ċpu w MySQL jest w peáni udokumentowany w rozdziale 6. pod-

r

Ċcznika MySQL

6

. W skrócie: prawa dost

Ċpu uĪytkowników regulowane są przez

zawarto

Ğü piĊciu tabel w bazie

mysql

:

user

,

db

,

host

,

tables_priv

i

columns_priv

.

Gdyby

Ğmy chcieli edytowaü je rĊcznie przy uĪyciu poleceĔ

INSERT

,

UPDATE

i

DELETE

,

powinni

Ğmy siĊ najpierw zapoznaü z odpowiednim fragmentem podrĊcznika. MySQL

6

http://dev.mysql.com/doc/mysql/en/privilege_system.html

background image

Rozdzia

ä 10.

i Administrowanie bazñ MySQL

287

dostarcza jednak prostsz

ą metodĊ zarządzania prawami dostĊpu, przeznaczoną dla nas,

zwyk

áych Ğmiertelników. UĪywając poleceĔ

GRANT

i

REVOKE

— niestandardowych komend

MySQL — mo

Īemy tworzyü uĪytkowników i przydzielaü im prawa bez zastanawiania

si

Ċ nad detalami i nad sposobem reprezentacji tego, co stworzymy we wspomnianych

tabelach.

Nadawanie uprawnie

þ za pomocñ polecenia GRANT

Polecenie

GRANT

, s

áuĪące do tworzenia nowych uĪytkowników, przydzielania haseá i przy-

pisywania praw, jest nast

Ċpujące:

mysql>GRANT uprawnienie [(kolumny)] ON do_czego
->TO uľytkownikowi [IDENTIFIED BY 'hasđo']
->[WITH GRANT OPTION];

A zatem polecenie to ma wiele pustych pól do wype

ánienia. Opiszemy kaĪde z nich,

a potem obejrzymy kilka przyk

áadów, aby siĊ przekonaü, jakie efekty dają razem.

Pole

uprawnienie

definiuje uprawnienia, które chcemy przydzieli

ü tym poleceniem.

Uprawnienia, które mo

Īna nadaü, dzielą siĊ na trzy grupy:



Uprawnienia do baz, tabel lub kolumn

ALTER

Modyfikowanie istniej

ących tabel (na przykáad dodawanie

albo usuwanie kolumn) i indeksów.

CREATE

Tworzenie nowych baz i tabel.

DELETE

Usuwanie pozycji z tabeli.

DROP

Usuwanie tabel lub baz.

INDEX

Tworzenie lub usuwanie indeksów.

INSERT

Dodawanie nowych pozycji w tabeli.

LOCK TABLES

Blokowanie tabel, do których u

Īytkownik ma prawo

SELECT

(zob. rozdzia

á 11., Zaawansowane zapytania SQL).

SELECT

Przegl

ądanie i przeszukiwanie zawartoĞci tabeli.

SHOW DATABASES

Przegl

ądanie listy dostĊpnych baz danych.

UPDATE

Modyfikowanie istniej

ących pozycji w tabeli.



Globalne uprawnienia administracyjne

FILE

Czytanie i zapisywanie plików na komputerze, na którym
dzia

áa serwer MySQL.

PROCESS

Ogl

ądanie lub niszczenie wątków naleĪących do innych

u

Īytkowników.

RELOAD

Prze

áadowywanie tabel kontroli dostĊpu, zapisywanie

dziennika na dysku itd.

SHUTDOWN

Zatrzymywanie serwera MySQL.

background image

288

PHP i MySQL. Witryna WWW oparta na bazie danych



Uprawnienia specjalne

ALL

Uprawnienie do wszelkich czynno

Ğci (podobnie jak

w przypadku u

Īytkownika root), z wyjątkiem prawa

do nadawania praw.

USAGE

Prawo do zalogowania si

Ċ i nic ponadto.

Niektóre z tych uprawnie

Ĕ odnoszą siĊ do wáaĞciwoĞci MySQL, których jeszcze nie

poznali

Ğmy, ale wiĊkszoĞü nie powinna byü obca czytelnikom.

Pole

do_czego

okre

Ğla, do których czĊĞci serwera baz danych odnoszą siĊ nadawane

prawa.



Zapis

*.*

oznacza,

Īe prawa dotyczą wszystkich baz i tabel.

 nazwaBazy.*

oznacza,

Īe prawa obejmują wszystkie tabele w bazie

nazwaBazy

.

 nazwaBazy.nazwaTabeli

oznacza natomiast,

Īe prawa dotyczą tylko tabeli

nazwaTabeli

w bazie

nazwaBazy

.

Mo

Īna nawet okreĞliü prawa do pojedynczych kolumn w tabeli — wystarczy wstawiü

list

Ċ kolumn w nawias nastĊpujący po nazwie przydzielanych praw (zob. przykáad

poni

Īej).

Pole

user

wyznacza u

Īytkownika, którego mają dotyczyü prawa. W MySQL uĪytkow-

nik jest okre

Ğlany przez nazwĊ uĪytkownika podaną przy logowaniu oraz nazwĊ hosta

lub adres IP komputera, z którego si

Ċ áączy. WartoĞci te rozdziela znak

@

(tj.

nazwa_

´

uľytkownika@nazwa_hosta

). Obie mog

ą zawieraü znak globalny

%

, ale ka

Īdą zawiera-

j

ącą go wartoĞü trzeba ująü w cudzysáów (na przykáad

kevin@"%"

pozwoli u

Īytkowni-

kowi o nazwie

kevin

zalogowa

ü siĊ z dowolnego hosta i uĪyü podanych uprawnieĔ).

Pole

hasđo

definiuje has

áo wymagane od uĪytkownika przy áączeniu siĊ z serwerem

MySQL. Nawiasy kwadratowe oznaczaj

ą, Īe czĊĞü

IDENTIFIED BY 'hasđo'

polecenia

GRANT

jest opcjonalna. Ka

Īde podane w niej hasáo zamieni dotychczasowe hasáo dla

danego u

Īytkownika. JeĞli nie podamy hasáa dla nowo tworzonego uĪytkownika, serwer

nie b

Ċdzie od niego wymagaá podania hasáa przy poáączeniu.

Opcjonalna cz

ĊĞü

WITH GRANT OPTION

oznacza,

Īe uĪytkownik ma prawo uĪywaü pole-

ce

Ĕ

GRANT

i

REVOKE

do nadawania innym u

Īytkownikom takich samych uprawnieĔ, jakie

sam otrzyma

á. TĊ opcjĊ naleĪy przydzielaü ostroĪnie — nastĊpstwa nie zawsze są oczy-

wiste! U

Īytkownik zaáoĪony z opcją

WITH GRANT OPTION

mo

Īe przekazywaü tĊ opcjĊ

innym u

Īytkownikom, aby wymieniaü siĊ z nimi prawami dostĊpu.

Rozwa

Īmy kilka przykáadów. PoniĪsze polecenie

GRANT

tworzy u

Īytkownika o nazwie

dbmgr

, mog

ącego logowaü siĊ z komputera

server.host.net

z has

áem

managedb

i maj

ą-

cego pe

ány dostĊp tylko do bazy danych o nazwie

ijdb

(z prawem przydzielania innym

u

Īytkownikom praw dostĊpu do tej bazy wáącznie).

mysql>GRANT ALL ON ijdb.*
->TO dbmgr@example.com
->IDENTIFIED BY 'managedb'
->WITH GRANT OPTION;

background image

Rozdzia

ä 10.

i Administrowanie bazñ MySQL

289

Nast

Ċpnie, aby zmieniü hasáo tego uĪytkownika na

funkychicken

, u

Īyjemy nastĊpującego

polecenia:

mysql>GRANT USAGE ON *.*
->TO dbmgr@example.com
->IDENTIFIED BY 'funkychicken';

Zauwa

Īmy, Īe nie nadaliĞmy Īadnych dodatkowych uprawnieĔ (uprawnienie

USAGE

pozwala u

Īytkownikowi jedynie na zalogowanie siĊ), ale dotychczasowe przywileje uĪyt-

kownika pozosta

áy niezmienione.

Nast

Ċpnie zaáóĪmy istnienie nowego uĪytkownika o nazwie

jess

, który b

Ċdzie siĊ áączyü

z ró

Īnych komputerów w domenie

example.com

. Powiedzmy,

Īe uĪytkowniczka Jess

jest odpowiedzialna za aktualizowanie personaliów i adresów e-mail autorów, ale mo

Īe

te

Ī czasem przeglądaü pozostaáe informacje w bazie. W związku z tym uzyska dostĊp

tylko do odczytu (tj.

SELECT

) do bazy

ijdb

, ale b

Ċdzie teĪ mogáa wykonywaü

UPDATE

na

kolumnach

nazwa

i

email

w tabeli

autor

. Oto odpowiednie polecenia:

mysql>GRANT SELECT ON ijdb.*
->TO jess@"%.example.com"
->IDENTIFIED BY "jessrules";
mysql>GRANT UPDATE (nazwa, email) ON ijdb.autor
->TO jess@"%.example.com";

Zauwa

Īmy, Īe w pierwszym poleceniu uĪyliĞmy w nazwie hosta znaku globalnego

%

,

aby okre

Ğliü, z jakich komputerów bĊdzie siĊ mogáa áączyü Jess. Nie daliĞmy jej takĪe

prawa do przekazywania uprawnie

Ĕ innym uĪytkownikom, poniewaĪ nie dodaliĞmy

klauzuli

WITH GRANT OPTION

na ko

Ĕcu linii. Drugie polecenie pokazuje, jak przydzielaü

uprawnienia do okre

Ğlonych kolumn w tabeli — naleĪy umieszczaü rozdzielone przecin-

kami kolumny w nawiasie za nazw

ą nadawanego uprawnienia.

Aby sprawdzi

ü, jakie uprawnienia nadano konkretnemu uĪytkownikowi, naleĪy wyko-

na

ü polecenie

SHOW GRANTS

:

mysql> SHOW GRANTS FOR jess@"%.example.com"

Polecenie zwróci list

Ċ poleceĔ

GRANT

, których nale

Īy uĪyü, aby na nowo utworzyü wska-

zanego u

Īytkownika z identycznymi uprawnieniami.

Odbieranie uprawnie

þ przy uĔyciu polecenia REVOKE

Polecenie

REVOKE

, jak mo

Īna siĊ domyĞliü, sáuĪy do odbierania uĪytkownikowi poprzednio

nadanych uprawnie

Ĕ dostĊpu. Skáadnia polecenia jest nastĊpująca:

mysql>REVOKE uprawnienie [(kolumny)]
->ON do_czego FROM uľytkownikowi;

Wszystkie pola w poleceniu maj

ą to samo dziaáanie, co w przypadku polecenia

GRANT

.

Aby odebra

ü uprawnienia do uĪywania polecenia

DROP

wspó

ápracownikowi Jess o nazwie

idiot

(je

Ğli, na przykáad, ma on zwyczaj sporadycznego omyákowego usuwania za

pomoc

ą tego polecenia tabel i baz danych), uĪylibyĞmy nastĊpującego polecenia:

background image

290

PHP i MySQL. Witryna WWW oparta na bazie danych

mysql>REVOKE DROP ON *.* FROM idiot@"%.example.com";

Cofni

Ċcie prawa uĪytkownika do zalogowania siĊ jest jedyną rzeczą, jakiej nie moĪna

osi

ągnąü przy uĪyciu poleceĔ

GRANT

i

REVOKE

. Te polecenia definitywnie odbior

ą uĪytkow-

nikowi wszelk

ą moĪliwoĞü jakichkolwiek dziaáaĔ w bazie poza zalogowaniem siĊ:

mysql>REVOKE ALL PRIVILEGES ON *.* FROM idiot@"%.example.com";
mysql>REVOKE GRANT OPTION ON *.* FROM idiot@"%.example.com";

Jednak aby ca

ákowicie usunąü uĪytkownika, trzeba wykonaü polecenie

DROP USER

:

mysql>DROP USER idiot@"%.example.com"

Porady na temat kontroli dost

öpu

Sposób, w jaki dzia

áa system kontroli dostĊpu w MySQL, ma pewne idiosynkrazje, o któ-

rych trzeba wiedzie

ü przed rozpoczĊciem zakáadania kont uĪytkowników.

Je

Ğli tworzymy uĪytkowników mogących siĊ zalogowaü do serwera MySQL tylko z kom-

putera, na którym dzia

áa serwer (na przykáad wymagamy, aby logowali siĊ do kom-

putera i uruchamiali stamt

ąd klienta MySQL, ewentualnie porozumiewali siĊ z serwe-

rem przy u

Īyciu skryptów serwerowych w rodzaju PHP), moĪemy siĊ zastanawiaü,

jaka powinna by

ü czĊĞü polecenia

GRANT

dotycz

ąca uĪytkownika. ZaáóĪmy, Īe serwer

jest uruchomiony na komputerze www.example.com. Jak powinna wygl

ądaü nazwa uĪyt-

kownika:

nazwa_uľytkownika@example.com

czy

nazwa_uľytkownika@localhost

?

Odpowied

Ĩ brzmi: nie moĪna polegaü na Īadnej z nich, jeĞli chcemy obsáuĪyü wszystkie

po

áączenia. Teoretycznie, jeĪeli áączący siĊ uĪytkownik poda nazwĊ hosta w programie

klienckim

mysql

albo w funkcji PHP

mysqli_connect

, nazwa ta zostanie porównana

z wpisem w systemie kontroli dost

Ċpu. PoniewaĪ jednak raczej nie chcemy zmuszaü

u

Īytkowników do podawania okreĞlonej nazwy hosta (ci uĪywający klienta

mysql

nie

b

Ċdą zapewne chcieli podawaü nazwy hosta w ogóle), lepiej uciec siĊ do rozwiązania

zast

Ċpczego.

Dla u

Īytkowników potrzebujących moĪliwoĞci áączenia siĊ z komputera, na którym

jest uruchomiony serwer MySQL, najlepiej stworzy

ü dwa wpisy w systemie dostĊpu

MySQL: jeden z rzeczywist

ą nazwą komputera (na przykáad

nazwa_uľytkownika

@example.com

), drugi z nazw

ą

localhost

(na przyk

áad

nazwa_uľytkownika@localhost

).

Oczywi

Ğcie, wymaga to oddzielnego nadawania i usuwania uprawnieĔ dla kaĪdej

z nazw, ale tylko na takim rozwi

ązaniu moĪna naprawdĊ polegaü.

Kolejnym problemem, cz

Ċsto napotykanym przez administratorów MySQL, jest to, Īe

nazwy u

Īytkowników zawierające nazwy wieloznaczne (na przykáad przytaczana

jess@%.example.com

) mog

ą nie zadziaáaü. Niepowodzenia nastĊpują zazwyczaj w wyniku

sposobu, w jaki MySQL nadaje priorytety wpisom w systemie kontroli dost

Ċpu. Wpisy

s

ą szeregowane w takiej kolejnoĞci, aby bardziej jednoznaczne nazwy hosta nastĊpo-

wa

áy jako pierwsze (na przykáad

www.example.com

jest nazw

ą caákowicie jednoznaczną,

%.example.com

— mniej jednoznaczn

ą, a

%

— ca

ákiem niejednoznaczną).

background image

Rozdzia

ä 10.

i Administrowanie bazñ MySQL

291

System kontroli dost

Ċpu nowo zainstalowanego serwera MySQL zawiera dwa anoni-

mowe wpisy (pozwalaj

ące na áączenie siĊ przy uĪyciu dowolnej nazwy uĪytkownika

z

localhost

i rzeczywistej nazwy lokalnego hosta) i dwa wpisy dla u

Īytkownika root.

Opisany powy

Īej problem wystĊpuje wówczas, gdy wpisy anonimowe mają pierw-

sze

Ĕstwo przed nowo dodanymi uĪytkownikami ze wzglĊdu na bardziej jednoznaczną

nazw

Ċ hosta.

Spójrzmy na uproszczon

ą zawartoĞü tabeli

user

na www.example.com, naszym fikcyj-

nym serwerze MySQL, po tym, jak dodali

Ğmy wpis dla

jess

. Wiersze s

ą posortowane

w porz

ądku, w jakim przegląda je serwer, kiedy uwierzytelnia poáączenie.

+-----------------+------+-----------------+
| Host | User | Password |
+-----------------+------+-----------------+
| localhost | root | encrypted value |
| www.example.com | root | encrypted value |
| localhost | | |
| www.example.com | | |
| %.example.com | jess | encrypted value |
+-----------------+------+-----------------+

Jak widzimy, wpis dla u

Īytkowniczki

jess

ma najmniej jednoznaczn

ą nazwĊ hosta,

zatem pojawia si

Ċ na liĞcie jako ostatni. Kiedy

jess

próbuje si

Ċ poáączyü spod adresu

www.example.com, serwer dopasowuje jej prób

Ċ do jednego z uĪytkowników anoni-

mowych (pusta warto

Ğü w kolumnie

User

pasuje do ka

Īdego uĪytkownika). PoniewaĪ

wpisy anonimowe nie wymagaj

ą hasáa, a

jess

zapewne podaje swoje has

áo, MySQL

odrzuca prób

Ċ poáączenia. Nawet jeĪeli uĪytkowniczka

jess

zdo

áa poáączyü siĊ bez

has

áa, uzyska bardzo ograniczone uprawnienia przeznaczone dla uĪytkowników anoni-

mowych, zamiast praw okre

Ğlonych w jej wpisie w systemie kontroli dostĊpu.

Istniej

ą dwa rozwiązania tego problemu. MoĪna rozpocząü administrowanie serwerem

MySQL od usuni

Ċcia wpisów dla uĪytkowników anonimowych (

DELETE FROM mysql.

user WHERE User=""

) albo doda

ü po dwa dodatkowe wpisy dla wszystkich uĪytkowników,

którzy potrzebuj

ą moĪliwoĞci áączenia siĊ z adresu

localhost

(tj. wpis dla

localhost

i dla rzeczywistej nazwy serwera).

+-----------------+------+-----------------+
| Host | User | Password |
+-----------------+------+-----------------+
| localhost | root | encrypted value |
| www.example.com | root | encrypted value |
| localhost | jess | encrypted value |
| www.example.com | jess | encrypted value |
| localhost | | |
| www.example.com | | |
| %. example.com | jess | encrypted value |
+-----------------+------+-----------------+

Trzy wpisy w systemie dla ka

Īdego uĪytkownika stanowią nadmiar, wiĊc zalecane

jest usuwanie u

Īytkowników anonimowych, o ile nie ma siĊ dla nich szczególnych

zastosowa

Ĕ.

background image

292

PHP i MySQL. Witryna WWW oparta na bazie danych

+-----------------+------+-----------------+
| Host | User | Password |
+-----------------+------+-----------------+
| localhost | root | encrypted value |
| www.example.com | root | encrypted value |
| %.example.com | jess | encrypted value |
+-----------------+------+-----------------+

Problem braku dost

öpu

Zapomnienie has

áa po trwającym godzinĊ instalowaniu i konfigurowaniu serwera MySQL

jest równie zawstydzaj

ące, jak zamkniĊcie kluczyków w samochodzie. Na szczĊĞcie,

nie wszystko jest stracone, je

Ğli mamy uprawnienia administratora na komputerze, na

którym dzia

áa serwer MySQL, albo moĪemy siĊ zalogowaü jako uĪytkownik, którego

skonfigurowali

Ğmy do uruchamiania serwera (

mysql

, je

Īeli serwer zostaá zainstalowany

zgodnie z instrukcj

ą instalacji w systemie Linux zamieszczoną w rozdziale 1., „Insta-

lacja”). Poni

Īsza procedura pozwala na odzyskanie kontroli nad serwerem.

Po pierwsze, trzeba wy

áączyü serwer MySQL. Zazwyczaj robimy to przy uĪyciu narzĊ-

dzia

mysqladmin

, ale poniewa

Ī wymaga ono podania zapomnianego hasáa, musimy

zamiast tego zako

Ĕczyü proces serwera. W systemie Windows naleĪy uĪyü MenedĪera

zada

Ĕ, aby znaleĨü i zakoĔczyü proces MySQL, lub po prostu zatrzymaü usáugĊ MySQL,

je

Ğli zostaáa zainstalowana. W systemach Mac OS X i Linux naleĪy uĪyü polecenia

ps

albo zajrze

ü do pliku PID serwera w katalogu danych MySQL, aby okreĞliü ID procesu

serwera, po czym zatrzyma

ü proces za pomocą nastĊpującego polecenia:

kill pid

pid

to identyfikator procesu serwera MySQL.

To powinno wystarczy

ü do wyáączenia serwera. Nie naleĪy uĪywaü polecenia

kill -9

,

dopóki nie jest to absolutnie konieczne, poniewa

Ī moĪe ono spowodowaü uszkodze-

nie plików z tabelami. Je

Ğli jesteĞmy do tego zmuszeni, w dalszej czĊĞci rozdziaáu znaj-

duj

ą siĊ instrukcje sprawdzania i naprawiania plików z danymi.

Gdy serwer zosta

á wyáączony, moĪna uruchomiü go ponownie za pomocą polecenia

mysqld_safe

z opcj

ą

--skip-grant-tables

. Oznacza to,

Īe serwer MySQL ma pozwoliü

na nieograniczony dost

Ċp dla kaĪdego. OczywiĞcie naleĪy uruchamiaü serwer w tym

trybie najrzadziej jak to mo

Īliwe, ze wzglĊdu na nieuniknione zagroĪenie dla bezpie-

cze

Ĕstwa, jakie pociąga za sobą to rozwiązanie.

Po po

áączeniu siĊ trzeba zmieniü hasáo uĪytkownika root na takie, którego nie zapo-

mnimy:

mysql>UPDATE mysql.user SET Password=PASSWORD("nowehas

đo")

->WHERE User="root";

Na koniec roz

áączamy siĊ i wydajemy serwerowi polecenie przeáadowania tabel z upraw-

nieniami u

Īytkowników, aby system MySQL ponownie zacząá Īądaü podawania haseá:

mysqladmin flush-privileges

background image

Rozdzia

ä 10.

i Administrowanie bazñ MySQL

293

Problem rozwi

ązany — i nikt nie musi wiedzieü, co siĊ wydarzyáo. Tak jak w przypadku

zamkni

Ċcia kluczyków w samochodzie, jesteĞmy zdani tylko na siebie.

Sprawdzanie i naprawianie
plików danych MySQL

Gdy zanika pr

ąd, w sytuacjach, kiedy wymuszamy zatrzymanie procesu serwera MySQL

przy u

Īyciu polecenia

kill -9

, i wtedy, gdy kolega Jess,

idiot@%.example.com

, kop-

nie wtyczk

Ċ zasilania, istnieje ryzyko, Īe pliki danych MySQL ulegną uszkodzeniu.

Mo

Īe siĊ to zdarzyü, jeĞli w czasie wystąpienia jednego z powyĪszych zakáóceĔ serwer

zmienia zawarto

Ğü plików; wtedy po zdarzeniu pliki mogą okazaü siĊ znieksztaácone albo

niespójne. Taki rodzaj uszkodzenia potrafi by

ü subtelny i moĪe pozostaü niewykryty

przez wiele dni, tygodni, a nawet miesi

Ċcy. W efekcie, kiedy w koĔcu odkryjemy pro-

blem, wszystkie kopie zapasowe mog

ą juĪ zawieraü to samo uszkodzenie.

W rozdziale 6. podr

Ċcznika MySQL

7

znajduje si

Ċ opis narzĊdzia

myisamchk

, standar-

dowo dost

Ċpnego w instalacji MySQL, oraz instrukcja uĪywania go w celu sprawdzania

i naprawy plików danych MySQL. O ile zapoznanie si

Ċ z tym rozdziaáem jest zalecane

dla ka

Īdego, kto zamierza utworzyü wysoko wydajny, bezpieczny system utrzymania

serwera, przedstawimy w tej cz

ĊĞci podstawowe zagadnienia.

Zanim jednak przejdziemy do dalszych rozwa

ĪaĔ, warto abyĞmy zdali sobie sprawĊ,

Īe program

myisamchk

oczekuje wy

áącznego dostĊpu do plików danych MySQL, które

sprawdza i modyfikuje. Je

Ğli dziaáający jednoczeĞnie serwer MySQL zapisze coĞ do

pliku, który w

áaĞnie jest sprawdzany,

myisamchk

mo

Īe mylnie uznaü to za báąd i próbo-

wa

ü go skorygowaü — co moĪe z kolei spowodowaü báąd serwera. Aby zatem unik-

n

ąü pogorszenia zamiast naprawienia problemu, warto wyáączyü serwer MySQL, jeĞli

pracujemy na jego plikach z danymi. Alternatywnym rozwi

ązaniem jest wyáączenie

serwera tyko na czas zrobienia kopii plików i praca z kopiami. W takim przypadku po
zako

Ĕczonej pracy trzeba wyáączyü serwer ponownie, aby zamieniü stare pliki na nowe

i, by

ü moĪe, zastosowaü wpisy z utworzonego tymczasem binarnego dziennika aktu-

alizacji.

Struktura katalogu danych MySQL nie jest zbyt skomplikowana. Ka

Īdej bazie odpo-

wiada jeden podkatalog, zawieraj

ący pliki danych, w których przechowywana jest zawar-

to

Ğü tabel w bazie. KaĪdą tabelĊ reprezentują trzy pliki o takich samych nazwach, jak

nazwa tabeli, ale ró

Īnych rozszerzeniach. Plik nazwaTabeli.frm, nazywany plikiem

formatu tabeli, zawiera definicj

Ċ tabeli, czyli wchodzące w jej skáad kolumny i ich typy

danych. Plik nazwaTabeli.MYD przechowuje wszystkie dane w tabeli. Plik nazwaTabeli.
MYI
zawiera wszelkie indeksy istniej

ące dla tabeli (na przykáad tabelĊ przeglądową,

która pomaga kolumnie klucza g

áównego przyspieszaü zapytania w tej tabeli).

7

http://dev.mysql.com/doc/mysql/en/table-maintenance.html

background image

Czytaj dalej...

294

PHP i MySQL. Witryna WWW oparta na bazie danych

Chc

ąc sprawdziü tabelĊ na okolicznoĞü báĊdów, naleĪy uruchomiü program

myisamchk

(znajduj

ący siĊ w katalogu bin serwera MySQL) i podaü albo ĞcieĪkĊ do plików i nazwĊ

tabeli, albo nazw

Ċ indeksu tabeli

8

:

myisamchk /usr/local/mysql/data/nazwaBazy/nazwaTabeli
myisamchk /usr/local/mysql/data/nazwaBazy/nazwaTabeli.MYI

Albo, w systemie Windows:

myisamchk "C:\"Program Files"\MySQL\data\nazwaBazy\nazwaTabeli"
myisamchk "C:\"Program Files"\MySQL\data\nazwaBazy\nazwaTabeli.MYI"

Ka

Īda z powyĪszych komend wykona test podanej tabeli. Aby sprawdziü wszystkie

tabele w bazie, nale

Īy uĪyü nazwy wieloznacznej:

myisamchk /usr/local/mysql/data/nazwaBazy/*.MYI

Natomiast aby sprawdzi

ü wszystkie tabele we wszystkich bazach, trzeba uĪyü dwóch

znaków wieloznacznych:

myisamchk /usr/local/mysql/data/*/*.MYI

Uruchomiony bez

Īadnych opcji program

myisamchk

wykonuje standardowy test plików

tabel. Je

Ğli podejrzewamy problem w tabeli, a zwykáe sprawdzenie nie znajduje Īadnych

b

áĊdów, moĪemy wykonaü znacznie bardziej wyczerpujący (ale teĪ znacznie wolniejszy!)

test przy u

Īyciu opcji

--extend-check

:

myisamchk --extend-check /sciezka/do/tabeli

Sprawdzanie pod k

ątem báĊdów jest nieszkodliwe, nie trzeba wiĊc martwiü siĊ moĪli-

wo

Ğcią pogorszenia istniejącego problemu podczas testowania plików danych. Z kolei

naprawianie tabel, mimo

Īe zazwyczaj bezpieczne, zmienia pliki danych w sposób nie-

odwracalny. Z tego powodu bardzo zalecane jest tworzenie kopii uszkodzonych plików
tabel przed rozpocz

Ċciem prób naprawiania. Przed kopiowaniem plików z danymi

nale

Īy takĪe upewniü siĊ, Īe serwer MySQL jest wyáączony.

Istniej

ą trzy metody naprawcze, których moĪna uĪyü, aby rozwiązaü problem uszko-

dzonej tabeli. Nale

Īy wypróbowywaü je po kolei, za kaĪdym razem na nowej kopii

plików z danymi (tj. nie wolno stosowa

ü drugiej procedury odzyskiwania danych na

zestawie plików, pozosta

áym po nieudanej próbie pierwszej metody). JeĪeli w którym-

kolwiek etapie otrzymamy komunikat b

áĊdu o niemoĪnoĞci utworzenia pliku tymcza-

sowego, trzeba skasowa

ü plik, o którym mówi komunikat, i ponowiü próbĊ — wspo-

mniany plik jest pozosta

áoĞcią po poprzedniej próbie naprawy.

Trzy metody naprawiania plików stosuje si

Ċ w kolejnoĞci ukazanej poniĪej:

myisamchk --recover --quick /sciezka/do/tabeli
myisamchk --recover /sciezka/do/tabeli
myisamchk --safe-recover /sciezka/do/tabeli

8

Aby upro

Ğciü opis, nie wspomniaáem juĪ, Īe w systemach Mac OS X i Linux uzyskanie dostĊpu do plików

danych serwera MySQL b

Ċdzie wymagaü posiadania uprawnieĔ administratora. Aby uruchomiü

myisamchk

z uprawnieniami administratora, zamiast polecenia

myisamchk

nale

Īy wykonaü polecenie

sudo myisamchk

.


Wyszukiwarka

Podobne podstrony:
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie IV phmsw4
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie IV phmsw4
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie III phmsww
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie III phmsww
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie III
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie III phmsww
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie III
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie III
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie III phmsww
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie III phmsww
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie III 2

więcej podobnych podstron