tłumaczenie: robert górczyński

58

Upload: others

Post on 16-Apr-2022

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tłumaczenie: Robert Górczyński
Page 2: Tłumaczenie: Robert Górczyński

Tłumaczenie: Robert Górczyński

ISBN: 978-83-246-8146-4

Authorized translation from the English language edition, entitled: MYSQL, Fifth Edition; ISBN 0321833872; by Paul DuBois; published by Pearson Education, Inc, publishing as Addison Wesley.Copyright © 2013 Pearson Education, Inc.

All rights reserved. No part of this book may by reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.Polish language edition published by HELION S.A. Copyright © 2014.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELIONnie ponosi również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/mysvp5.zip

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/mysvp5Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Tłumaczenie: Robert Górczyński

Spis treści

O autorze ...........................................................................17

Wprowadzenie ...................................................................19

Cz��� I Ogólne u�ycie MySQL

Rozdzia� 1. Rozpocz�cie pracy z MySQL ...............................................331.1. W jaki sposób MySQL mo�e Ci pomóc? ....................................331.2. Przyk�adowa baza danych ........................................................37

1.2.1. Projekt „Liga Historyczna USA” ......................................371.2.2. Projekt „Oceny uczniów” ...............................................401.2.3. Jak przyk�adowa baza danych mo�e Ci pomóc? ...............41

1.3. Podstawowa terminologia bazy danych .....................................411.3.1. Terminologia strukturalna .............................................421.3.2. Terminologia j�zyka zapyta� ..........................................441.3.3. Terminologia architekturalna MySQL ..............................45

1.4. Przewodnik po MySQL ............................................................461.4.1. Pobranie przyk�adowej bazy danych ................................471.4.2. Wymagania wst�pne .....................................................471.4.3. Nawi�zywanie i zrywanie po��czenia z serwerem MySQL ....491.4.4. Wykonywanie zapyta� SQL ............................................511.4.5. Tworzenie bazy danych .................................................541.4.6. Tworzenie tabel ............................................................551.4.7. Dodawanie nowych rekordów .........................................751.4.8. Przywrócenie bazy danych sampdb do znanego stanu ......791.4.9. Pobieranie informacji ....................................................801.4.10. Usuwanie lub uaktualnianie istniej�cych rekordów ......110

1.5. Wskazówki przydatne podczas pracy z klientem mysql .............1131.5.1. Uproszczenie procesu nawi�zywania po��czenia ............1131.5.2. Wpisywanie mniejszej ilo�ci tekstu przy wykonywaniu

zapyta� .....................................................................1151.6. Co dalej? .............................................................................120

Poleć książkęKup książkę

Page 4: Tłumaczenie: Robert Górczyński

4 MySQL. Vademecum profesjonalisty

Rozdzia� 2. U�ycie MySQL do zarz�dzania danymi ...............................1232.1. Tryby SQL serwera ................................................................1242.2. Identyfikatory sk�adni MySQL i regu�y nadawania nazw ............1262.3. Wielko�� liter w zapytaniach SQL ...........................................1282.4. Obs�uga kodowania znaków ..................................................130

2.4.1. Okre�lenie kodowania znaków .....................................1312.4.2. Okre�lenie dost�pno�ci kodowania znaków

i ustawie� bie��cych ...................................................1322.4.3. Obs�uga Unicode ........................................................133

2.5. Wybór, utworzenie, usuni�cie i zmiana bazy danych ................1342.5.1. Wybór bazy danych .....................................................1342.5.2. Utworzenie bazy danych ..............................................1352.5.3. Usuni�cie bazy danych ................................................1362.5.4. Zmiana bazy danych ...................................................136

2.6. Tworzenie, usuwanie, indeksowanie i modyfikowanie tabel ......1372.6.1. Cechy charakterystyczne silników bazy danych ..............1372.6.2. Tworzenie tabel ..........................................................1432.6.3. Usuwanie tabel ..........................................................1522.6.4. Indeksowanie tabel ....................................................1532.6.5. Zmiana struktury tabeli ...............................................158

2.7. Pobieranie metadanych bazy danych ......................................1612.7.1. Pobieranie metadanych za pomoc� zapytania SHOW .....1622.7.2. Pobieranie metadanych z bazy danych

INFORMATION_SCHEMA ..............................................1642.7.3. Pobieranie metadanych z poziomu wiersza polece� .......166

2.8. Pobieranie danych z wielu tabel za pomoc� z��cze� ................1672.8.1. Z��czenia wewn�trzne .................................................1692.8.2. Kwalifikowane odwo�ania do kolumn

z poziomu z��czonych tabel ..........................................1702.8.3. Z��czenia typu LEFT i RIGHT (OUTER) ...........................171

2.9. Pobieranie informacji z wielu tabel za pomoc� podzapyta� .......1752.9.1. Podzapytania u�ywaj�ce wzgl�dnych

operatorów porównania ...............................................1762.9.2. Podzapytania IN i NOT IN ............................................1772.9.3. Podzapytania ALL, ANY i SOME ...................................1782.9.4. Podzapytania EXISTS i NOT EXISTS ..............................1792.9.5. Podzapytania skorelowane ..........................................1802.9.6. Podzapytania w klauzuli FROM .....................................1812.9.7. Przepisywanie podzapyta� na posta� z��cze� ................181

2.10. Pobieranie informacji z wielu tabelza pomoc� zapyta� UNION ....................................................183

2.11. Usuwanie i uaktualnianie rekordów w wielu tabelach ...............186

Poleć książkęKup książkę

Page 5: Tłumaczenie: Robert Górczyński

Spis tre�ci 5

2.12. Przeprowadzanie transakcji ...................................................1882.12.1. U�ycie transakcji do zapewnienia

bezpiecznego �rodowiska wykonywania ......................1902.12.2. U�ycie punktów po�rednich transakcji ........................1942.12.3. Izolacja transakcji .....................................................194

2.13. Klucze zewn�trzne i integralno�� odwo�a� ..............................1972.14. Wyszukiwanie pe�nego tekstu ................................................204

2.14.1. Wyszukiwanie pe�nego tekstu w j�zyku naturalnym ......2072.14.2. Wyszukiwanie pe�nego tekstu w trybie boolowskim ......2082.14.3. Wyszukiwanie rozszerzone o wynik zapytania ..............2102.14.4. Konfiguracja silnika wyszukiwania pe�nego tekstu .......211

Rozdzia� 3. Typy danych ...................................................................2133.1. Kategorie warto�ci danych ....................................................215

3.1.1. Warto�ci liczbowe .......................................................2153.1.2. Warto�ci ci�gu tekstowego ..........................................2173.1.3. Warto�ci daty i godziny ...............................................2263.1.4. Warto�ci przestrzenne ................................................2263.1.5. Warto�ci boolowskie ...................................................2273.1.6. Warto�� NULL ............................................................227

3.2. Typy danych w MySQL ...........................................................2273.2.1. Ogólny opis typów danych ...........................................2283.2.2. Okre�lenie typów kolumn w definicji tabeli ....................2303.2.3. Definiowanie warto�ci domy�lnych kolumn ...................2313.2.4. Liczbowe typy danych .................................................2323.2.5. Typy danych w postaci ci�gów tekstowych ....................2403.2.6. Typy danych dla warto�ci daty i czasu ..........................256

3.3. Jak MySQL obs�uguje nieprawid�owe warto�ci danych? ............2673.4. Praca z sekwencjami ............................................................270

3.4.1. Ogólne w�a�ciwo�ci AUTO_INCREMENT ........................2703.4.2. W�a�ciwo�ci AUTO_INCREMENT charakterystyczne

dla silnika bazy danych ...............................................2723.4.3. Kwestie dotycz�ce kolumn AUTO_INCREMENT ..............2753.4.4. Wskazówki pomocne podczas pracy z kolumnami

AUTO_INCREMENT .....................................................2763.4.5. Generowanie sekwencji bez AUTO_INCREMENT ............278

3.5. Obliczanie wyra�e� i konwersja typu .......................................2803.5.1. Tworzenie wyra�e� ......................................................2813.5.2. Konwersja typu ..........................................................289

3.6. Wybór typu danych ...............................................................2973.6.1. Jakie warto�ci b�d� przechowywane w kolumnie? .........2993.6.2. Czy przechowywane warto�ci pochodz�

z okre�lonego zakresu? ..............................................302

Poleć książkęKup książkę

Page 6: Tłumaczenie: Robert Górczyński

6 MySQL. Vademecum profesjonalisty

Rozdzia� 4. Widoki i programy sk�adowane .........................................3054.1. U�ywanie widoków ................................................................3064.2. U�ywanie programów sk�adowanych .......................................309

4.2.1. Zapytania z�o�one i ograniczniki zapyta� .......................3104.2.2. Procedury i funkcje sk�adowane ...................................3114.2.3. Wyzwalacze ...............................................................3164.2.4. Zdarzenia ..................................................................318

4.3. Zapewnienie bezpiecze�stwa widokomi programom sk�adowanym ....................................................320

Rozdzia� 5. Optymalizacja zapyta� ......................................................3235.1. U�ycie indeksowania ............................................................324

5.1.1. Zalety wynikaj�ce z indeksowania ................................3245.1.2. Koszt indeksowania ....................................................3275.1.3. Wybór indeksów .........................................................328

5.2. Optymalizator zapyta� MySQL ...............................................3335.2.1. Jak dzia�a optymalizator zapyta�? ................................3345.2.2. U�ycie zapytania EXPLAIN do sprawdzenia

operacji optymalizatora ...............................................3385.3. Wybór typu danych zapewniaj�cego efektywne

wykonywanie zapyta� ............................................................3445.4. Wybór formatu tabeli dla efektywnych zapyta� ........................3475.5. Efektywne wczytywanie danych ..............................................3495.6. Harmonogram, blokady i wspó�bie�no�� .................................352

Cz��� II U�ycie interfejsu programowania MySQL

Rozdzia� 6. Wprowadzenie do programowania MySQL ..........................3556.1. Dlaczego tworzy� w�asne aplikacje MySQL? ............................3556.2. API dost�pne dla MySQL .......................................................359

6.2.1. API C .........................................................................3606.2.2. API Perl DBI ...............................................................3606.2.3. API PHP .....................................................................362

6.3. Wybór API ............................................................................3636.3.1. Przewidywane �rodowisko dzia�ania .............................3646.3.2. Wydajno�� .................................................................3656.3.3. Czas potrzebny na opracowanie aplikacji ......................3666.4.3. Przeno�no�� ..............................................................367

Rozdzia� 7. Tworzenie programów MySQL przy u�yciu j�zyka C ............3697.1. Kompilacja i linkowanie programów klienckich ........................3707.2. Nawi�zanie po��czenia z serwerem ........................................3737.3. Obs�uga b��dów i przetwarzanie opcji polecenia ......................377

7.3.1. Sprawdzanie pod k�tem b��dów ..................................377

Poleć książkęKup książkę

Page 7: Tłumaczenie: Robert Górczyński

Spis tre�ci 7

7.3.2. Pobieranie parametrów po��czeniaw trakcie dzia�ania programu .......................................382

7.3.3. Implementacja przetwarzania opcji w programie klienta ...3957.4. Przetwarzanie zapyta� SQL ...................................................399

7.4.1. Obs�uga zapyta� modyfikuj�cych rekordy ......................4017.4.2. Obs�uga zapyta� zwracaj�cych zbiór wynikowy ...............4027.4.3. Procedury obs�ugi zapyta� ogólnego przeznaczenia .......4057.4.4. Alternatywne podej�cia do przetwarzania zapyta� ..........4077.4.5. Funkcja mysql_store_result()

kontra mysql_use_result() ...........................................4087.4.6. U�ywanie metadanych zbioru wynikowego .....................4117.4.7. Kodowanie znaków specjalnych i danych binarnych .......416

7.5. Program do interaktywnego wykonywania zapyta� ...................4207.6. Utworzenie klienta z obs�ug� SSL ..........................................4217.7. Jednoczesne wykonywanie wielu zapyta� ...............................4267.8. U�ywanie zapyta� preinterpretowanych ...................................4287.9. U�ycie preinterpretowanego zapytania CALL ...........................440

Rozdzia� 8. Tworzenie programów MySQL przy u�yciu Perl DBI ............4458.1. Cechy charakterystyczne skryptu Perl .....................................4468.2. Ogólny opis Perl DBI .............................................................447

8.2.1. Typy danych DBI .........................................................4478.2.2. Prosty skrypt DBI ........................................................4488.2.3. Obs�uga b��dów .........................................................4538.2.4. Obs�uga zapyta� modyfikuj�cych rekordy ......................4568.2.5. Obs�uga zapyta� zwracaj�cych zbiór wynikowy ...............4588.2.6. Cytowanie znaków specjalnych

w ci�gach tekstowych zapyta� .....................................4678.2.7. Miejsca zarezerwowane i zapytania preinterpretowane ...4708.2.8. Do��czanie wyniku zapytania do zmiennych skryptu .......4748.2.9. Okre�lenie parametrów po��czenia ..............................4758.2.10. Usuwanie b��dów .....................................................4788.2.11. U�ywanie metadanych zbioru wynikowego ...................4828.2.12. Przeprowadzanie transakcji .......................................486

8.3. Praca z DBI ..........................................................................4888.3.1. Generowanie katalogu Ligi Historycznej ........................4888.3.2. Wysy�anie cz�onkom Ligi przypomnie�

o konieczno�ci przed�u�enia cz�onkostwa .....................4958.3.3. Edycja rekordu cz�onka Ligi Historycznej .......................5008.3.4. Wyszukiwanie cz�onków Ligi Historycznej

o takich samych zainteresowaniach .............................5068.3.5. Udost�pnienie w internecie katalogu Ligi Historycznej ...507

8.4. U�ycie DBI w aplikacjach sieciowych ......................................5108.4.1. Konfiguracja Apache w celu obs�ugi skryptów CGI .........5128.4.2. Krótki opis modu�u CGI.pm .........................................513

Poleć książkęKup książkę

Page 8: Tłumaczenie: Robert Górczyński

8 MySQL. Vademecum profesjonalisty

8.4.3. Nawi�zanie po��czenia z serwerem MySQLz poziomu skryptu sieciowego .....................................521

8.4.4. Przegl�darka bazy danych ...........................................5238.4.5. Przegl�darka tabel projektu ocen uczniów ....................5288.4.6. Wyszukiwanie wspólnych zainteresowa�

w projekcie Ligi Historycznej ........................................531

Rozdzia� 9. Tworzenie programów MySQL przy u�yciu j�zyka PHP ........5379.1. Ogólny opis PHP ...................................................................539

9.1.1. Prosty skrypt PHP .......................................................5419.1.2. U�ycie biblioteki plików PHP w celu hermetyzacji kodu ...5459.1.3. Prosta strona pobieraj�ca dane ...................................5509.1.4. Przetwarzanie wyników zapytania .................................5549.1.5. Sprawdzanie pod k�tem warto�ci NULL

w wynikach zapytania ..................................................5589.1.6. U�ywanie zapyta� preinterpretowanych .........................5599.1.7. U�ycie miejsc zarezerwowanych do obs�ugi kwestii

zwi�zanych z cytowaniem danych .................................5599.1.8. Obs�uga b��dów .........................................................561

9.2. Praca z PHP .........................................................................5649.2.1. Aplikacja pozwalaj�ca na wprowadzenie wyników

uzyskanych przez uczniów ...........................................5649.2.2. Tworzenie interaktywnego quizu w internecie ................5779.2.3. Edycja informacji o cz�onkach Ligi Historycznej ..............582

Cz��� III Administracja MySQL

Rozdzia� 10. Wprowadzenie do administracji baz� danych MySQL ..........59110.1. Komponenty MySQL ...........................................................59210.2. Ogólna administracja MySQL ...............................................59310.3. Kontrola dost�pu i zapewnianie bezpiecze�stwa ...................59410.4. Obs�uga bazy danych, tworzenie kopii zapasowych

i replikacja .........................................................................595

Rozdzia� 11. Katalog danych w MySQL .................................................59711.1. Po�o�enie katalogu danych ..................................................59811.2. Struktura katalogu danych ..................................................599

11.2.1. W jaki sposób serwer MySQL zapewnia dost�pdo danych? ............................................................600

11.2.2. Przedstawienie baz danych w systemie plików ..........60211.2.3. Przedstawienie tabel w systemie plików ...................60311.2.4. Przedstawienie widoków i wyzwalaczy

w systemie plików ..................................................60411.2.5. Jak zapytania SQL s� mapowane na operacje

na pliku tabeli? ......................................................60411.2.6. Ograniczenia systemu operacyjnego

w zakresie nazw obiektów bazy danych ....................605

Poleć książkęKup książkę

Page 9: Tłumaczenie: Robert Górczyński

Spis tre�ci 9

11.2.7. Czynniki wp�ywaj�ce na maksymaln� wielko�� tabeli .......................................................607

11.2.8. Wp�yw struktury katalogu danychna wydajno�� systemu ............................................609

11.2.9. Pliki dzienników zdarze� i stanu MySQL ...................61111.3. Przeniesienie zawarto�ci katalogu danych ............................613

11.3.1. Metody przenoszenia katalogu danychlub jego elementów ................................................614

11.3.2. Przygotowania do operacji przeniesienia ...................61511.3.3. Uzyskanie dost�pu do wyniku przeniesienia ..............61511.3.4. Przeniesienie ca�ego katalogu danych ......................61711.3.5. Przeniesienie poszczególnych baz danych ................61711.3.6. Przeniesienie poszczególnych tabel .........................61811.3.7. Przeniesienie systemowej przestrzeni

tabel InnoDB .........................................................61811.3.8. Przeniesienie plików dzienników zdarze� i stanu .......619

Rozdzia� 12. Ogólna administracja baz� danych MySQL ........................62112.1. Zabezpieczenie nowej instalacji MySQL ................................622

12.1.1. Definiowanie hase� dla pocz�tkowych kont MySQL ........62212.1.2. Konfiguracja hase� dla serwerów dodatkowych ..........627

12.2. Konfiguracja uruchamiania i zamykania serwera MySQL ........62812.2.1. Uruchamianie serwera MySQL w systemach UNIX .....62812.2.2. Uruchamianie serwera MySQL

w systemach Windows ............................................63412.2.3. Okre�lanie opcji startowych serwera ........................63712.2.4. W jaki sposób serwer nas�uchuje po��cze�? .............63912.2.5. Zatrzymanie serwera ..............................................64012.2.6. Odzyskanie kontroli nad serwerem,

gdy nie mo�na nawi�za� z nim po��czenia ................64112.3. U�ywanie zmiennych systemowych i stanu ............................644

12.3.1. Sprawdzanie i ustawienie warto�cizmiennych systemowych .........................................645

12.3.2. Sprawdzenie warto�ci zmiennej stanu ......................64912.4. Interfejs wtyczek ................................................................65112.5. Konfiguracja silnika bazy danych .........................................654

12.5.1. Wybór silnika bazy danych .......................................65512.5.2. Wybór domy�lnego silnika bazy danych ....................65612.5.3. Konfiguracja silnika InnoDB ....................................656

12.6. Kwestie zwi�zane z globalizacj� ...........................................66412.6.1. Konfiguracja obs�ugi stref czasowych .......................66412.6.2. Ustawienie domy�lnego kodowania znaków

i kolejno�ci sortowania ...........................................66712.6.3. Wybór j�zyka wy�wietlania komunikatów b��dów .......66712.6.4. Wybór ustawie� j�zykowych .....................................668

Poleć książkęKup książkę

Page 10: Tłumaczenie: Robert Górczyński

10 MySQL. Vademecum profesjonalisty

12.7. Dostrajanie serwera ...........................................................66812.7.1. Zmienne systemowe ogólnego przeznaczenia

do dostrajania serwera ...........................................67012.7.2. Dostrajanie silnika bazy danych ...............................67312.7.3. U�ywanie bufora zapyta� .........................................68012.7.4. Optymalizacje sprz�towe .........................................682

12.8. Dzienniki zdarze� serwera ...................................................68412.8.1. Dziennik b��dów .....................................................68712.8.2. Ogólny dziennik zapyta� ..........................................68812.8.3. Dziennik wolno wykonywanych zapyta� .....................68912.8.4. Binarny dziennik zdarze� .........................................69012.8.5. Dziennik przekazywania ..........................................69212.8.6. Rejestracja zdarze� w tabelach ...............................69212.8.7. Zarz�dzanie dziennikami zdarze� .............................693

12.9. Uruchamianie wielu serwerów MySQL ..................................70112.9.1. Ogólne kwestie zwi�zane

z uruchamianiem wielu serwerów ............................70212.9.2. Konfiguracja i kompilacja ró�nych serwerów ..............70512.9.3. Strategie podawania opcji startowych ......................70712.9.4. U�ycie skryptu mysqld_multi

do zarz�dzania serwerem ........................................70812.9.5. Uruchamianie wielu serwerów w Windows ................71012.9.6. Uruchamianie klientów wielu serwerów ....................712

12.10. Uaktualnianie MySQL .......................................................712

Rozdzia� 13. Bezpiecze�stwo i kontrola dost�pu ...................................71513.1. Zabezpieczenie dost�pu do MySQL przez system plików ........716

13.1.1. Jak ukra�� dane? ...................................................71713.1.2. Zabezpieczenie instalacji MySQL .............................718

13.2. Zarz�dzanie kontami u�ytkowników w MySQL .......................72513.2.1. Zarz�dzanie kontem MySQL na wysokim poziomie ....72713.2.2. Nadawanie uprawnie� ............................................73213.2.3. Wy�wietlanie uprawnie� u�ytkownika .......................74413.2.4. Odbieranie uprawnie� .............................................74413.2.5. Zmiana has�a lub zerowanie zapomnianego ..............74513.2.6. Unikanie ryzyka zwi�zanego z kontrol� dost�pu .........74613.2.7. Wtyczki metod uwierzytelniania i u�ytkownicy proxy ...750

13.3. Struktura i zawarto�� tabel uprawnie� .................................75413.3.1. Istniej�ce w tabelach uprawnie� kolumny

dotycz�ce zasi�gu udzielanego dost�pu ...................75713.3.2. Istniej�ce w tabelach uprawnie�

kolumny uprawnie� ................................................75813.3.3. Istniej�ce w tabelach uprawnie�

kolumny uwierzytelnienia ........................................759

Poleć książkęKup książkę

Page 11: Tłumaczenie: Robert Górczyński

Spis tre�ci 11

13.3.4. Istniej�ce w tabelach uprawnie�kolumny dotycz�ce SSL ..........................................759

13.3.5. Istniej�ce w tabelach uprawnie� kolumnyzarz�dzania zasobami .............................................760

13.4. W jaki sposób serwer kontroluje dost�p uzyskiwanyprzez klientów? ..................................................................76113.4.1. Zawarto�� kolumn zasi�gu ......................................76213.4.2. Weryfikacja uprawnie� zapytania .............................76413.4.3. Kolejno�� dopasowania kolumn zasi�gu ..................76613.4.4. Puzzle uprawnie� ...................................................767

13.5. Konfiguracja bezpiecznych po��cze� za pomoc� SSL .............770

Rozdzia� 14. Obs�uga bazy danych, kopie zapasowe i replikacja ............77514.1. Zasady obs�ugi profilaktycznej .............................................77514.2. Obs�uga bazy danych w dzia�aj�cym serwerze .......................777

14.2.1. Blokowanie poszczególnych tabel w celu uzyskaniadost�pu tylko do odczytu lub odczytu i zapisu ...........779

14.2.2. Na�o�enie na wszystkie bazy danych blokadypozwalaj�cej jedynie na ich odczyt ...........................782

14.3. Ogólne dzia�ania profilaktyczne ............................................78314.3.1. U�ywanie mo�liwo�ci serwera

w zakresie automatycznej naprawy ..........................78314.3.2. Harmonogram dzia�a� profilaktycznych .....................784

14.4. Tworzenie kopii zapasowej bazy danych ...............................78514.4.1. Cechy charakterystyczne przeno�no�ci silników

bazy danych ...........................................................78814.4.2. Tworzenie kopii zapasowej za pomoc� narz�dzia

mysqldump ............................................................79014.4.3. Tworzenie binarnej kopii zapasowej .........................79314.4.4. Tworzenie kopii zapasowej tabel InnoDB ..................795

14.5. Kopiowanie baz danych do innego serwera ...........................79614.5.1. Kopiowanie bazy danych

za pomoc� pliku kopii zapasowej .............................79714.5.2. Kopiowanie baz danych z jednego serwera

do innego ..............................................................79814.6. Sprawdzanie i naprawianie tabel bazy danych .......................798

14.6.1. Sprawdzanie tabelza pomoc� zapytania CHECK TABLE .........................800

14.6.2. Naprawa tabel za pomoc� zapytania REPAIR TABLE ..80114.6.3. U�ycie narz�dzia mysqlcheck do sprawdzania

i naprawy tabel ......................................................80114.7. U�ycie kopii zapasowej do przywrócenia danych ....................803

14.7.1. Przywracanie ca�ych baz danych ..............................80314.7.2. Przywracanie poszczególnych tabel ..........................804

Poleć książkęKup książkę

Page 12: Tłumaczenie: Robert Górczyński

12 MySQL. Vademecum profesjonalisty

14.7.3. Ponowne wykonanie zapyta� zapisanychw plikach binarnego dziennika zdarze� .....................805

14.7.4. Rozwi�zywanie problemów zwi�zanychz automatyczn� napraw� w InnoDB ..........................807

14.8. Konfiguracja serwerów replikacji ..........................................80914.8.1. Jak dzia�a replikacja? .............................................80914.8.2. Utworzenie relacji typu g�ówny – podleg�y ..................81114.8.3. Formaty rejestracji zdarze� w dzienniku binarnym ......81514.8.4. U�ycie serwera podleg�ego replikacji

do tworzenia kopii zapasowych ................................815

Dodatki

Dodatek A Oprogramowanie wymagane do u�ycia tej ksi��ki ..............819A.1. Pobranie dystrybucji sampdb

zawieraj�cej przyk�adow� baz� danych ...................................819A.2. Pobieranie serwera MySQL

i powi�zanego z nim oprogramowania ....................................820A.3. Instalacja MySQL .................................................................822

A.3.1. Tworzenie konta logowania dla u�ytkownika MySQL .......823A.3.2. Instalacja MySQL .......................................................823A.3.3. Konfiguracja zmiennej �rodowiskowej PATH ..................824A.3.4. Inicjalizacja katalogu danych i tabel uprawnie� .............825A.3.5. Uruchamianie serwera ................................................826A.3.6. Inicjalizacja innych tabel systemowych .........................827

A.4. Informacje dotycz�ce instalacji Perl DBI .................................828A.5. Informacje dotycz�ce instalacji PHP i PDO ..............................829

Dodatek B Przewodnik po typach danych ...........................................831B.1. Typy liczbowe .......................................................................833

B.1.1. Typy liczb ca�kowitych .................................................834B.1.2. Typy liczb o sta�ej ilo�ci cyfr ........................................836B.1.3. Typy liczb zmiennoprzecinkowych .................................836B.1.4. Typ BIT ......................................................................837

B.2. Typy tekstowe ......................................................................838B.2.1. Typy binarnych ci�gów tekstowych ...............................840B.2.2. Typy niebinarnych ci�gów tekstowych ...........................842B.2.3. Typy ENUM i SET ........................................................845

B.3. Typy daty i godziny ...............................................................845

Dodatek C Przewodnik po operatorach i funkcjach .............................851C.1. Operatory ............................................................................852

C.1.1. Kolejno�� operatorów .................................................852C.1.2. Operatory grupowania .................................................853C.1.3. Operatory arytmetyczne ..............................................854

Poleć książkęKup książkę

Page 13: Tłumaczenie: Robert Górczyński

Spis tre�ci 13

C.1.4. Operatory porównania .................................................856C.1.5. Operatory bitowe ........................................................861C.1.6. Operatory logiczne ......................................................862C.1.7. Operatory rzutowania ..................................................864C.1.8. Operatory dopasowania wzorca ...................................865

C.2. Funkcje ...............................................................................869C.2.1. Funkcje porówna� ......................................................870C.2.2. Funkcje rzutowania .....................................................872C.2.3. Funkcje liczbowe ........................................................873C.2.4. Funkcje ci�gu tekstowego ...........................................878C.2.5. Funkcje daty i godziny .................................................892C.2.6. Funkcje podsumowa� .................................................907C.2.7. Funkcje zapewnienia bezpiecze�stwa

oraz zwi�zane z kompresj� ..........................................911C.2.8. Funkcje nak�adania blokad doradczych .........................915C.2.9. Funkcje zwi�zane z adresem IP ...................................917

C.2.10. Funkcje XML ..............................................................919C.2.11. Funkcje przestrzenne .................................................920C.2.12. Ró�ne funkcje ............................................................920

Dodatek D Przewodnik po zmiennych systemowych,stanu i u�ytkownika .........................................................927D.1. Zmienne systemowe ............................................................927

D.1.1. Zmienne systemowe InnoDB ......................................972D.2. Zmienne stanu ....................................................................987

D.2.1. Zmienne stanu InnoDB ...............................................994D.2.2. Zmienne stanu bufora zapyta� ....................................998D.2.3. Zmienne stanu SSL ...................................................999

D.3. Zmienne zdefiniowane przez u�ytkownika .............................1000

Dodatek E Przewodnik po sk�adni SQL .............................................1003E.1. Sk�adnia zapyta� SQL (zapytania niez�o�one) ........................1004E.2. Sk�adnia zapyta� SQL (zapytania z�o�one) ............................1103

E.2.1. Polecenia struktury kontrolnej ...................................1103E.2.2. Zapytania obs�ugi deklaracji ......................................1105E.2.3. Zapytania obs�ugi kursora .........................................1107E.2.4. Zapytania obs�ugi warunków .....................................1108

E.3. Sk�adnia komentarzy ..........................................................1112

Dodatek F Przewodnik po programie SQL ........................................1115F.1. Wy�wietlanie komunikatu pomocy programu .........................1116F.2. Okre�lanie opcji programu ...................................................1117

F.2.1. Opcje standardowe programu MySQL .........................1119F.2.2. Pliki opcji .................................................................1124F.2.3. Zmienne �rodowiskowe .............................................1129

Poleć książkęKup książkę

Page 14: Tłumaczenie: Robert Górczyński

14 MySQL. Vademecum profesjonalisty

F.3. Narz�dzie myisamchk .........................................................1130F.3.1. Opcje standardowe obs�ugiwane przez myisamchk ......1132F.3.2. Opcje charakterystyczne dla myisamchk .....................1132F.3.3. Zmienne narz�dzia myisamchk ..................................1136

F.4. mysql ................................................................................1137F.4.1. Opcje standardowe obs�ugiwane przez mysql ..............1139F.4.2. Opcje charakterystyczne dla mysql .............................1140F.4.3. Zmienne programu mysql ..........................................1145F.4.4. Polecenia programu mysql .........................................1145F.4.5. Sekwencje definiuj�ce znak zach�ty mysql ..................1148

F.5. mysql.server ......................................................................1150F.5.1. Opcje obs�ugiwane przez mysql.server ........................1150

F.6. mysql_config ......................................................................1150F.6.1. Opcje charakterystyczne dla mysql_config ...................1151

F.7. Skrypt mysql_install_db ......................................................1152F.7.1. Opcje standardowe obs�ugiwane

przez mysql_install_db ..............................................1152F.7.2. Opcje charakterystyczne dla mysql_install_db .............1152

F.8. mysql_upgrade ...................................................................1153F.8.1. Opcje standardowe obs�ugiwane

przez mysql_upgrade ................................................1153F.8.2. Opcje charakterystyczne dla mysql_upgrade ................1154

F.9. mysqladmin .......................................................................1154F.9.1. Opcje standardowe obs�ugiwane przez mysqladmin .....1154F.9.2. Opcje charakterystyczne dla mysqladmin ....................1155F.9.3. Zmienne dla mysqladmin ..........................................1155F.9.4. Polecenia mysqladmin ..............................................1156

F.10. mysqlbinlog ......................................................................1158F.10.1. Opcje standardowe obs�ugiwane przez mysqlbinlog ...1159F.10.2. Opcje charakterystyczne dla mysqlbinlog ..................1159F.10.3. Zmienne dla mysqlbinlog .........................................1162

F.11. mysqlcheck ......................................................................1163F.11.1. Opcje standardowe obs�ugiwane przez mysqlcheck ....1163F.11.2. Opcje charakterystyczne dla mysqlcheck ..................1163

F.12. mysqld ............................................................................1167F.12.1. Opcje standardowe obs�ugiwane przez mysqld ..........1168F.12.2. Opcje charakterystyczne dla mysqld .........................1168F.12.3. Zmienne dla mysqld ................................................1180

F.13. mysqld_multi ....................................................................1180F.13.1. Opcje standardowe obs�ugiwane

przez mysqld_multi .................................................1180F.13.2. Opcje charakterystyczne dla mysqld_multi ................1181

Poleć książkęKup książkę

Page 15: Tłumaczenie: Robert Górczyński

Spis tre�ci 15

F.14. mysqld_safe ....................................................................1181F.14.1. Opcje standardowe obs�ugiwane

przez mysqld_safe ..................................................1182F.14.2. Opcje charakterystyczne dla mysqld_safe .................1182

F.15. mysqldump ......................................................................1184F.15.1. Opcje standardowe obs�ugiwane przez mysqldump ....1184F.15.2. Opcje charakterystyczne dla mysqldump ...................1185F.15.3. Oferowane przez mysqldump opcje formatu danych ....1193F.15.4. Zmienne dla mysqldump .........................................1193

F.16. mysqlimport .....................................................................1194F.16.1. Opcje standardowe obs�ugiwane przez mysqlimport ...1194F.16.2. Opcje charakterystyczne dla mysqlimport ..................1194F.16.3. Oferowane przez mysqlimport

opcje formatu danych ..............................................1196F.17. mysqlshow .......................................................................1196

F.17.1. Opcje standardowe obs�ugiwane przez mysqlshow .....1197F.17.2. Opcje charakterystyczne dla mysqlshow ...................1197

F.18. perror ..............................................................................1198F.18.1. Opcje standardowe obs�ugiwane przez perror ............1198

Skorowidz.......................................................................1199

Poleć książkęKup książkę

Page 16: Tłumaczenie: Robert Górczyński

16 MySQL. Vademecum profesjonalisty

Poleć książkęKup książkę

Page 17: Tłumaczenie: Robert Górczyński

11Katalog danych w MySQL

od względem koncepcyjnym różne systemy baz danych mają jedną wspólną cechę:zarządzają zestawem baz danych zawierających zestawy tabel. Jednak każdy system

bazy danych charakteryzuje się własnym rozwiązaniem w zakresie zarządzania danymii MySQL nie jest tutaj wyjątkiem. Domyślnie, serwer MySQL (mysqld) przechowujewszystkie informacje w lokalizacji nazywanej katalogiem danych MySQL. We wspomnianymkatalogu znajdują się wszystkie bazy danych, pliki stanu i pliki dzienników zdarzeńdostarczających informacje o działalności serwera. Jeżeli jesteś w jakimkolwiek stopniuodpowiedzialny za zadania administracyjne instalacji MySQL, powinieneś zapoznać sięz projektem i sposobem używania katalogu danych, ponieważ ta wiedza będzie Cipotrzebna w wypełnianiu obowiązków administracyjnych. Nawet jeśli nie zamierzaszzajmować się administracją MySQL, to lektura niniejszego rozdziału może przynieśćpewne korzyści, a wiedza o sposobie działania serwera na pewno nie zaszkodzi.

W tym rozdziale zostaną omówione wymienione poniżej zagadnienia:� Położenie katalogu danych. Ponieważ katalog danych odgrywa ważną rolę

w działalności serwera MySQL, powinieneś potrafić wskazać jego położenie,aby efektywnie administrować zawartością katalogu danych.

� Sposób, w jaki serwer organizuje dostęp do baz danych i tabel oraz nimzarządza. To bardzo ważne w celu konfiguracji harmonogramu obsługi serwera,a także przeprowadzania procesu odzyskiwania danych w przypadkuuszkodzenia tabel.

� Rodzaje generowanych plików stanu i dzienników zdarzeń oraz ich zawartość.Wspomniane pliki zawierają użyteczne informacje na temat działania serwerai są wręcz nieocenione po wystąpieniu jakichkolwiek problemów.

� Sposób zmiany domyślnego położenia i organizacji katalogu danych.To może być ważne podczas zarządzania alokacją zasobów dyskowychw systemie, na przykład przez zrównoważenie aktywności dyskowej międzydostępnymi napędami lub przez przeniesienie danych do systemów plikówz większą ilością wolnej przestrzeni. Zdobyta tutaj wiedza jest także użytecznapodczas planowania miejsca położenia nowych baz danych.

P

Poleć książkęKup książkę

Page 18: Tłumaczenie: Robert Górczyński

598 Rozdzia� 11. Katalog danych w MySQL

W rozdziale przyjęto założenie, że w przypadku systemów UNIX istnieje kontologowania przeznaczone do wykonywania zadań administracyjnych oraz dla działającegoserwera. W tej książce nazwa użytkownika i grupy wspomnianego konta to mysql.W podpunkcie 12.2.1.1, zatytułowanym „Działanie serwera w ramach pozbawionegouprawnień konta logowania”, przedstawiono powody, dla których warto używaćoddzielnego konta logowania do wykonywania zadań administracyjnych MySQL.

11.1. Po�o�enie katalogu danychDomyślne położenie katalogu danych (data) jest skompilowane w serwerze. W systemachUNIX z reguły będzie to katalog /usr/local/mysql/data w przypadku instalacji MySQLz dystrybucji binarnej bądź źródłowej lub /var/lib/mysql po instalacji z pakietu RPM.Z kolei w systemach Windows najczęściej będzie to katalog C:\ProgramData\MySQLlub C:\Documents and Settings\All Users\ Application Data\MySQL, w zależnościod używanej wersji Windows.

Jeżeli kompilujesz MySQL ze źródeł, domyślne położenie katalogu danych możeszwskazać za pomocą opcji wiersza poleceń -DMYSQL_DATADIR=nazwa_katalogu podczasuruchamiania CMake.

Aby położenie katalogu danych wskazać w chwili uruchamiania serwera, należy użyćopcji --datadir=nazwa_katalogu. To użyteczne rozwiązanie w celu wskazania innegokatalogu niż domyślny zdefiniowany w trakcie kompilacji. Jeszcze innym sposobem jestpodanie katalogu w pliku opcji odczytywanym przez serwer w chwili jego uruchamiania.W takim przypadku nie ma konieczności podawania katalogu danych w wierszu poleceńw trakcie każdego uruchamiania serwera.

Jako administrator MySQL powinieneś znać miejsce położenia katalogu danychserwera, ale jeśli go nie znasz (prawdopodobnie po przejęciu obowiązków po poprzednimadministratorze, który nie pozostawił wystarczająco dokładnych informacji o instalacjiMySQL), istnieje kilka sposobów na sprawdzenie wspomnianego położenia. Poniżejprzedstawiono jedną z metod, stosowaną, gdy serwer nie jest uruchomiony. Kolejnametoda pozwala na sprawdzenie położenia katalogu danych serwera w przypadkudziałającego serwera.

Spójrz na plik opcji odczytywany w chwili uruchamiania serwera. Na przykład,w systemach UNIX po otworzeniu pliku /etc/my.cnf w grupie [mysqld] możesz znaleźćwiersz datadir:

[mysqld]datadir= /�cie�ka/dost�pu/do/katalogu/data

Ścieżka dostępu wskazuje położenie katalogu danych serwera.Jeżeli nie jesteś pewien, czy serwer odczytuje pliki opcji, wywołaj go w przedstawiony

poniżej sposób i sprawdź komunikat pomocy, który wyświetla położenia plików opcji:

% mysqld --verbose --help

Poleć książkęKup książkę

Page 19: Tłumaczenie: Robert Górczyński

11.2. Struktura katalogu danych 599

W przypadku działającego serwera nawiąż z nim połączenie i sprawdź położeniekatalogu danych. Serwer zawiera pewną liczbę zmiennych systemowych dotyczących jegofunkcjonowania i może wyświetlić ich wartości. Położenie katalogu danych wskazujezmienna datadir, której wartość można wyświetlić za pomocą zapytania SHOW VARIABLESlub polecenia mysqladmin variables. Jeżeli zapytanie SHOW VARIABLES wykonaszw systemie UNIX, jego wynik może przedstawiać się następująco:

mysql> SHOW VARIABLES LIKE 'datadir';+---------------+------------------------+| Variable_name | Value |+---------------+------------------------+| datadir | /usr/local/mysql/data/ |+---------------+------------------------+

Z poziomu wiersza poleceń użyj narzędzia mysqladmin:

% mysqladmin variables+---------------+------------------------+| Variable_name | Value |+---------------+------------------------+...| datadir | /usr/local/mysql/data/ |...

W systemie Windows położeniem katalogu danych może być na przykładC:\ProgramData\MySQL.

Jeżeli masz kilka działających serwerów, będą one nasłuchiwały na różnych interfejsachsieciowych (porty TCP/IP, pliki gniazd systemu UNIX, nazwane potoki w Windows lubpamięć współdzielona). Informacje o położeniu katalogu danych możesz otrzymać ponawiązaniu połączenia z każdym serwerem po kolei za pomocą odpowiednich opcjiparametrów połączenia.

W przypadku istnienia katalogu danych i konieczności jego przeniesienia do innegopołożenia zapoznaj się z podrozdziałem 11.3, zatytułowanym „Przeniesienie zawartościkatalogu danych”, w którym omówiono techniki przenoszenia katalogu danych MySQL.

11.2. Struktura katalogu danychKatalog danych MySQL zawiera wszystkie bazy danych, którymi zarządza serwer. Ogólnierzecz biorąc, mają one postać struktury drzewa zaimplementowanego w bardzo prostysposób, wykorzystujący hierarchiczną strukturę systemu plików UNIX lub Windows:

� Każda baza danych ma własny podkatalog w katalogu danych MySQL.� Tabele, widoki i wyzwalacze w bazie danych odpowiadają plikom

w podkatalogu danej bazy danych.

Poszczególne silniki bazy danych mogą stosować strukturę pamięci masowej różniącej sięod ogólnej hierarchicznej implementacji bazy danych za pomocą katalogów i plików.Na przykład, silnik bazy danych InnoDB może we wspólnej przestrzeni tabel

Poleć książkęKup książkę

Page 20: Tłumaczenie: Robert Górczyński

600 Rozdzia� 11. Katalog danych w MySQL

przechowywać wszystkie tabele InnoDB ze wszystkich baz danych. Wspomnianaprzestrzeń tabel składa się z jednego lub więcej ogromnych plików traktowanych jakopojedyncza, jednolita struktura danych, w ramach której przedstawiane są tabele i indeksy.Domyślnie silnik InnoDB przechowuje pliki przestrzeni tabel w katalogu danych MySQL.

Katalog danych może zawierać także jeszcze inne pliki:� Plik PID (ang. Process ID) serwera. Podczas uruchamiania serwer zapisuje

w tym pliku identyfikator procesu, co pozwala innym programom na poznaniewspomnianej wartości, jeśli muszą wysłać jakikolwiek sygnał do serwera.

� Generowane przez serwer pliki stanu i dzienników zdarzeń. Wspomniane plikizawierają ważne informacje o działalności serwera i są wręcz nieocenionedla administratorów, zwłaszcza w przypadku wystąpienia jakichkolwiekproblemów, gdy zachodzi potrzeba znalezienia źródła problemu. Na przykład,jeśli określone zapytanie nie jest z powodzeniem wykonywane w serwerze,problem bardzo często można ustalić przez analizę plików dzienników zdarzeń.(Jeżeli skonfigurujesz serwer w taki sposób, aby rejestracja informacji odbywałasię w tabelach bazy danych zamiast w plikach dzienników zdarzeń, to tabelezdarzeń znajdziesz w bazie danych mysql).

� Pliki powiązane z serwerem, na przykład plik klucza DES lub pliki kluczyi certyfikatów SSL serwera. Wymienione pliki administratorzy bardzo częstoumieszczają w katalogu danych MySQL.

11.2.1. W jaki sposób serwer MySQL zapewniadost�p do danych?

Kiedy baza danych MySQL jest używana w typowej konfiguracji klient-serwer, wszystkiebazy danych znajdujące się w katalogu danych są zarządzane przez pojedynczą jednostkę,czyli serwer MySQL (mysqld). Programy klientów nie mają możliwości bezpośredniegoprzeprowadzania operacji na danych. Zamiast tego serwer zapewnia pojedynczy punktkontaktu z bazą danych działający w charakterze pośrednika między programem klientai danymi, których chce użyć. Tę architekturę pokazano na rysunku 11.1.

Podczas uruchamiania serwera następuje otworzenie wszystkich obsługiwanych przezniego plików dzienników zdarzeń, a następnie udostępnienie katalogu danych interfejsowisieciowemu przez nasłuchiwanie różnych rodzajów połączeń sieciowych. (Informacjeszczegółowe dotyczące wyboru interfejsu sieciowego znajdziesz w punkcie 12.2.4,zatytułowanym „W jaki sposób serwer nasłuchuje połączeń?”). W celu uzyskania dostępudo danych program klienta nawiązuje połączenie z serwerem i wysyła żądania w postacizapytań SQL odpowiedzialnych za wykonanie określonych operacji, takich jak utworzenietabeli, wybór rekordów lub uaktualnienie rekordów. Serwer wykonuje wskazane operacjei zwraca klientowi ich wynik. Ponieważ serwer jest wielowątkowy, jednocześnie możeobsługiwać wiele połączeń z klientami. Jednak ponieważ jednocześnie można przeprowadzaćtylko jedną operację uaktualniania, w efekcie serwer serializuje żądania, aby dwa klientynigdy nie miały szansy na jednoczesne uaktualnienie tego samego rekordu.

Poleć książkęKup książkę

Page 21: Tłumaczenie: Robert Górczyński

11.2. Struktura katalogu danych 601

Rysunek 11.1. Sposób, w jaki serwer MySQL kontroluje dost�p do katalogu danych

W normalnych warunkach serwer działający w charakterze jedynego arbitra dostępudo bazy danych jest gwarancją uniknięcia wszelkiego rodzaju uszkodzeń, które mogłybypowstać na skutek jednoczesnego przetwarzania tabel bazy danych przez wiele klientów.Administratorzy powinni jednak zdawać sobie sprawę, że zdarzają się sytuacje, w którychserwer nie ma wyłącznej kontroli nad katalogiem danych. Narzędzia bezpośredniegodostępu, takie jak myisamchk, są używane do przeprowadzania zadań administracyjnychwzględem tabel MyISAM, podczas rozwiązywania problemów, operacji naprawy lubkompresji. Tego rodzaju programy działają bezpośrednio na plikach odpowiadającychtabelom. Ponieważ te narzędzia mogą zmienić zawartość tabel, używanie w tym samymczasie tabel przez serwer może doprowadzić do ich uszkodzenia.

Najbardziej oczywistym sposobem uniknięcia wymienionego problemu jest zatrzymanieserwera przed uruchomieniem programu narzędziowego. Jeśli nie ma takiej możliwości,konieczne jest poznanie sposobu zakazania serwerowi uzyskiwania dostępu do tabeli, gdyużywasz narzędzia bezpośrednio działającego na plikach tej tabeli. W podrozdziale 14.2,zatytułowanym „Obsługa bazy danych w działającym serwerze”, znajdziesz informacjedotyczące współpracy z serwerem podczas używania programów narzędziowych.Alternatywą dla narzędzia myisamchk jest wykonanie zapytań takich jak CHECK TABLEi REPAIR TABLE (lub wykorzystanie narzędzia mysqlcheck wykonującego wymienionezapytania). Wymienione zapytania eliminują problem współpracy z serwerem, ponieważsamemu serwerowi nakazują przeprowadzenie operacji na tabelach.

Poleć książkęKup książkę

Page 22: Tłumaczenie: Robert Górczyński

602 Rozdzia� 11. Katalog danych w MySQL

11.2.2. Przedstawienie baz danychw systemie plików

Każda baza danych zarządzana przez serwer MySQL ma własny katalog. Istnieje on jakopodkatalog w katalogu danych i ma taką samą nazwę jak baza danych, którą przedstawia.Na przykład, jeżeli katalog_danych określa położenie katalogu danych w serwerze,a nazwą bazy danych jest moja_baza_danych, wówczas katalogiem bazy danychjest katalog_danych/moja_baza_danych w systemach UNIXlub katalog_danych\moja_baza_danych w Windows.

Zapytanie SHOW DATABASES po prostu generuje listę podkatalogów znajdujących sięw katalogu danych MySQL.

Zapytanie CREATE DATABASE nazwa_bazy_danych tworzy podkatalog o podanej nazwiew katalogu danych MySQL. Utworzony w ten sposób podkatalog będzie katalogiem bazydanych. Ponadto, w katalogu bazy danych wymienione zapytanie tworzy plik db.optzawierający atrybuty bazy danych, na przykład domyślne kodowanie znaków i kolejnośćsortowania. W systemach UNIX właścicielem katalogu bazy danych jest użytkownikużywany do uruchamiania serwera. Katalog bazy danych jest dostępny tylko dla tegoużytkownika.

Zapytanie DROP DATABASE jest zaimplementowane niemal w taki sam prosty sposób.Zapytanie DROP DATABASE nazwa_bazy_danych powoduje usunięcie z katalogu danychMySQL podkatalogu o nazwie nazwa_bazy_danych wraz ze znajdującymi się w nimtabelami i innymi obiektami bazy danych, na przykład widokami i wyzwalaczami.Niemalże odpowiada to ręcznemu usunięciu katalogu bazy danych za pomocą poleceniapoziomu systemu plików, takiego jak rm w systemie UNIX lub del w Windows. Jednakmiędzy zapytaniem DROP DATABASE i wymienionymi poleceniami systemu plików istniejąpewne różnice:

� W przypadku zapytania DROP DATABASE serwer używa jedynie plikówrozpoznanych na podstawie rozszerzeń pliku jako tabele lub inne obiektybazy danych. Jeżeli w katalogu bazy danych utworzyłeś inne pliki lub podkatalogi,serwer pozostawi je nietknięte. W takim przypadku katalog bazy danych niemoże być usunięty, a zapytanie DROP DATABASE wygeneruje komunikat błędu.Jedną z konsekwencji jest, że zapytanie SHOW DATABASES nadal będzie wyświetlałonazwę tej bazy danych. Rozwiązanie takiego problemu polega na ręcznymusunięciu wszystkich plików w podkatalogu bazy danych, a następnieponownym wykonaniu zapytania DROP DATABASE.

� Nie można bezpiecznie usunąć tabel InnoDB w bazie danych przez usunięcie jejkatalogu. Dla każdej tabeli InnoDB silnik InnoDB ma odpowiedni wpisw systemowej przestrzeni tabel, która może również przechowywać zawartośćtabeli. Jeżeli baza danych zawiera tabele InnoDB, konieczne jest wykonaniezapytania DROP DATABASE, aby silnik InnoDB mógł uaktualnić katalog danychi usunąć całą zawartość tabeli z przestrzeni tabel.

Poleć książkęKup książkę

Page 23: Tłumaczenie: Robert Górczyński

11.2. Struktura katalogu danych 603

11.2.3. Przedstawienie tabel w systemie plikówMySQL obsługuje wiele silników bazy danych, między innymi InnoDB, MyISAMi MEMORY. Na dysku każda tabela MySQL jest przedstawiana przynajmniej za pomocąjednego pliku: to plik w formacie .frm, zawierający opis struktury tabeli. Serwer tworzyplik .frm, a poszczególne silniki bazy danych mogą tworzyć dodatkowe pliki zawierającedane rekordów i informacje o indeksach. Nazwy i struktura wspomnianych plików zależąod konkretnego silnika bazy danych.

Poniżej przedstawiono ogólne cechy charakterystyczne pewnych silników bazydanych w zakresie przechowywania plików na dysku. Więcej informacji szczegółowychdotyczących różnic między omawianymi silnikami bazy danych znajdziesz w punkcie 2.6.1,zatytułowanym „Cechy charakterystyczne silników bazy danych”.

Domyślnym silnikiem bazy danych jest InnoDB. W katalogu bazy danych dla każdejtabeli InnoDB znajduje się plik w formacie .frm, zawierający definicję struktury tabeli.Z kolei dla danych InnoDB stosuje dwa sposoby ich przedstawienia, oba oparte naxprzestrzeniach tabel:

� Systemowa przestrzeń tabel. Ta przestrzeń tabel składa się z jednego lub więcejogromnych plików umieszczonych w katalogu danych. Wspomniane plikiprzestrzeni tabel tworzą logiczną, ciągłą przestrzeń o wielkości równej sumiewielkości poszczególnych plików. Domyślnie, InnoDB przechowuje tabelew systemowej przestrzeni tabel. Dla tego rodzaju tabel jedynym plikiemcharakterystycznym dla tabeli jest plik w formacie .frm.

� Poszczególne przestrzenie tabel. Istnieje możliwość konfiguracji silnikaInnoDB w taki sposób, aby dla każdej tabeli tworzona była oddzielna przestrzeńtabel. W takim przypadku każda tabela InnoDB ma dwa charakterystyczne dlasiebie pliki w katalogu bazy danych: plik .frm oraz plik .ibd, zawierający danetabeli i jej indeksy.

Systemowa przestrzeń tabel jest używana także w innym celu. InnoDB zawierawewnętrzny katalog danych przechowujący informacje o wszystkich tabelach. Wspomnianykatalog znajduje się w systemowej przestrzeni tabel, która tym samym jest koniecznanawet w przypadku używania poszczególnych przestrzeni tabel do przechowywaniazawartości pojedynczych tabel.

Każda tabela MyISAM jest przez MySQL przedstawiana w postaci trzech plikówumieszczonych w katalogu bazy danych zawierającej daną tabelę. Nazwa bazowa każdegopliku odpowiada nazwie tabeli, natomiast jego rozszerzenie wskazuje przeznaczeniepliku. Na przykład, tabela MyISAM o nazwie moja_tabela ma trzy następujące pliki:

� moja_tabela.frm to plik formatu zawierający opis struktury tabeli;

� moja_tabela.myd to plik danych przechowujący zawartość rekordów tabeli;� moja_tabela.myi to plik zawierający informacje o indeksach dla wszystkich

indeksów utworzonych w danej tabeli.

Poleć książkęKup książkę

Page 24: Tłumaczenie: Robert Górczyński

604 Rozdzia� 11. Katalog danych w MySQL

Tabele typu MEMORY są obszarami w pamięci. Dla tabeli typu MEMORY w katalogubazy danych znajduje się jedynie plik .frm, opisujący jej format. Tego rodzaju tabela niejest w żaden inny sposób przedstawiana w systemie plików, ponieważ wszystkie danei indeksy tabeli MEMORY serwer przechowuje w pamięci, a nie na dysku. Po zamknięciuserwera cała zawartość tabel typu MEMORY jest bezpowrotnie tracona. Po ponownymuruchomieniu serwera tabela typu MEMORY nadal istnieje (ponieważ w systemie plikówjest jej plik .frm), ale pozostaje pusta.

11.2.4. Przedstawienie widoków i wyzwalaczyw systemie plików

Widoki i wyzwalacze są obiektami powiązanymi z plikami w katalogu bazy danychzawierającym te obiekty.

Widok składa się z pliku .frm zawierającego definicję widoku oraz inne powiązanez nim atrybuty. Bazowa nazwa pliku widoku odpowiada nazwie widoku. Dlatego teżwidok mój_widok jest przedstawiany przez plik mój_widok.frm.

Wyzwalacz jest przechowywany w pliku .trg, zawierającym definicję wyzwalacza orazinne powiązane z nim atrybuty. Plik wyzwalacza ma nazwę bazową odpowiadającą tabeli,do której należy. Na przykład, wyzwalacz o nazwie mój_wyzwalacz powiązany z tabeląmoja_tabela jest przechowywany w pliku moja_tabela.trg, a nie mój_wyzwalacz.trg. Jeżelitabela zawiera wiele wyzwalaczy, serwer przechowuje ich definicje w tym samym pliku.trg. Ponadto, każdy wyzwalacz ma plik .trn o nazwie wyzwalacza i zawierający nazwętabeli, w której został zdefiniowany. Na przykład, wyzwalacz mój_wyzwalacz ma plikmój_wyzwalacz.trn zawierający nazwę tabeli moja_tabela.

11.2.5. Jak zapytania SQL s� mapowane na operacjena pliku tabeli?

Każdy silnik bazy danych używa pliku .frm do przechowywania formatu (definicji) tabeli,aby dane wyjściowe zapytania SHOW TABLES nazwa_bazy_danych były takie same jak nazwybazowe plików .frm w katalogu bazy danych o wskazanej nazwie.

W celu utworzenia tabeli dowolnego typu obsługiwanego przez MySQL należywykonać zapytanie CREATE TABLE definiujące strukturę tabeli i zawierające klauzulęENGINE=nazwa_silnika wskazującą używany silnik bazy danych. W przypadku pominięciaklauzuli ENGINE serwer MySQL użyje domyślnego silnika bazy danych (InnoDB, o ile tegonie zmieniłeś). Serwer tworzy plik .frm dla nowej tabeli i umieszcza w nim wewnętrzniezakodowaną definicję tabeli oraz nakazuje odpowiedniemu silnikowi bazy danychutworzenie wszelkich plików powiązanych z tabelą. Na przykład, InnoDB tworzy odpowiedniwpis w katalogu danych oraz inicjalizuje w odpowiedniej przestrzeni tabel informacjeo danych i indeksach tabeli. Z kolei silnik MyISAM tworzy pliki danych (.myd) i indeksów(.myi), natomiast silnik CSV tworzy plik danych w formacie .csv. W systemach UNIXwłaścicielem wszystkich utworzonych w ten sposób plików przedstawiających tabelę jestużytkownik, którego konto jest używane do uruchamiania serwera.

Poleć książkęKup książkę

Page 25: Tłumaczenie: Robert Górczyński

11.2. Struktura katalogu danych 605

Po wykonaniu zapytania ALTER TABLE serwer ponownie koduje plik .frm tabeli w celuodzwierciedlenia strukturalnych zmian wprowadzonych przez zapytanie i odpowiedniomodyfikuje zawartość tabeli (dane i indeksy). To samo dzieje się również w przypadkuzapytań CREATE INDEX i DROP INDEX, ponieważ są one obsługiwane przez serwer jakoodpowiedniki zapytań ALTER TABLE. Jeżeli zapytanie ALTER TABLE powoduje zmianęsilnika bazy danych, zawartość tabeli jest transferowana do nowego silnika, któryponownie zapisuje tę zawartość na dysku, używając odpowiedniego typu plikówstosowanych do przedstawienia tabeli.

MySQL implementuje zapytanie DROP TABLE przez usunięcie plików przedstawiającychtabelę. Jeżeli usuniesz tabelę InnoDB, silnik bazy danych InnoDB uaktualnia także jejkatalog danych i oznacza jako wolną całą przestrzeń, która w systemowej przestrzenitabel InnoDB jest powiązana z usuniętą tabelą.

W przypadku innych silników bazy danych, na przykład MyISAM, istnieje możliwośćusunięcia tabeli przez ręczne usunięcie w katalogu bazy danych plików odpowiadającychdanej tabeli. W silnikach takich jak InnoDB lub MEMORY pewne fragmenty tabeli mogąnie być przedstawiane w plikach charakterystycznych dla danej tabeli, a więc zapytanieDROP TABLE nie ma odpowiednika w postaci polecenia systemu plików. Na przykład, tabelaInnoDB przechowywana w systemowej przestrzeni tabel zawsze jest unikalnie powiązanaz plikiem .frm, ale usunięcie wymienionego pliku nie powoduje całkowitego usunięcia danejtabeli. Katalog danych InnoDB musi być uaktualniony przez sam silnik InnoDB, a usunięciepliku .frm pozostawia dane i indeksy tabeli „porzucone” w systemowej przestrzeni tabel.

Jeżeli tabela InnoDB znajduje się w oddzielnej przestrzeni tabel, w katalogu bazydanych jest przedstawiana w postaci plików .frm i .ibd. Jednak nadal nie można „usunąć”tabeli przez usunięcie wymienionych plików, ponieważ wtedy silnik InnoDB nie maszansy na uaktualnienie katalogu danych. Konieczne jest użycie zapytania DROP TABLE,aby silnik InnoDB mógł usunąć pliki oraz uaktualnić katalog danych.

11.2.6. Ograniczenia systemu operacyjnegow zakresie nazw obiektów bazy danych

MySQL ma ogólne reguły dotyczące identyfikatorów dla nazw baz danych oraz innychobiektów, takich jak tabele. Wspomniane reguły zostały omówione w podrozdziale 2.2,zatytułowanym „Identyfikatory składni MySQL i reguły nadawania nazw”, ale poniżejpokrótce przedstawiono ich podsumowanie:

� Niecytowane identyfikatory mogą składać się z liter łacińskich od a do z o dowolnejwielkości, cyfr od 0 do 9, znaków dolara i podkreślenia oraz rozszerzonych znakówUnicode z zakresu od U+0080 do U+FFFF.

� Identyfikatory cytowane za pomocą odwróconych apostrofów mogą zawieraćtakże inne znaki, na przykład `dziwna?nazwa!`. Cytowanie jest również konieczne,gdy jako identyfikator użyte zostało słowo zarezerwowane SQL. Po włączeniutrybu SQL o nazwie ANSI_QUOTES identyfikator może być cytowany za pomocąodwróconych apostrofów lub ujęty w cudzysłów.

� Identyfikator może mieć maksymalnie 64 znaki długości.

Poleć książkęKup książkę

Page 26: Tłumaczenie: Robert Górczyński

606 Rozdzia� 11. Katalog danych w MySQL

Poza wymienionymi regułami system operacyjny, w którym został uruchomionyserwer MySQL, może nakładać inne ograniczenia na identyfikatory. Wynikają onez konwencji nazw w systemie plików, ponieważ nazwy baz danych i tabel odpowiadająnazwom katalogów i plików. Każda baza danych jest przedstawiana w systemie plikówza pomocą jej katalogu, natomiast każda tabela, niezależnie od używanego silnika bazydanych, jest reprezentowana w systemie plików przynajmniej przez plik .frm. Dlatego teżzastosowanie mają następujące ograniczenia:

� MySQL pozwala, aby nazwa bazy danych lub tabeli składała się z maksymalnie64 znaków, ale długość nazwy może być również ograniczona przez używanysystem plików.

� Rozróżnianie wielkości plików przez system plików wpływa na sposóbnadawania nazw bazom danych i plikom oraz odwoływania się do nich. Jeżelisystem plików rozróżnia wielkość liter (jak to zwykle ma miejsce w systemachUNIX), nazwy abc i ABC odwołują się do różnych plików. Jeśli system plików nierozróżnia wielkości liter (jak ma to miejsce w systemach Windows i Mac OS XExtended), wtedy nazwy abc i ABC odwołują się do tego samego pliku.Powinieneś o tym pamiętać, tworząc bazę danych w serwerze rozpoznającymwielkość liter w nazwach plików, ponieważ istnieje prawdopodobieństwo,że będziesz ją przenosił lub replikował do serwera, w którym wielkość literw nazwach plików nie ma znaczenia.

Serwer koduje w identyfikatorach znaki specjalne, które mogą sprawiać problemyw nazwach plików. Wspomniane kodowanie pozwala na użycie znaków takich jak / i \w nazwach występujących w zapytaniach SQL. Dowolny znak spoza zakresu cyfr i literłacińskich jest mapowany w nazwie pliku na znak @, po którym znajduje się zakodowanawartość znaku. Na przykład, znaki ? i ! mają kody 003f i 0021, a więc struktura tabeli o nazwiedziwna?nazwa! będzie zapisana w pliku .frm o nazwie dziwna@[email protected]łe pliki powiązane z tabelą będą miały podobne nazwy.

Jak wcześniej wspomniano, rozróżnianie wielkości liter przez system plików wpływana nazewnictwo baz danych i tabel. Jednym z rozwiązań jest używanie zawsze nazwo określonej wielkości liter. Inne rozwiązanie polega na uruchomieniu serwera wrazz przypisaną wartością 1 zmiennej systemowej lower_case_table_names, co ma dwa efekty:

� Serwer konwertuje nazwę tabeli na zapisaną małymi literami i dopiero wtedytworzy odpowiadające jej pliki na dysku.

� Później, podczas odwoływania się do tabeli w zapytaniu, serwer konwertuje jejnazwę na zapisaną małymi literami i dopiero wtedy próbuje odszukać na dyskuplik tabeli.

Wynikiem powyższych działań jest traktowanie nazw jako nierozróżniającychwielkości liter, niezależnie od rozróżniania wielkości liter przez system plików. Dziękitemu można łatwiej przenosić bazy danych i tabele między systemami. Jednak jeśli planujeszzastosowanie przedstawionej strategii, konfigurację zmiennej lower_case_table_namesmusisz przeprowadzić przed rozpoczęciem tworzenia baz danych i tabel, a nie po.

Poleć książkęKup książkę

Page 27: Tłumaczenie: Robert Górczyński

11.2. Struktura katalogu danych 607

Jeżeli wymienioną zmienną ustawisz już po utworzeniu baz danych lub tabel zawierającychw nazwach wielkie litery, zmienna nie przyniesie oczekiwanego efektu, ponieważ nazwyplików na dysku nie są w całości zapisane za pomocą małych liter. Aby uniknąćwspomnianego problemu, nazwy wszystkich tabel, które zawierają wielkie litery, zmieńna całkowicie małe i dopiero wtedy ustaw wartość zmiennej lower_case_table_names.(W celu zmiany nazwy tabeli można wykonać zapytanie ALTER TABLE lub RENAME TABLE).W przypadku dużej liczby tabel wymagających zmiany nazwy lub baz danych zawierającychw nazwach wielkie litery łatwiejszym rozwiązaniem jest utworzenie kopii zapasowejzawartości tych baz danych, a następnie ich ponowne utworzenie już po ustawieniuzmiennej lower_case_table_names:

1. Za pomocą narzędzia mysqldump utwórz kopię zapasową zawartości wszystkichbaz danych:% mysqldump --databases nazwa_bazy_danych > nazwa_bazy_danych.sql

2. Usuń wszystkie bazy danych, wykonując zapytania DROP DATABASE.

3. Zatrzymaj serwer, przekonfiguruj go przez przypisanie wartości 1 zmiennejsystemowej lower_case_table_names, a następnie ponownie uruchom serwer.

4. Za pomocą klienta mysql wczytaj zawartość wszystkich utworzonych wcześniejplików kopii zapasowych:% mysql < nazwa_bazy_danych.sql

Po ustawieniu zmiennej lower_case_table_names wszystkie bazy danych i tabelzostaną ponownie utworzone i zapisane na dysku w plikach o nazwachskładających się z małych liter.

Zmiennej lower_case_table_names można przypisać wiele wartości, jak to omówionow dodatku D, zatytułowanym „Przewodnik po zmiennych systemowych, stanu i użytkownika”.

11.2.7. Czynniki wp�ywaj�cena maksymaln� wielko�� tabeli

Wielkość tabeli w MySQL jest ograniczona, ale na to wpływa połączenie wielu czynników.Dlatego też nie zawsze można precyzyjnie wskazać te granice.

System operacyjny narzuca granicę maksymalnej wielkości pliku. Wspomnianeograniczenie ma zastosowanie względem plików przedstawiających tabele, na przykładplików .myd i .myi dla tabeli MyISAM, a także plików tworzących dowolną przestrzeńtabel InnoDB. Jednak ogólne wymagania w zakresie wielkości systemowej przestrzenitabel InnoDB mogą bardzo łatwo przekroczyć maksymalną dopuszczalną wielkość pliku.Rozwiązaniem jest skonfigurowanie przestrzeni tabel jako składającej się z wielu plików,z których każdy może osiągnąć wielkość maksymalną. Innym sposobem pokonaniaograniczenia w postaci maksymalnej wielkości plików jest wykorzystanie niezmodyfikowanychpartycji jako przestrzeni tabel InnoDB. Komponenty przestrzeni tabel znajdujące się naniezmodyfikowanych partycjach mogą osiągnąć rozmiary samej partycji. Informacje

Poleć książkęKup książkę

Page 28: Tłumaczenie: Robert Górczyński

608 Rozdzia� 11. Katalog danych w MySQL

dotyczące konfiguracji tego rodzaju rozwiązania znajdziesz w podpunkcie 12.5.3.1,zatytułowanym „Konfiguracja przestrzeni tabel InnoDB”.

Poza ograniczeniami narzucanymi przez system operacyjny, MySQL ma własne,wewnętrzne ograniczenia wielkości tabel. Wspomniane ograniczenia zależą od używanegosilnika bazy danych:

� W przypadku InnoDB maksymalna wielkość systemowej przestrzeni tabel InnoDBwynosi 4 miliardy stron o wielkości 16 KB. Maksymalna wielkość przestrzenitabel jest związana także z wielkością poszczególnych przechowywanych w niej tabelInnoDB. Jeżeli silnik jest zdefiniowany w sposób powodujący użycie oddzielnychprzestrzeni tabel, zawartość poszczególnych tabel InnoDB jest przechowywanaw plikach .ibd. W takim przypadku na maksymalną wielkość tabeli wpływ mająnakładane przez system operacyjny ograniczenia związane z maksymalnąwielkością pliku.

� W przypadku MyISAM wielkość plików .myd i .myi jest domyślnie ograniczonado 256 TB. Jednak jeśli w trakcie tworzenia tabeli zostaną użyte opcjeAVG_ROW_LENGTH i MAX_ROWS, to wymienione pliki mogą mieć wielkość do 65 536 TB.(Zapoznaj się z opisem zapytania CREATE TABLE w dodatku E, zatytułowanym„Przewodnik po składni SQL”). Wymienione opcje wpływają na wielkośćwewnętrznego wskaźnika, który określa maksymalną liczbę rekordów, któremoże przechowywać tabela. Gdy tabela MyISAM osiągnie swoją wielkośćmaksymalną i zaczną pojawiać się błędy o kodzie 135 i 136 dla operacji natabeli, użyj zapytania ALTER TABLE do zwiększenia wartości wymienionychopcji. Aby bezpośrednio zmienić domyślną wielkość wskaźnika MyISAM,należy ustawić zmienną systemową myisam_data_pointer_size. Nowa wartośćtej zmiennej ma zastosowanie również dla wcześniej utworzonych tabel.

W przypadku silników bazy danych przedstawiających dane i indeksy w oddzielnychplikach maksymalna wielkość tabeli zostaje osiągnięta, gdy dowolny z tworzących jąplików będzie miał maksymalną dopuszczalną wielkość. Dla tabeli MyISAM cechycharakterystyczne indeksowania wpływają na plik, który pierwszy osiągnie limit. Jeżelitabela ma niewiele lub w ogóle nie ma indeksów, plik danych prawdopodobnie pierwszyosiągnie wielkość maksymalną. Z kolei w przypadku tabeli posiadającej wiele indeksówplik indeksu może być tym, który jako pierwszy osiągnie wielkość maksymalną.

Obecność kolumny AUTO_INCREMENT wyraźnie ogranicza liczbę rekordów, które mogąznaleźć się w tabeli. Na przykład, jeśli wymieniona kolumna została zdefiniowana jakotypu TINY UNSIGNED, jej maksymalną wartością jest 255 i to jednocześnie jest maksymalnaliczba rekordów, które mogą być przechowywane przez tabelę. Większe typy liczb całkowitychpozwalają na przechowywanie większej liczby rekordów. Ogólnie rzecz biorąc, zdefiniowaniew tabeli indeksu PRIMARY KEY lub UNIQUE ogranicza liczbę rekordów tej tabeli do maksymalnejliczby unikalnych wartości, jakie mogą być przechowywane przez utworzony indeks.

W celu określenia rzeczywistej wielkości tabeli, jaką można uzyskać, pod uwagę trzebawziąć wiele czynników. Efektywna maksymalna wielkość tabeli będzie prawdopodobnie

Poleć książkęKup książkę

Page 29: Tłumaczenie: Robert Górczyński

11.2. Struktura katalogu danych 609

wartością najmniejszego z wspomnianych czynników. Przyjmujemy założenie, że chceszutworzyć tabelę typu MyISAM. MySQL określa maksymalną wielkość plików danychi indeksów na 256 TB każdy przy użyciu wskaźnika o domyślnej wielkości. Jednak jeślisystem operacyjny nakłada ograniczenie wielkości pliku do 2 GB, to będzie efektywnawielkość maksymalna dla poszczególnych plików tabeli. Z drugiej strony, jeśli systemplików obsługuje pliki o wielkości większej niż 256 TB, czynnikiem decydującymo maksymalnej wielkości tabeli będzie czynnik MySQL, a dokładnie wielkość jegowewnętrznego wskaźnika danych. To jest czynnik, nad którym masz kontrolę.

W związku z przechowywaniem tabel InnoDB w systemowej przestrzeni tabel pojedynczatabela InnoDB może osiągnąć wielkość przestrzeni tabel, która z kolei może być utworzonaz wielu plików, aby zapewnić odpowiednią wielkość do pomieszczenia wszystkich tabel.Jeśli (co jest bardzo prawdopodobne) masz wiele tabel InnoDB, wszystkie współdzielą tęsamą przestrzeń i tym samym są ograniczone nie tylko wielkością przestrzeni tabel, alerównież miejscem zajmowanym w niej przez inne tabele. Pojedyncza tabela InnoDB możezwiększać swoją wielkość, o ile przestrzeń tabel nie jest zapełniona. Po wykorzystaniucałej przestrzeni tabel żadna tabela nie może się zwiększyć aż do chwili dodania do przestrzenitabel kolejnego komponentu, który w ten sposób ją powiększy. Alternatywne rozwiązaniepolega na zastosowaniu automatycznie rozszerzającego się komponentu przestrzeni tabel.W takim przypadku komponent zwiększa swoją wielkość, dopóki nie osiągnie maksymalnejdozwolonej wielkości pliku w systemie operacyjnym lub nie wykorzysta całej dostępnejpamięci masowej. Informacje dotyczące konfiguracji przestrzeni tabel znajdzieszw podpunkcie 12.5.3.1, zatytułowanym „Konfiguracja przestrzeni tabel InnoDB”.

11.2.8. Wp�yw struktury katalogu danychna wydajno�� systemu

Struktura katalogu danych MySQL jest łatwa do zrozumienia, ponieważ w naturalnysposób wykorzystuje hierarchiczną strukturę systemu plików. Jednocześnie wspomnianastruktura wiąże się z pewnymi implikacjami w zakresie wydajności, szczególnie podczaswykonywania operacji otwierania plików przedstawiających tabele bazy danych.

W przypadku silników bazy danych przedstawiających poszczególne tabele w postaciwłasnych plików każde otworzenie tabeli może wymagać deskryptora pliku. Jeżeli tabelajest przedstawiana za pomocą wielu plików, jej otworzenie wymaga wielu deskryptorówplików, a nie tylko jednego. Serwer w sprytny sposób buforuje deskryptory plików, alebardzo obciążony serwer może bardzo łatwo wykorzystywać wiele z nich podczas obsługiwielu jednoczesnych połączeń z klientami lub w trakcie wykonywania skomplikowanychzapytań odwołujących się do wielu tabel. To może stanowić poważny problem, ponieważdeskryptory plików szybko wyczerpują zasoby w wielu systemach, przede wszystkim w tych,które domyślnie mają ustawioną niską wartość deskryptorów plików. System operacyjnynakładający niskie ograniczenie na liczbę deskryptorów plików i niezwiększający ich liczbynie jest dobrym kandydatem do uruchamiania w nim bardzo obciążonego serwera MySQL.

Innym efektem przedstawiania każdej tabeli w postaci oddzielnych plików jest wydłużenieczasu otwierania tabeli wraz ze wzrostem liczby tabel. Operacje otwarcia tabeli są mapowane

Poleć książkęKup książkę

Page 30: Tłumaczenie: Robert Górczyński

610 Rozdzia� 11. Katalog danych w MySQL

na dostarczane przez system operacyjny operacje otwarcia plików. Efektywnośćwymienionych operacji zależy od efektywności procedur systemowych odpowiedzialnych zaprzeszukiwanie katalogu. Normalnie to nie jest żaden problem, ale sytuacja ulega zmianie,jeśli w bazie danych znajduje się ogromna liczba tabel. Na przykład, tabela MyISAM jestprzedstawiana przez trzy pliki. Jeśli wymagane jest użycie 10 000 tabel MyISAM, wtedykatalog bazy danych będzie zawierał 30 000 plików. W przypadku tak dużej liczby plikówna pewno zauważysz spowolnienie wynikające z czasu potrzebnego na przeprowadzenieoperacji otwierania plików. Jeżeli to Cię martwi, rozważ zastosowanie systemu plikówcharakteryzującego się wysoką wydajnością podczas obsługi ogromnej ilości plików.Na przykład, XFS lub JFS zapewniają dobrą wydajność działania, nawet w przypadkuogromnej liczby małych plików. Jeśli zastosowanie innego systemu plików nie jest możliwe,wtedy konieczne może być ponowne przemyślenie struktury tabel względem wymagańaplikacji i odpowiednia zmiana tej struktury. Przede wszystkim odpowiedz sobie napytanie, czy naprawdę konieczne jest używanie tak dużej liczby tabel; czasami aplikacjaniepotrzebnie zwiększa ich liczbę. Aplikacja może na przykład tworzyć oddzielną tabelędla każdego wyniku przeprowadzanej przez użytkownika operacji wyszukiwania wielutabel, a wszystkie wspomniane tabele wynikowe będą miały identyczne struktury. Jeżelispróbujesz je połączyć w pojedynczą tabelę, może się to okazać możliwe po dodaniukolejnej kolumny identyfikującej użytkownika, którego dotyczy dany rekord. Jeśli takierozwiązanie zmniejszy liczbę tabel, wydajność działania aplikacji niewątpliwie wzrośnie.

W przypadku każdego projektu bazy danych trzeba sprawdzić, czy określonastrategia jest warta zastosowania w danej aplikacji. Poniżej wymieniono powody,dla których nie powinno się łączyć tabel w przedstawiony wcześniej sposób:

� Większa ilość wymaganego miejsca na dysku. Połączenie tabel zmniejsza całkowitąliczbę wymaganych tabel (skrócenie czasu otwierania tabel), ale wiąże się z dodaniemkolejnej kolumny (zwiększenie ilości wymaganego miejsca na dysku). To jesttypowy kompromis — czas otworzenia pliku tabeli kontra ilość wymaganejpamięci masowej; samodzielnie musisz zdecydować, który z wymienionychczynników jest najważniejszy. Jeżeli ważna jest szybkość, to prawdopodobniepoświęcisz nieco dodatkowego miejsca na dysku twardym. Z kolei jeśli ilośćpamięci masowej jest ograniczona, wtedy akceptowalne może być użyciewiększej liczby tabel i nieco większe opóźnienie w działaniu.

� Kwestie dotyczące bezpieczeństwa. Mogą one wpływać na możliwość łączeniatabel. Jednym z powodów stosowania oddzielnych tabel dla poszczególnychużytkowników jest zapewnienie dostępu do tabeli tylko dla pojedynczego kontaMySQL i stosowania tym samym uprawnień na poziomie tabeli. Po połączeniutabel dane wszystkich użytkowników będą znajdowały się w tej samej tabeli.MySQL nie ma systemu ograniczającego danemu użytkownikowi dostęp dookreślonych rekordów. Dlatego też połączenie tabel nie będzie mogło odbyć siębez złamania reguł kontroli dostępu. Jednym z możliwych rozwiązań jest użyciewidoków pobierających rekordy dla bieżącego użytkownika i nadającychuprawnienia dostępu poprzez wspomniane widoki. Ewentualnie, jeśli cały

Poleć książkęKup książkę

Page 31: Tłumaczenie: Robert Górczyński

11.2. Struktura katalogu danych 611

dostęp do danych jest kontrolowany przez aplikację (użytkownik nigdy nienawiązuje bezpośredniego połączenia z bazą danych), masz możliwość połączeniatabel i użycia logiki aplikacji w celu wymuszenia stosowania reguł dostępuna poziomie rekordów dla zwróconego wyniku.

Innym sposobem utworzenia wielu tabel bez konieczności tworzenia wieluposzczególnych plików jest wykorzystanie tabel InnoDB i przechowywanie ich w systemowejprzestrzeni tabel. W takim przypadku silnik InnoDB z każdą tabelą powiązuje jedynieplik .frm, natomiast dane i indeksy wszystkich tabel InnoDB są już przechowywane razem.W ten sposób minimalizuje się liczbę plików na dysku wymaganych do przedstawieniatabel, a tym samym znacznie zmniejsza liczbę deskryptorów plików wymaganych dootworzenia tabel. InnoDB potrzebuje tylko jednego deskryptora dla pliku komponentuprzestrzeni tabel (który na dodatek nie ulega zmianie w trakcie istnienia procesu serwera)i krótko mówiąc, deskryptor dla otwieranej przez niego tabeli jest odczytywany wrazz plikiem .frm tabeli.

11.2.9. Pliki dzienników zdarze� i stanu MySQLPoza podkatalogami baz danych, katalog danych MySQL zawiera także pewną liczbęplików dzienników zdarzeń oraz stanu MySQL, które wymieniono w tabeli 11.1. Domyślnympołożeniem wszystkich plików wymienionych w tabeli 11.1 jest katalog danych serwera,a nazwa domyślna wielu z nich pochodzi od nazwy komputera, w którym działa serwer,oznaczonej w tabeli jako HOSTNAME. Dzienniki zdarzeń binarne i przekazywania są tworzonew postaci ponumerowanej sekwencji plików, co zostało oznaczone jako nnnnnn. W tabeliwymieniono jedynie pliki dzienników zdarzeń i stanu używane na poziomie serwera.Poszczególne silniki bazy danych również mogą tworzyć własne dzienniki zdarzeńoraz inne pliki. Na przykład, takie rozwiązanie jest stosowane przez InnoDB.

Tabela 11.1. Pliki dzienników zdarze� i stanu MySQL

Typ pliku Nazwa domy�lna Zawarto�� pliku

Plik PID HOSTNAME.pid Identyfikator procesu serwera.

Dziennik błędów HOSTNAME.err Zdarzenia podczas uruchamianiai zamykania serwera oraz ewentualnebłędy.

Ogólny dziennikzapytań

HOSTNAME.log Zdarzenia podczas nawiązywaniai zamykania połączenia z serweremoraz informacje o zapytaniach.

Dziennik binarny HOSTNAME-bin.nnnnnn Binarny format zapytań modyfikującychdane.

Indeks dziennikabinarnego

HOSTNAME-bin.index Lista aktualnych nazw plików binarnychdzienników zdarzeń.

Poleć książkęKup książkę

Page 32: Tłumaczenie: Robert Górczyński

612 Rozdzia� 11. Katalog danych w MySQL

Tabela 11.1. Pliki dzienników zdarze� i stanu MySQL (ci�g dalszy)

Typ pliku Nazwa domy�lna Zawarto�� pliku

Dziennikprzekazywania

HOSTNAME-relay-bin.nnnnnn Daty modyfikacji otrzymanych przezserwer podległy z serwera głównego.

Indeks dziennikaprzekazywania

HOSTNAME-relay-bin.index Lista aktualnych nazw plikówdzienników przekazywania.

Plik informacyjnyserwera głównego

master.info Parametry nawiązania połączeniaz serwerem głównym.

Plik informacyjnyserwera podległego

relay-log.info Stan przetwarzania dziennikaprzekazywania.

Dziennik wolnychzapytań

HOSTNAME-slow.log Tekst zapytań, których przetworzeniewymaga dużej ilości czasu.

W przypadku dzienników zdarzeń ogólnego i wolno wykonywanych zapytań możnazdecydować, czy serwer ma zapisywać zdarzenia w pliku dziennika, w tabeli bazy danychmysql, czy w obu wymienionych miejscach. Szczegółowe omówienie rejestracji zdarzeńw tabelach przedstawiono w punkcie 12.8.6, zatytułowanym „Rejestracja zdarzeń w tabelach”.

11.2.9.1. Plik PIDW chwili uruchamiania serwera zapisuje on w pliku PID identyfikator procesu (PID),natomiast podczas zamykania serwera MySQL wspomniany plik jest usuwany. Inneprocesy mogą wykorzystać plik PID do ustalenia, czy serwer działa oraz jaki jest jegoidentyfikator procesu. Na przykład, jeśli w trakcie zamykania systemu operacyjnegouruchamia on skrypt mysql.server w celu zamknięcia serwera MySQL, skrypt analizujeplik PID i ustala tym samym proces, któremu trzeba wysłać sygnał zakończenia działania.

Jeżeli serwer nie będzie mógł utworzyć pliku PID, w dzienniku zdarzeń umieściodpowiedni komunikat błędu i będzie kontynuował działanie.

11.2.9.2. Dzienniki zdarze� MySQLSerwer MySQL może obsługiwać wiele typów plików dzienników zdarzeń. Większośćoperacji rejestrowania zdarzeń jest opcjonalna. Opcje podczas uruchamiania serweramożna wykorzystać do włączenia jedynie potrzebnych dzienników zdarzeń i nadania imnazw, jeśli nie odpowiadają Ci ich nazwy domyślne. Pamiętaj, że wraz z upływem czasupliki dzienników zdarzeń mogą osiągnąć ogromne rozmiary. Dlatego bardzo ważne jestuniemożliwienie im zapełnienia systemu plików. Aby zachować pod kontrolą ilość miejscazajmowanego przez pliki dzienników zdarzeń, co pewien czas należy usuwać stare.

W tym punkcie pokrótce zostaną omówione niektóre pliki dzienników zdarzeń.Więcej informacji na temat dzienników zdarzeń oraz opcji kontrolujących zachowanieserwera w zakresie rejestracji zdarzeń i usuwania starych plików dzienników znajdzieszw podrozdziale 12.8, zatytułowanym „Dzienniki zdarzeń serwera”.

Poleć książkęKup książkę

Page 33: Tłumaczenie: Robert Górczyński

11.3. Przeniesienie zawarto�ci katalogu danych 613

Dziennik zdarzeń błędów zawiera informacje diagnostyczne wygenerowane przez serwerpo wystąpieniu zdarzenia wyjątkowego. Jeżeli próba uruchomienia serwera zakończy sięniepowodzeniem lub serwer niespodziewanie zakończy działanie, ten dziennik zdarzeńokaże się bardzo użyteczny, ponieważ często zawiera informacje o przyczynach problemów.

Ogólny dziennik zdarzeń zawiera ogólne informacje o działaniu serwera: kto i skądnawiązał połączenie oraz jakie wykonał zapytania. Binarny dziennik zdarzeń równieżzawiera informacje o zapytaniach, ale jedynie tych modyfikujących zawartość bazy danych.Ponadto, zawiera informacje takie jak znaczniki czasu wymagane do zapewnieniasynchronizacji serwerów podległych z głównym po włączeniu replikacji. Zawartośćbinarnego dziennika zdarzeń jest zapisywana w formacie binarnym, jako „zdarzenia”,które mogą być wykonane i dostarczyć dane wejściowe dla klienta mysql. Towarzyszącydziennikowi binarnemu plik indeksu zawiera listę plików binarnych dzienników zdarzeńaktualnie używanych przez serwer.

Binarny dziennik zdarzeń jest użyteczny w przypadku wystąpienia awarii i koniecznościprzywrócenia danych z plików kopii zapasowej, ponieważ wtedy pozwala na odtworzeniezmian wprowadzonych po utworzeniu ostatniej kopii zapasowej. W ten sposób bazy danychzostają przywrócone do stanu, w którym znajdowały się w chwili awarii. Binarny dziennikzdarzeń jest używany także po włączeniu replikacji. W takiej konfiguracji działa w charakterzeźródła uaktualnień, które muszą być przekazywane z serwera głównego do podległych.Więcej informacji na ten temat znajdziesz w rozdziale 14., zatytułowanym „Obsługabazy danych, kopie zapasowe i replikacja”.

Dobrym rozwiązaniem jest zagwarantowanie, że pliki dzienników zdarzeń pozostanąbezpieczne i nie są dostępne dla zwykłych użytkowników, ponieważ mogą zawierać tekstzapytań obejmujących informacje wrażliwe, takie jak hasła. Na przykład, przedstawionyponiżej wpis w dzienniku zdarzeń zawiera hasło dla użytkownika root. Bez wątpienia to jestinformacja, której lepiej nie udostępniać innym użytkownikom:

080412 16:47:24 44 Query SET PASSWORD FOR 'root'@'localhost'=PASSWORD('secret')

Pliki dzienników zdarzeń są przez serwer domyślnie zapisywane w katalogu danychMySQL. Dlatego też dobrym sposobem zabezpieczenia dzienników zdarzeń jest zabezpieczeniesamego katalogu danych, do którego dostęp powinien mieć jedynie użytkownik zajmujący sięadministracją instalacji MySQL. Szczegółowy opis procedury zabezpieczenia katalogudanych przedstawiono w punkcie 13.1.2, zatytułowanym „Zabezpieczenie instalacji MySQL”.

11.3. Przeniesienie zawarto�cikatalogu danych

We wcześniejszej części rozdziału omówiono strukturę katalogu danych MySQL w jegokonfiguracji domyślnej, czyli zawierającego wszystkie bazy danych, pliki dzienników zdarzeńoraz stanu. Jednak istnieje możliwość samodzielnego wskazania miejsca położenia zawartościkatalogu danych. Serwer MySQL pozwala na zmianę położenia całego katalogu danych lub

Poleć książkęKup książkę

Page 34: Tłumaczenie: Robert Górczyński

614 Rozdzia� 11. Katalog danych w MySQL

tylko jego wybranych elementów. Istnieje kilka powodów, dla których możesz zdecydować sięna tego typu rozwiązanie:

� System plików zawierający katalog danych został zapełniony i konieczne jestjego przeniesienie do systemu plików o większej pojemności.

� Jeżeli katalog danych znajduje się na intensywnie używanym dysku, jego przeniesieniena mniej używany pozwala na zrównoważenie aktywności dyskowej międzyposzczególnymi urządzeniami fizycznymi. Z tych samych powodów w różnychnapędach można umieścić pliki baz danych i dzienników zdarzeń lub rozproszyćbazy danych. Podobnie, systemowa przestrzeń tabel InnoDB pod względemkoncepcyjnym jest pojedynczym ogromnym blokiem pamięci masowej, ale jejposzczególne komponenty można umieścić w różnych napędach, poprawiająctym samym wydajność działania. Jeśli używane są tabele partycjonowane, takiesamo rozwiązanie można zastosować względem poszczególnych partycji tabeli.

� Umieszczenie baz danych na jednym dysku, a dzienników zdarzeń na innympomaga w minimalizacji uszkodzeń, które mogą powstać na skutek awariijednego dysku.

W pozostałej części podrozdziału dowiesz się, które elementy katalogu danych mogąbyć przeniesione oraz jak przeprowadzać tego rodzaju operacje.

11.3.1. Metody przenoszenia katalogu danychlub jego elementów

Mamy dwa sposoby pozwalające na przeniesienie katalogu danych lub znajdujących sięw nim elementów.

Pierwszy polega na tym, że na dowolnej platformie można zdefiniować opcjeodczytywane przez serwer w chwili jego uruchamiania. Wspomniane opcje można podaćw wierszu poleceń lub pliku opcji. Na przykład, aby wskazać położenie katalogu danych,należy uruchomić serwer wraz opcją --datadir=nazwa_katalogu w wierszu poleceń lubumieścić poniższe wiersze w pliku opcji:

[mysqld]datadir=nazwa_katalogu

Zazwyczaj grupa opcji dla serwera nosi nazwę [mysqld], jak pokazano w powyższymprzykładzie. Jednak w zależności od okoliczności odpowiednie mogą być inne nazwygrup opcji. Na przykład, jeśli uruchamiasz wiele serwerów za pomocą mysqld_multi,nazwy grup mają postać [mysqldn], gdzie n to liczba całkowita przypisana danemuegzemplarzowi serwera. W punkcie 12.2.3, zatytułowanym „Określanie opcji startowychserwera”, dokładnie przedstawiono, które grupy opcji mają zastosowanie do różnychmetod uruchamiania serwera, a także zaprezentowano informacje dotyczące uruchamianiawielu serwerów MySQL.

Poleć książkęKup książkę

Page 35: Tłumaczenie: Robert Górczyński

11.3. Przeniesienie zawarto�ci katalogu danych 615

Drugi sposób bazuje na fakcie, że w systemach UNIX można przenieść plik lub całykatalog, a następnie utworzyć dowiązanie symboliczne w położeniu początkowymprowadzące do nowego położenia.

Żadna z wymienionych metod nie jest uniwersalna i nie działa dla każdego elementu,którego położenie można zmienić. W tabeli 11.2 podsumowano możliwości w zakresieprzenoszenia katalogu danych lub jego elementów oraz metody możliwe do zastosowania.Jeśli używasz pliku opcji, to opcje możesz podać w globalnym pliku opcji, takim jak/etc/my.cnf w systemach UNIX i C:\my.ini w Windows.

Tabela 11.2. Podsumowanie dost�pnych metod przenoszenia katalogu danychlub jego elementów

Element do przeniesienia Akceptowalne metody przenoszenia

Cały katalog danych Opcje startowe lub dowiązanie symboliczne.

Poszczególne podkatalogi baz danych Dowiązanie symboliczne.

Poszczególne tabele bazy danych Dowiązanie symboliczne.

Pliki przestrzeni tabel InnoDB Opcje startowe.

Plik PID Opcje startowe.

Pliki dzienników zdarzeń Opcje startowe.

11.3.2. Przygotowania do operacji przeniesieniaPrzed podjęciem próby przeniesienia czegokolwiek z katalogu danych MySQL koniecznejest utworzenie jego kopii zapasowej, aby móc przywrócić wymieniony katalog, gdy operacjazakończy się niepowodzeniem. Ponadto, przed przeniesieniem należy zatrzymać serwerMySQL, a po przeprowadzeniu operacji ponownie go uruchomić. W przypadku pewnychrodzajów przeniesienia, na przykład katalogu bazy danych, czasami jest możliwe pozostawienieuruchomionego serwera, choć takie rozwiązanie nie jest zalecane. Jeśli się jednak zdecydujesz,to koniecznie upewnij się, że serwer nie uzyskuje dostępu do przenoszonej bazydanych. Przed przeniesieniem bazy danych powinieneś również wykonać zapytanieFLUSH TABLES, aby serwer zamknął wszystkie otwarte pliki tabel. Niewykonaniewymienionych zadań może doprowadzić do uszkodzenia tabel.

11.3.3. Uzyskanie dost�pu do wyniku przeniesieniaPrzed podjęciem próby przeniesienia czegokolwiek z katalogu danych MySQL upewnij się,że operacja przyniesie żądany efekt. Na przykład, w systemie UNIX można użyć poleceńdu, df i ls -l w celu sprawdzenia ilości dostępnego miejsca na dysku. Konieczne jest przytym prawidłowe zrozumienie układu systemu plików, aby wymienione polecenia byłyużyteczne.

Poleć książkęKup książkę

Page 36: Tłumaczenie: Robert Górczyński

616 Rozdzia� 11. Katalog danych w MySQL

Przedstawiony poniżej przykład pokazuje pułapkę, na którą trzeba uważać podczasprzenoszenia katalogu danych MySQL. Przyjmujemy założenie, że katalogiem danychjest /usr/local/mysql/data i chcemy go przenieść do katalogu /var/mysql, ponieważ wynikdziałania polecenia df pokazuje, że system plików /var ma większą ilość wolnej przestrzeni:

% df -k /usr /varFilesystem 1K-blocks Used Available Use% Mounted on/dev/sda5 28834716K 24078024K 3291968K 88% /usr/dev/sda6 28834716K 9175456K 18194536K 34% /var

Aby przekonać się, ile przestrzeni w systemie plików /usr zostanie zwolnione poprzeniesieniu katalogu danych, używamy polecenia du -s:

% du -s /usr/local/mysql/data3264308K /usr/local/mysql/data

Dane wyjściowe pokazują, że przeniesienie katalogu data z /usr do /var spowodujezwolnienie około 3 GB miejsca w systemie plików /usr. Czy na pewno? Aby się tegodowiedzieć, należy użyć polecenia df względem katalogu data. Załóżmy, że otrzymujemynastępujące dane wyjściowe:

% df -k /usr/local/mysql/dataFilesystem 1K-blocks Used Available Use% Mounted on/dev/sda6 28834716K 9175456K 18194536K 34% /var

To dziwne. Dlaczego narzędzie df zgłasza użycie miejsca w systemie plików /var?Odpowiedź na to pytanie dostarczają dane wyjściowe polecenia ls -l:

% ls -l /usr/local/mysql/datalrwxrwxr-x 1 mysql mysql 10 Dec 11 23:46 data -> /var/mysql

Powyższe dane wyjściowe pokazują, że katalog /usr/local/mysql/data jest dowiązaniemsymbolicznym do /var/mysql. Innymi słowy, katalog danych MySQL już znajduje sięw systemie plików /var i został zastąpiony przez dowiązanie symboliczne prowadzącedo /var. Tak więc przeniesienie katalogu danych do systemu plików /var nie spowodujezwolnienia miejsca w systemie /usr.

Jeżeli chcesz przenieść bazę danych do innego systemu plików w celu podjęcia próbyredystrybucji zajmowanej przez nią przestrzeni na dysku, musisz pamiętać o jednym:w przypadku używania tabel InnoDB przechowywanych w systemowej przestrzeni tabelzawartość tych tabel nie jest przechowywana w katalogu bazy danych. Gdy baza danychskłada się głównie z tabel InnoDB, zmiana położenia katalogu bazy danych powodujeprzeniesienie jedynie plików .frm tabel, a nie ich treści. To ma niewielki wpływ nazajmowane miejsce na dysku.

Z przedstawionych przykładów płynie następujący wniosek. Poświęcenie chwili nasprawdzenie efektu przeniesienia katalogu danych MySQL może zapobiec zmarnowaniuznacznie większej ilości czasu na kopiowanie plików tylko po to, aby się przekonać,że żądanego celu nie udało się osiągnąć.

Poleć książkęKup książkę

Page 37: Tłumaczenie: Robert Górczyński

11.3. Przeniesienie zawarto�ci katalogu danych 617

11.3.4. Przeniesienie ca�ego katalogu danychW celu przeniesienia całego katalogu danych należy zatrzymać serwer MySQL,a następnie przenieść katalog danych do nowego położenia. Po przeniesieniu trzebauruchomić serwer wraz z opcją --datadir, wyraźnie wskazującą nowe położenie.W systemach UNIX alternatywą dla użycia wymienionej opcji jest utworzenie w starympołożeniu katalogu danych dowiązania symbolicznego wskazującego nowe położenie.

11.3.5. Przeniesienie poszczególnych baz danychSerwer zawsze szuka podkatalogów baz danych w katalogu danych MySQL, a więc jedynymsposobem na przeniesienie bazy danych jest utworzenie dowiązania symbolicznego.Procedura różni się w systemach UNIX i Windows.

W systemie UNIX przeniesienie bazy danych trzeba przeprowadzić w następujący sposób:

1. Zatrzymanie serwera, jeśli działa.

2. Przeniesienie katalogu bazy danych do nowego położenia, czyli jego skopiowaniedo nowej lokalizacji i usunięcie w początkowej.

3. Utworzenie w katalogu danych MySQL dowiązania symbolicznego o nazwietakiej samej jak oryginalna baza danych i prowadzącego do nowej lokalizacji.

4. Ponowne uruchomienie serwera.

Poniższy przykład pokazuje, jak przenieść bazę danych bigdb z katalogu/usr/local/mysql/data do /var/db:

% mysqladmin -p -u root shutdownEnter password: ******% cd /usr/local/mysql/data% tar cf - bigdb | (cd /var/db; tar xf -)% rm -rf bigdb% ln -s /var/db/bigdb bigdb% mysqld_safe &

Powyższe polecenie trzeba wykonać po zalogowaniu się jako administrator MySQL.W systemie Windows procedura przeniesienia bazy danych jest nieco inna:

1. Zatrzymanie serwera, jeśli działa.

2. Przeniesienie katalogu bazy danych do nowego położenia, czyli jegoskopiowanie do nowej lokalizacji i usunięcie w początkowej.

3. Utworzenie w katalogu danych MySQL pliku działającego w charakterzedowiązania symbolicznego, które pozwala serwerowi MySQL na znalezienieprzeniesionego katalogu danych. Wspomniany plik powinien mieć rozszerzenie.sym i nazwę bazową odpowiadającą nazwie bazy danych. Na przykład,jeśli przenosisz bazę danych sampdb z katalogu C:\mysql\data\sampdb doE:\mysql-book\sampdb, utwórz plik o nazwie E:\mysql\data\sampdb.symi umieść w nim następujący wiersz:E:\mysql-book\sampdb\

Poleć książkęKup książkę

Page 38: Tłumaczenie: Robert Górczyński

618 Rozdzia� 11. Katalog danych w MySQL

4. Upewnij się o włączonej obsłudze dowiązania symbolicznego podczas ponownegouruchamiania serwera. Serwery Windows powinny domyślnie mieć włączonąwspomnianą obsługę dowiązań symbolicznych, ale możesz jeszcze użyć opcji--symbolic-links w wierszu poleceń lub umieścić poniższe wiersze w pliku opcji:[mysqld]symbolic-links

11.3.6. Przeniesienie poszczególnych tabelPrzeniesienie poszczególnych tabel jest możliwe jedynie w pewnych sytuacjach:

� Trzeba używać systemu UNIX, a przenoszona tabela musi być typu MyISAM.� System operacyjny musi mieć prawidłowo działające wywołanie realpath().

W takim przypadku wynikiem wykonania poniższego zapytania będziewartość YES:mysql> SHOW VARIABLES LIKE 'have_symlink';+---------------+-------+| Variable_name | Value |+---------------+-------+| have_symlink | YES |+---------------+-------+

Po spełnieniu obu wymienionych warunków można przenieść pliki .myd (dane)i .myi (indeksy) do nowego położenia, a następnie utworzyć do nich dowiązaniasymboliczne w katalogu danych MySQL, zachowując oryginalne nazwy plików danychi indeksów. (Plik .frm powinien pozostać w katalogu danych). Przed operacją należyzatrzymać serwer lub nałożyć blokadę na przenoszoną tabelę, aby uniemożliwićserwerowi jej używanie. Informacje na ten temat znajdziesz w podrozdziale 14.2,zatytułowanym „Obsługa bazy danych w działającym serwerze”.

11.3.7. Przeniesienie systemowej przestrzenitabel InnoDB

Początkowa konfiguracja systemowej przestrzeni tabel InnoDB odbywa się przezumieszczenie w pliku opcji położenia plików komponentów przestrzeni tabel za pomocązmiennych systemowych innodb_data_home_dir i innodb_data_file_path. (Więcej informacjina ten temat znajdziesz w podpunkcie 12.5.3.1, zatytułowanym „Konfiguracja przestrzenitabel InnoDB”). Jeżeli utworzyłeś już przestrzeń tabel, to istnieje możliwość przeniesieniatworzących ją zwykłych plików, na przykład w celu rozmieszczenia plików w różnychsystemach plików. Ponieważ położenie plików wskazują zmienne systemowe, przeniesieniekilku lub wszystkich z plików tworzących przestrzeń tabeli można przeprowadzićw następujący sposób:

1. Zatrzymanie serwera, jeśli działa.

2. Przeniesienie pliku lub plików przestrzeni tabel do lokalizacji docelowej.

Poleć książkęKup książkę

Page 39: Tłumaczenie: Robert Górczyński

11.3. Przeniesienie zawarto�ci katalogu danych 619

3. Uaktualnienie pliku opcji zawierającego konfigurację InnoDB w celuodzwierciedlenia nowego położenia przeniesionych plików.

4. Ponowne uruchomienie serwera.

11.3.8. Przeniesienie plików dzienników zdarze�i stanu

W celu przeniesienia pliku PID lub dziennika zdarzeń należy zatrzymać serwer, a następnieponownie go uruchomić wraz z odpowiednią opcją wskazującą nowe położenie pliku.Na przykład, jeśli plik PID zostanie utworzony jako /tmp/mysql.pid, wtedy w wierszupoleceń użyj opcji --pid_file=/tmp/mysql.pid lub umieść poniższe wiersze w pliku opcji:

[mysqld]pid_file=/tmp/mysql.pid

Jeżeli nazwa pliku zostanie podana w postaci bezwzględnej ścieżki dostępu,serwer utworzy plik, używając podanej ścieżki dostępu. Jeśli użyto względnej ścieżkidostępu, serwer utworzy plik w katalogu danych MySQL. Na przykład, podanie opcji--pid_file=mysqld.pid powoduje utworzenie pliku PID o nazwie mysqld.pid w katalogudanych MySQL.

Pewne systemy przechowują pliki PID w określonym katalogu, na przykład /var/run.W celu zachowania spójności w działającym serwerze plik PID MySQL możesz chciećumieścić w tym samym katalogu. Podobnie, jeśli system używa katalogu /var/log doprzechowywania plików dzienników zdarzeń, tam możesz umieścić też pliki dziennikówzdarzeń MySQL. Jednak wiele systemów pozwala na uzyskanie dostępu do wymienionychkatalogów tylko użytkownikowi root. Oznacza to konieczność uruchomienia serwerajako użytkownik root, co ze względów bezpieczeństwa nie jest dobrym pomysłem.Rozwiązaniem może być utworzenie podkatalogów /var/run/mysql i /var/log/mysqli ustawienie ich jako własności konta używanego do uruchamiania serwera. Na przykład,jeśli nazwa konta i użytkownika to mysql, wtedy jako użytkownik root należy wykonaćponiższe polecenia:

# mkdir /var/run/mysql# chown mysql /var/run/mysql# chgrp mysql /var/run/mysql# chmod u=rwx,go-rwx /var/run/mysql# mkdir /var/log/mysql# chown mysql /var/log/mysql# chgrp mysql /var/log/mysql# chmod u=rwx,go-rwx /var/log/mysql

W takim przypadku serwer nie będzie miał żadnych problemów z zapisywaniemplików w nowo utworzonych katalogach. Serwer możesz uruchomić wraz z opcjamiwskazującymi pliki w tych nowych katalogach, na przykład:

[mysqld]pid_file = /var/run/mysql/mysql.pidlog_error = /var/log/mysql/log.err

Poleć książkęKup książkę

Page 40: Tłumaczenie: Robert Górczyński

620 Rozdzia� 11. Katalog danych w MySQL

general_log = 1general_log_file = /var/log/mysql/queryloglog-bin = /var/log/mysql/binlog

Więcej informacji na temat opcji dotyczących plików dzienników zdarzeń orazsposobu ich używania znajdziesz w podrozdziale 12.8, zatytułowanym „Dziennikizdarzeń serwera”.

Poleć książkęKup książkę

Page 41: Tłumaczenie: Robert Górczyński

Skorowidz

AACID, 189administracja bazą danych, 591, 621adres IP, 763, 917algorytm wyświetlania, 412aliasy powłoki, 115alokacja uchwytu zapytania, 432analiza skryptów DBI, 447API, 359

C, 359, 360Perl DBI, 360PHP, 359, 362

aplikacje sieciowe, 510architektura klient-serwer, 45argument undef, 473atrybut

ASCII, 254AUTO_INCREMENT, 72, 214, 238,

272–277BINARY, 254NULL, 60, 264RaiseError, 488SIGNED, 237UNICODE, 254UNSIGNED, 237ZEROFILL, 237

atrybutypołączenia, 450, 451typu ciągu tekstowego, 251typu daty, 262typu liczbowego, 237

automatycznakonwersja typu, 337naprawa, 783, 784, 807

automatycznewłaściwości typu daty, 263zatwierdzanie, 576

Bbaza danych, DB, 42, 323

INFORMATION_SCHEMA, 164, 166sampdb, 523

bezpieczeństwo, 320, 386, 524, 715–774, 911serwera, 594systemu plików, 594transakcji, 160

bezpiecznepołączenia, 770środowisko wykonywania, 190

bibliotekainfo_tables.so, 652libmysqlclient, 538mysqlnd, 538

bieżące ustawienia, 133binarne kopie zapasowe, 786, 816blok try/catch, 544blokada globalna, 782blokowanie tabel, 353, 779–782błąd Access denies, 398błędy, 268, 377, 453, 478, 561błędy składni, 53, 401BMP, Basic Multilingual Plane, 130

Poleć książkęKup książkę

Page 42: Tłumaczenie: Robert Górczyński

1200 MySQL. Vademecum profesjonalisty

buforkluczy, 677zapytań, 680

Ccechy skryptu, 446Certificate Authority, CA, 771ciąg tekstowy, 217, 416, 878–891

binarny, 219, 221, 223niebinarny, 219, 223

CRC, Cyclic Redundancy Check, 874cyfry znaczące, 235cytowanie, 730

ciągów tekstowych, 467danych, 559

Ddane binarne, 405, 418data i godzina, 92, 892–907DBD, Database Driver, 361DBI, Database Interface, 361DDL, Data Definition Language, 192definicja

FOREIGN KEY, 74, 198kolumny, 230kolumny member_id, 61PRIMARY KEY, 74

definiowaniehaseł, 622uprawnień, 734widoków, 308

defragmentowanie tabel, 345dezaktywacja indeksów, 351dezinstalacja wtyczki, 653długość

identyfikatora, 127prefiksu, 330rekordów indeksu, 157

DNS, 730dodawanie rekordów, 75dokument HTML, 507dokumentacja Perl DBI, 445

dołączaniedo zmiennych, 474wyniku zapytania, 474

domyślne kodowanie znaków, 667dopasowywanie wzorca, 95, 285, 532, 865dostęp do

CGI.pm, 514danych, 357, 358, 600metadanych, 482MySQL, 537, 538odczytu i zapisu, 780plików, 778pliku nagłówkowego, 546pliku opcji, 383tabel, 353, 778

dostrajanieserwera, 668, 670silnika bazy danych, 673

dystrybucja sampdb, 548, 819działanie optymalizatora zapytań, 333, 334dziennik

błędów, 687, 688przekazywania, 692zapytań, 688, 689zdarzeń, 612, 686, 693, 701zdarzeń binarny, 690, 815zdarzeń serwera, 684

Eedycja

rekordu, 500wiersza danych, 116

efektywnewczytywanie danych, 349wykonywanie zapytań, 344

efektywność indeksu, 324elementy struktury my_option, 390

Fformat

rejestracji danych, 815RTF, 39, 489, 492

Poleć książkęKup książkę

Page 43: Tłumaczenie: Robert Górczyński

Skorowidz 1201

formaty DSN, 450formularze, 574, 588fsp, 831funkcja

AGAINST(), 207ASCII(), 296AVG(), 107CAST(), 251CHARSET(), 130check_response(), 581COLLATION(), 130CONVERT(), 222, 297COUNT(), 98COUNT(*), 207CURRENT_USER(), 321DATE_ADD(), 94, 296DATE_SUB(), 94DAYOFYEAR(), 109display_events(), 529display_scores(), 530display_table_contents(), 526display_table_names(), 525escape(), 517get_one_option(), 424htmlspecialchars(), 552insert_rows(), 432, 435LAST_INSERT_ID(), 279LENGTH(), 222li(), 526load_defaults(), 383, 386–389load_image(), 419main(), 375MIN(), 102MONTH(), 109my_print_help(), 394mysql_close(), 376, 379mysql_error(), 379mysql_fetch_row(), 402mysql_field_count(), 406mysql_field_seek(), 413mysql_free_result(), 402mysql_init(), 375mysql_library_end(), 376mysql_library_init(), 376mysql_more_results(), 427

mysql_real_connect(), 375mysql_real_escape_string(), 417mysql_sqlstate(), 379mysql_ssl_set(), 425mysql_stmt_init(), 432mysql_store_result(), 402, 406, 409–411mysql_use_result(), 409–411NOW(), 151password_field(), 585print_dashed(), 414print_error(), 380, 456process_call_result(), 443process_result_set(), 404, 412, 420, 444RAND(), 151referential integrity, 72sampdb_connect(), 545, 547, 551search_members(), 532, 533select_rows(), 437, 438TIMESTAMPDIFF(), 93TO_DAYS(), 94update_entry(), 589

funkcje, 869agregujące, 177, 907ciągu tekstowego, 878–91daty i godziny, 892–907liczbowe, 873nakładania blokad, 915podsumowań, 907porównań, 870przestrzenne, 920różne, 920rzutowania, 872składowane, 311, 314XML, 919zapewnienia bezpieczeństwa, 911związane z adresem IP, 917

GGA, General Availability, 27generowanie

danych wyjściowych, 514dokumentów HTML, 518katalogu, 488, 492listy, 491

Poleć książkęKup książkę

Page 44: Tłumaczenie: Robert Górczyński

1202 MySQL. Vademecum profesjonalisty

generowaniełącza, 530podsumowania, 97sekwencji, 278strony HTML, 515

globalizacja, 664globalne ustawienia, 125graficzny interfejs użytkownika, GUI, 45grupowanie, 221, 853

Hharmonogram, 352harmonogram zdarzeń, 318hasła, 622, 627, 745, 747hermetyzacja kodu, 545historia poleceń, 114HTML, 515

Iidentyfikatory, 126, 127implementacje SQL, 361indeks

typu BTREE, 157, 332typu FULLTEXT, 155, 205, 211, 534typu HASH, 155, 331typu PRIMARY KEY, 155typu SPATIAL, 155typu UNIQUE, 155

indeksowanie, 324, 327krótkich wartości, 329prefiksów, 330tabel, 153

indeksyklastrowanie, 330syntetyczne, 346unikalne, 154w silnikach, 154zwykłe, 154

informacjeo bazach danych, 164, 166o błędzie, 563o kolumnie, 414o strefie czasowej, 665z wielu tabel, 104, 183

inicjalizacjakatalogu danych, 825tabel systemowych, 827tabel uprawnień, 825

InnoDB, 27instalacja

MySQL, 822, 823PDO, 829Perl DBI, 828PHP, 829

integralność odwołań, 197, 198interaktywne wykonywanie zapytań, 420interfejs

dostępu, 537sieciowy, 703wtyczek, 651

izolacja transakcji, 194

Jjednoczesne

operacje zapisu, 353wykonywanie zapytań, 426

językC, 369–444Perl, 39Perl DBI, 445–536PHP, 537–89SQL, Patrz SQL

języki interpretowane, 366

Kkatalog

danych, 593, 597, 614, 825Ligi Historycznej, 488phpapi, 537ssl, 772ushl, 553

klauzulaCHANGE, 159CHARSET, 131CONSTRAINT, 198DEFAULT, 254, 262, 832DEFINER, 321

Poleć książkęKup książkę

Page 45: Tłumaczenie: Robert Górczyński

Skorowidz 1203

DO, 320ENGINE, 604FOREIGN KEY, 74, 198FROM, 81, 104, 168GROUP BY, 99HAVING, 101IDENTIFIED BY, 746, 747IDENTIFIED WITH, 751LEFT JOIN, 108LIKE, 132, 163, 285, 532LIMIT, 89, 101, 186, 527MODIFY, 159ON, 104, 106, 170ON DELETE, 199ON UPDATE, 199ON UPDATE CASCADE, 201ORDER BY, 87, 100, 174, 185PRIMARY KEY, 61REFERENCES, 199REQUIRE, 741, 742RETURNS, 312SET, 77USING, 187USING BTREE, 157USING(), 170WHERE, 82, 308WHERE FALSE, 485WITH ROLLUP, 102

klientMySQL, 52, 382, 389, 394, 592mysqladmin, 1154z obsługą SSL, 421

klucz zewnętrzny, 75, 197, 200kod

HTML, 515XHTML, 516

kodowanieUnicode, 130, 132, 134znaków, 130–132, 219, 222, 517znaków specjalnych, 416, 417

kolejnośćdołączania plików, 374operatorów, 287, 852sortowania, 131, 667

kolumnaAUTO_INCREMENT, 275–278GROUP BY, 106

kolumnyuprawnień, 758uwierzytelnienia, 759zarządzania, 760zasięgu, 762, 764, 766

komentarze, 1112kompilacja, 370

pliku, 421, 426serwerów, 705

kompilator gcc, 372komponenty MySQL, 592kompresja, 911komunikacja z serwerem, 46komunikat

błędu, 456, 667pomocy, 1116Using where, 341

konfiguracjaApache, 512bufora kluczy, 677haseł, 627mysqld, 630obsługi stref czasowych, 664połączeń, 770puli bufora InnoDB, 675serwerów, 705serwerów replikacji, 809silnika, 654, 656silnika wyszukiwania, 211struktury MYSQL_BIND, 435systemowej przestrzeni tabel, 657–661tablicy MYSQL_BIND, 436, 439zapytań preinterpretowanych, 431zmiennej PATH, 824

koniec zapytania, 52konstrukcja

AS, 91new PDO(), 543qq{}, 469switch, 585try/catch, 544

Poleć książkęKup książkę

Page 46: Tłumaczenie: Robert Górczyński

1204 MySQL. Vademecum profesjonalisty

konto, 623anonimowe, 625logowania, 823MySQL, 727początkowe, 624użytkownika, 725, 747w serwerze, 48

kontroladostępu, 594, 715, 746, 754, 761nad serwerem, 641współbieżności, 45

konwersjapodzapytań, 182tabeli, 160typu, 289, 294zapytania, 181

kopiazapasowa, 785, 790, 794, 808, 815zapasowa binarna, 793

kopiowanie baz danych, 796, 798koszt indeksowania, 327kradzież danych, 717kwalifikator, 171kwalifikatory identyfikatora, 127kwalifikowane odwołania, 170

Lliczba

sekwencji, 276zwracanych rekordów, 462

liczbowe typy danych, 228, 232, 234, 236liczby, 215, 873liczby całkowite, 234liczebność kolumny, 329linkowanie programów klienckich, 370lista

argumentów, 385przypisań, 77zdarzeń, 530

Łłącze do skryptu, 530

Mmakra przenośności, 374mapowanie zapytań, 604mechanizm cron, 784metadane

bazy danych, 161zbioru wynikowego, 411, 482

metodacol_prompt(), 503connect(), 450do(), 456, 479errorCode(), 562exec(), 554execute(), 471fetch(), 552, 555fetchall_arrayref(), 466fetchrow_array(), 452, 458, 463–465fetchrow_arrayref(), 460, 465fetchrow_hashref(), 461finish(), 452interpret_argument(), 497prepare(), 451, 471query(), 544, 555quote(), 471, 560rollback(), 487rtf_format_entry(), 508search_members(), 535

metody pobierania rekordu, 461miejsca zarezerwowane, 470moduł CGI.pm, 445, 513, 519moduły MySQL, 361modyfikator IF EXISTS, 152MySQL, 20–22MySQL jako usługa, 48MySQL Workbench, 45

Nnadawanie uprawnień, 732, 743nakładanie blokad, 354, 779, 780, 915naprawianie tabel, 798, 801narzędzia

bezpośredniego dostępu, 601MySQL, 592

Poleć książkęKup książkę

Page 47: Tłumaczenie: Robert Górczyński

Skorowidz 1205

narzędzie, Patrz programnasłuchiwanie połączeń, 639nawiasy

klamrowe, 469kwadratowe, 831, 1003

nawiązywanie połączenia, 113, 373, 521, 545,641, 741

nazwa komputera, 730nazwy, 128

baz danych, 605kont użytkowników, 728kolumn danych wyjściowych, 90

niepowtarzalne odczyty, 195niezatwierdzone odczyty, 195

Oobiekt PDO, 554obliczanie

szerokości kolumny, 413wartości, 90wyrażeń, 280

obsługabazy danych, 595, 775, 777błędów, 377, 453, 561dopełnień, 256kodowania znaków, 130, 219opcji hasła, 394preinterpretowanego zapytania, 441przyrostków, 491skryptów CGI, 512SSL, 421stref czasowych, 664Unicode, 133wartości nieprawidłowych, 267wyjątków, 548, 563

odbieranie uprawnień, 744odczyty widma, 195odsłona reklamy, hit, 42odwołania

do kolumn, 170do tabel, 127

ograniczeniadanych wejściowych, 269relacji, 72

systemu operacyjnego, 605wyników zapytania, 89zasobów, 743

ograniczniki zapytań, 310określanie opcji, 1117opcja, 1117

CLIENT_MULTI_STATEMENTS, 426host, 386register_globals, 567

opcjeanalizy tabel, 1166charakterystyczne dla serwera, 1124charakterystyczne dla użytkownika,

1124dzienników zdarzeń, 704formatu danych, 1193globalne, 1124mysql, 49mysql.server, 1150mysql_config, 1151naprawy tabel, 801, 1166narzędzia mysqlcheck, 802optymalizacji tabel, 1167replikacji, 1177sprawdzania tabel, 1166standardowe myisamchk, 1132standardowe mysql, 1139standardowe MySQL, 1119standardowe mysql_install_db, 1152standardowe mysql_upgrade, 1153standardowe mysqladmin, 1154standardowe mysqlbinlog, 1159standardowe mysqlcheck, 1163standardowe mysqld, 1168standardowe mysqld_multi, 1180standardowe mysqld_safe, 1182standardowe mysqldump, 791, 1184standardowe mysqlimport, 1194standardowe mysqlshow, 1197standardowe perror, 1198standardowe SSL, 1122startowe, 707startowe serwera, 637tabeli, 144zapytania CHECK TABLE, 802

Poleć książkęKup książkę

Page 48: Tłumaczenie: Robert Górczyński

1206 MySQL. Vademecum profesjonalisty

operacje na datach, 92operandy, 289operator, 852

ALL, 179ANY, 179COLLATE, 130, 132EXISTS, 179IN, 178LIKE, 95NOT EXISTS, 179NOT IN, 177NOT LIKE, 95REGEXP, 337SOME, 179

operatoryarytmetyczne, 84, 282, 854bitowe, 284, 292, 861dopasowania wzorca, 865grupowania, 853logiczne, 84, 283, 862porównania, 84, 176, 284, 856rzutowania, 864

opismodułu CGI.pm, 513Perl DBI, 447PHP, 539typów danych, 228, 831

opóźniony zapis kluczy, 351oprogramowanie, 819oprogramowanie MySQL, 47optymalizacja zapytań, 333, 334

indeksowanie, 324wczytywanie danych, 349wybór formatu tabeli, 347wybór typu danych, 344zapytanie EXPLAIN, 333, 338

optymalizacje sprzętowe, 682organizacja repozytorium, 42

Ppakiety, 821pakowanie danych, 346

parametrydanych wejściowych, 567połączenia, 382, 393, 475, 478, 545procedury składowanej, 315

partycjonowanie tabeli, 150PDO, PHP Data Objects, 538, 829Perl DBI, 39, 445–536pętla pobierania

DBI, 464rekordu, 458

PHP, 40plik, Patrz także skrypt

.my.cnf, 1128

.mysql_history, 118connect2.c, 395crontab, 630, 784dump_members.pl, 464exec_stmt_ssl.c, 422, 426fill_help_tables.sql, 828index.php, 539kopii zapasowej, 797Makefile, 372my_global.h, 374my_sys.h, 374mysql.h, 374opcji, 796php.ini, 546PID, 612prepared_call.c, 444sampdb.cnf, 522sampdb_pdo.php, 548show_opt.c, 388sslopt-case.h, 424sslopt-vars.h, 424

pliki.csm, 139.csv, 139.frm, 139, 603, 789, 796.ibd, 139, 796.idb, 139.my.cnf, 772.myd, 139.myi, 139.php, 538

Poleć książkęKup książkę

Page 49: Tłumaczenie: Robert Górczyński

Skorowidz 1207

.pl, 446

.sql, 54certyfikatu, 771, 773dziennika zdarzeń, 611, 695, 698, 796kopii zapasowej, 788mysql, 537mysqli, 538nagłówkowe, 371, 546opcji, 113, 383, 477, 1124–1128PDO, 538, 554startowe powłoki, 481systemowej przestrzeni tabel, 796wsadowe, 115

pobieraniedanych, 167, 566informacji, 80, 82, 183metadanych, 161–166parametrów połączenia, 382pojedynczego rekordu, 458, 462, 473rekordów, 556serwera MySQL, 820

podsumowanie, 97, 907podzapytania, 175, 182

kolumny, 175rekordu, 175skalarne, 175, 176skorelowane, 180tabeli, 175w klauzuli FROM, 181

podzapytanieALL, 178ANY, 178EXISTS, 179IN, 177NOT EXISTS, 179NOT IN, 177SOME, 178

pojedynczy rekord, 462pola formularza, 588polecenia

edycji wiersza danych, 116, 117programu mysql, 1145

poleceniechgrp, 826chown, 826

include, 548mysql, 48print, 478quit, 51require, 548use strict, 449use warnings, 449

połączenielocalhost, 729z serwerem, 49, 55, 373, 395, 425, 521,

543, 561, 770położenie katalogu danych, 598ponowne wykonywanie zapytań, 805porównywanie, 221, 856, 870

kolumn, 335wartości, 336

poziomDBD, 361DBI, 361

poziomy izolacji transakcji, 195, 196prefiks, 157, 330preinterpretowane zapytania, 440procedura składowana, 313procedury, 311, 314program

connect1, 373, 376connect2, 399make, 372metadata, 416my_print_defaults, 1128myisamchk, 211, 592, 601, 1130, 1136myisamchkmysql, 1137

opcje, 1139–1144polecenia, 1145zmienne, 1145znaki zachęty, 1138, 1148

mysql_config, 372, 1150mysql_upgrade, 1153mysqladmin, 592

opcje, 1154, 1155polecenia, 1156zmienne, 1155

mysqlbinlog, 803, 805, 807opcje, 1159–1162zmienne, 1162

Poleć książkęKup książkę

Page 50: Tłumaczenie: Robert Górczyński

1208 MySQL. Vademecum profesjonalisty

programmysqlcheck, 592, 801

opcje, 1163–1165mysqldump, 167, 592, 786–790, 1184

opcje, 1185opcje formatu danych, 1193zmienne, 1193

mysqlimport, 1194opcje, 1194, 1195opcje formatu danych, 1196

mysqlshow, 166, 1196perror, 1198show_argv, 393show_opt, 387

programowanie MySQL, 355programy składowane, 305, 309projekt

„Liga Historyczna USA”, 37 „Oceny uczniów”, 40, 564

protokółSSL, 370, 421, 741, 759, 770TCP/IP, 762

prywatność, 1128przeglądarka

bazy danych, 523tabel, 528

przenoszeniekatalogu danych, 614, 615, 617plików dziewnników, 619stanu, 619systemowej przestrzeni tabel, 618tabel, 618

przenośność, 367skryptu DBI, 361tabel, 788

przepisywanie podzapytań, 181, 182przeprowadzanie transakcji, 188, 486przestrzeń tabel InnoDB, 657–662przetwarzanie

argumentów, 387opcji, 395opcji polecenia, 377transakcyjne, 189, 486wyników zapytania, 554zapytań, 399, 407

przyrostki, 491przywracanie

bazy danych, 79, 803tabel, 804

punkty pośrednie transakcji, 194puzzle uprawnień, 767

Qquiz, 577

RRDBMS, 19, 33, 42reguły nadawania nazw, 128rejestracja zdarzeń, 692, 815rekord, 75relacja

klucza zewnętrznego, 199typu główny – podległy, 811

relacyjna baza danych, 42replikacja, 595, 809–815reprezentacja tabeli, 139rodzaje

indeksów, 154kont, 623

root, 624rotacja

plików dzienników zdarzeń, 695tabel dzienników zdarzeń, 701

RTF, Rich Text Format, 39, 489rzutowanie, 864, 872

Ssekwencje, 270, 276serwer

dodatkowy, 627główny, 810MySQL, 123, 592mysqld, 1167

opcje, 1168–1176opcje replikacji, 1177zmienne, 1180

Poleć książkęKup książkę

Page 51: Tłumaczenie: Robert Górczyński

Skorowidz 1209

podległy, 812, 815replikacji, 809WWW, 357

silnikInnoDB, 72, 140, 274, 348, 656, 796MEMORY, 141, 275, 348MyISAM, 140, 273NDB, 142

silnikibaz danych, 27, 137, 603, 655, 673domyślne, 656wyszukiwania, 211

skanowaniebinarne, 325liniowe, 325

składniakomentarzy, 1112SQL, 1003–1113

skryptcount_members.pl, 462db_browse.pl, 523–525dump_members.php, 552dump_members.pl, 451, 453, 550edit_member.php, 582, 583, 589edit_member.pl, 500, 501, 503, 504flip_flop.pl, 520gen_dir.pl, 490, 494, 510index.php, 565interests.pl, 506mysql.server, 632, 633, 1150mysql_install_db, 825, 1152mysqld_multi, 632, 708mysqld_safe, 632, 1181need_renewal.pl, 495pres_quiz.php, 577, 582renewal_notify.pl, 497, 500score_browse.pl, 528, 530score_entry.php, 564, 568, 574show_member.pl, 484, 499, 501tabular.pl, 484ushl_browse.pl, 532, 533ushl_ft_browse.pl, 535

skryptyCGI, 512DBI, 448

Perl, 446PHP, 538, 541powłoki, 115sieciowe, 445wiersza poleceń, 521

słowo kluczoweAS, 91BEGIN, 311DISTINCT, 97, 98END, 311GLOBAL, 125LOCAL, 79prompt, 1149SCHEMA, 134STRAIGHT_JOIN, 335TEMPORARY, 153UNION, 183UNSIGNED, 235

sortowanie, 131, 220, 250, 667sortowanie wyników zapytania, 87spacje, 53specyfikatory poziomu uprawnień, 738sprawdzanie, 572

konwersji typu, 294opcji, 1128operacji optymalizatora, 338optymalizatora, 340parametrów, 514tabel, 798, 800, 801wartości zwrotnej, 378wyników podzapytania, 175sprawdzenie wartości NULL, 558

SQL, Structured Query Language, 21, 33, 44,592, 1003–1113

SSL, Secure Sockets Layer, 370, 741stan MySQL, 611status GA, 27strefy czasowe, 664strona pobierająca dane, 550struktura

katalogu, 599, 609my_option, 390MYSQL_BIND, 439

superużytkownik, 748

Poleć książkęKup książkę

Page 52: Tłumaczenie: Robert Górczyński

1210 MySQL. Vademecum profesjonalisty

system plików, 603, 614, 716szerokość kolumny, 413szyfrowanie, 774

Śśledzenie, 480, 481

Ttabela, 603

absence, 75child, 203ENGINES, 138grade_event, 73member, 57parent, 203score, 73student, 71uprawnień, 825user, 761

tabeleCSV, 789INFORMATION_SCHEMA, 165InnoDB, 796MEMORY, 789nadrzędne, 198, 202nietransakcyjne, 268partycjonowane, 150potomne, 198, 200transakcyjne, 197, 268tymczasowe, 145uprawnień, 624, 754–765

tablica$score, 576atrybutów połączenia, 450hash, 450, 462MYSQL_BIND, 435, 439

tekst, 878–891transakcje, 188, 190, 192, 486tryb

boolowski, 208obsługi błędów, 562PIPES_AS_CONCAT, 283SQL serwera

ANSI, 125ANSI_QUOTES, 125, 126PIPES_AS_CONCAT, 125STRICT_ALL_TABLES, 124, 269STRICT_TRANS_TABLES, 124, 269TRADITIONAL, 124, 269

tryby pobierania rekordów, 556tworzenie

aplikacji, 364bazy danych, 54, 135binarnej kopii zapasowej, 793indeksów, 154klienta, 421konta logowania, 823kopii, 595kopii binarnej, 793, 794, 795kopii zapasowej, 785, 790, 795, 815programów, 372programów klienckich, 370programów MySQL

przy użyciu C, 369–444przy użyciu Perl DBI, 445–536przy użyciu PHP, 537–589

sekwencji, 277skryptu, 455stron, 518tabel, 55, 58, 64, 143warunkowe tabeli, 145wyrażeń, 281wyzwalaczy, 318zdarzenia, 320zmiennej, 97

typ danych, 213, 227, 831BINARY, 244BIT, 236, 837BLOB, 244CHAR, 242DATE, 59, 92, 259DATETIME, 259, 263ENUM, 71, 245, 845MYSQL_ROW, 403SET, 245, 247, 845TEXT, 244TIME, 259TIMESTAMP, 260, 263, 264

Poleć książkęKup książkę

Page 53: Tłumaczenie: Robert Górczyński

Skorowidz 1211

VARBINARY, 244VARCHAR, 59, 242, 347YEAR, 261

typyindeksów, 155operatorów, 282rzutowania, 150

typy danychciągi tekstowe, 219, 229, 303, 241, 838ciągi tekstowe binarne, 840ciągi tekstowe niebinarne, 842DBI, 447daty i godziny, 845liczbowe, 228, 232, 236, 833, 836wyliczeniowe, 71

Uuaktualnianie

MySQL, 712rekordów, 110, 186, 202

uchwyt połączenia, 406uchwyty, 447udostępnienie katalogu, 507układ tabeli, 65ukryte pola formularza, 582Unicode, 130, 132, 133uprawnienia, 726, 732–744, 748–750, 764,

767, Patrz także tabele uprawnień, puzzleuprawnień

administracyjne, 743funkcji składowanych, 314procedur, 314

uprawnienieEXECUTE, 320FILE, 748, 749TRIGGER, 318USAGE, 741

uruchamianieklientów, 712plików skryptów, 118serwera, 628, 707, 826

jako usługi Windows, 635nasłuchiwanie połączeń, 639opcje startowe, 637

w systemach UNIX, 631w systemach Windows, 634

wielu serwerów, 701, 710ustawianie zmiennych, 1123ustawianie zmiennych systemowych, 647, 648ustawienia

bieżące, 132językowe, 668

usuwaniebazy danych, 136błędów, 478, 480indeksu, 158konta użytkownika, 746rekordów, 110, 186tabel, 75, 152

UTC, Universal Coordinated Time, 260uwierzytelnianie użytkownika, 731, 751, 759użytkownik

proxy, 751root, 625, 629

używaniebufora zapytań, 680indeksów, 327metadanych, 411programów składowanych, 309widoków, 306

Wwartości

boolowskie, 227ciągu tekstowego, 217daty i godziny, 226, 230, 256, 265, 293domyślnych kolumn, 231dopasowane, 181liczbowe, 215niedopasowane, 182pól bitowych, 216przestrzenne, 226zmiennych systemowych, 646

wartośćarg_type, 392NULL, 86, 227, 466, 558var_type, 391zmiennej stanu, 649

Poleć książkęKup książkę

Page 54: Tłumaczenie: Robert Górczyński

1212 MySQL. Vademecum profesjonalisty

weryfikacja uprawnień, 764widoki, 305, 306, 604wielkość

liter, 128, 129tabeli, 607

wiersz poleceń, 166, 373, 387, 391własne aplikacje MySQL, 355właściwości

ACID, 189AUTO_INCREMENT, 270, 272

wprowadzanie wyników, 568współbieżność, 352wstawianie rekordu, 76wstawienie rekordów z pliku, 78wtyczka, 651

LOCKS, 652unix_auth, 752

wtyczki uwierzytelnienia, 751wybór

API, 363bazy danych, 134danych z widoku, 308domyślnego silnika, 656formatu tabeli, 347indeksów, 328silnika, 655systemu operacyjnego, 40typu ciągu tekstowego, 254typu danych, 297, 299, 344typu liczbowego, 239ustawień językowych, 668

wydajność, 365działania aplikacji, 365, 366serwera, 429systemu, 609

wyjątek PDOException, 562wykonywanie

wielu zapytań, 426zapytań, 51

wymuszanie konwersji typu, 294wyniki zapytania, 554wyrażenia, 280, 281wyrażenie MATCH, 207wystąpienia znaków cytowania, 467wysyłanie przypomnień, 495

wyszukiwanie, 531, 532, 534członków, 506pełnego tekstu, 204–208rozszerzone, 210w języku naturalnym, 208

wyświetlaniebieżących ustawień, 133danych binarnych, 405danych wejściowych, 584informacji, 582komunikatów błędów, 667komunikatu pomocy, 1116metadanych, 416ocen, 528struktury tabeli, 61tablicy argumentów, 385uprawnień, 744wyników, 568

wywoływanie programów MySQL, 1115wyzwalacze, 316, 604, 737wzorce, 95, 162, 285, 532, 763, 806, 865

XXHTML, 516XML, 919

Zzabezpieczanie

dostępu, 716instalacji, 622, 718plików opcji, 724pliku gniazda, 723

zakres wartości, 303zakresy typów liczbowych, 233zalety

architektury klient-serwer, 45indeksowania, 324prefiksów, 330

zamykanie serwera, 628zapytania, 51, 1003–1113

generujące zbiór wynikowy, 555modyfikujące rekordy, 401, 456, 554niezłożone, 1004

Poleć książkęKup książkę

Page 55: Tłumaczenie: Robert Górczyński

Skorowidz 1213

obsługi deklaracji, 1105obsługi kursora, 1107obsługi warunków, 1108ogólnego przeznaczenia, 405preinterpretowane, 428–432, 440, 470,

559typu DDL, 192złożone, 310, 1103zwracające dane, 402, 458

zapytanieALTER DATABASE, 130, 134, 136ALTER TABLE, 158, 273, 608ANALYZE TABLE, 343CALL, 440, 441, 442CHANGE MASTER, 812, 813CHARACTER SET, 254CHECK TABLE, 777, 800COMMIT, 192CREATE DATABASE, 54, 130, 602CREATE INDEX, 156CREATE TABLE, 58, 137CREATE TABLE ... LIKE, 147CREATE TABLE ... SELECT, 147CREATE TRIGGER, 316DELETE, 110, 112, 186DELIMETER, 310DESCRIBE, 62, 81, 162DROP, 136DROP DATABASE, 134, 602, 806DROP INDEX, 158, 351DROP TABLE, 152EXPLAIN, 333, 338, 340–343FLUSH, 782FLUSH PRIVILEGES, 627GRANT USAGE ON, 774INSERT, 76, 213, 350INSTALL PLUGIN, 653LOAD DATA, 76, 147, 349LOAD DATA LOCAL, 79LOCK TABLES, 353PROCEDURE ANALYSE(), 345PURGE BINARY LOGS, 814RENEAME USER, 727REPAIR TABLE, 777, 801REPLACE, 576

ROLLBACK, 190SAVEPOINT, 194SELECT, 80, 82, 167SET, 97SET PASSWORD, 627SHOW, 131, 161SHOW COLLATION, 220SHOW COLUMNS, 253SHOW DATABASES, 63, 602SHOW FULL COLUMNS, 62, 64SHOW SLAVE STATUS, 814SHOW STATUS, 649SHOW TABLES, 163, 164, 604START SLAVE, 814START TRANSACTION, 190STOP SLAVE, 814UNION, 168, 183, 184UNION DISTINCT, 185UNLOCK TABLES, 353UPDATE, 110, 112, 186, 278, 402, 487USE, 55

zarządzaniedziennikami zdarzeń, 693kontami, 725, 727

zasięg udzielanego dostępu, 757zastosowania MySQL, 35zatrzymanie serwera, 640zdarzenia, 318zdarzenie jednokrotne, 320złączenie, 108

CROSS JOIN, 170INNER JOIN, 70, 169, 172JOIN, 170LEFT JOIN, 171–173NATURAL LEFT JOIN, 173OUTER JOIN, 171RIGHT JOIN, 172

zmianabazy danych, 136hasła, 745nazwy tabeli, 161struktury tabeli, 158typu danych, 159właściciela, 826

Poleć książkęKup książkę

Page 56: Tłumaczenie: Robert Górczyński

1214 MySQL. Vademecum profesjonalisty

zmienna, 96, 1123error_count, 645event_scheduler, 319ft_min_word_len, 211innodb_buffer_pool_size, 645log_output, 693max_connections, 810myisam_recover_options, 351query_cache_type, 681sql_mode, 124, 645time_zone, 666

zmienna środowiskowaDBI_DSN, 475DBI_TRACE, 481PATH, 824

zmiennebufora kluczy, 678narzędzia myisamchk, 1136programu mysql, 1145silnika, 663stanu, 644, 650, 987–994

bufora zapytań, 998InnoDB, 994SSL, 999

systemowe, 223, 644–648, 927–972InnoDB, 972–87ogólnego przeznaczenia, 670

środowiskowe, 386, 1129w PHP, 544zdefiniowane przez użytkownika, 1000

znak!, 114%, 95, 337, 767_, 95apostrofu, 468cudzysłowu, 468gwiazdki, 81nowego wiersza, 78odwrotnego apostrofu, 230pionowej kreski, 1003plus, 209średnika, 52wielokropka, 1003zachęty, 53, 54, 1148

znakiBMP, 130cytowania, 467specjalne, 416, 467, 730sterujące, 1127w identyfikatorach, 126wieloznaczne, 62, 209, 286, 336, 769zachęty, 1138

Poleć książkęKup książkę

Page 58: Tłumaczenie: Robert Górczyński