<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=%2FKlientSerwerMySql</id>
	<title>/KlientSerwerMySql - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=%2FKlientSerwerMySql"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=/KlientSerwerMySql&amp;action=history"/>
	<updated>2026-04-17T11:49:07Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=/KlientSerwerMySql&amp;diff=2035&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot;= TI:WTBD/KlientSerwerMySql =  == System klient-serwer na przykładzie MySQL ==  Przykładem implementacji relacyjnego SBD opartego na SQL i na architekturze klient-...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=/KlientSerwerMySql&amp;diff=2035&amp;oldid=prev"/>
		<updated>2015-05-23T14:50:05Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;= &lt;a href=&quot;/edu/index.php/TI:WTBD&quot; title=&quot;TI:WTBD&quot;&gt;TI:WTBD&lt;/a&gt;/KlientSerwerMySql =  == System klient-serwer na przykładzie MySQL ==  Przykładem implementacji relacyjnego SBD opartego na SQL i na architekturze klient-...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= [[TI:WTBD]]/KlientSerwerMySql =&lt;br /&gt;
&lt;br /&gt;
== System klient-serwer na przykładzie MySQL ==&lt;br /&gt;
&lt;br /&gt;
Przykładem implementacji relacyjnego SBD opartego na SQL i na architekturze klient-serwer jest MySQL. Jego zalety to:&lt;br /&gt;
&lt;br /&gt;
* jest dostępny bezpłatnie&lt;br /&gt;
* niskie wymagania sprzętowe i administracyjne&lt;br /&gt;
* szeroko rozpowszechniony, bdb. poziom oryginalnej dokumentacji ([http://dev.mysql.com/doc/])&lt;br /&gt;
* długo rozwijane, dojrzałe oprogramowanie&lt;br /&gt;
* istnieje wiele książek, artykułów itd.&lt;br /&gt;
* interfejsy we wszystkich szerzej używanych językach programowania&lt;br /&gt;
&lt;br /&gt;
Ma też szereg wad:&lt;br /&gt;
&lt;br /&gt;
* niejasności co do przyszłego rozwoju&lt;br /&gt;
* odstępstwa od standardu SQL&lt;br /&gt;
* brak pełnej transakcyjności&lt;br /&gt;
&lt;br /&gt;
Zalety systemów klient-serwer ujawniają się zwłaszcza w sytuacjach:&lt;br /&gt;
&lt;br /&gt;
* gdy wymagany jest wysoki stopień wielodostępności&lt;br /&gt;
* konieczność centralizacji składowania danych&lt;br /&gt;
* wysokie wymogi bezpieczeństwa&lt;br /&gt;
* zróżnicowanie uprawnień dostępu&lt;br /&gt;
&lt;br /&gt;
Najczęstsze zastosowania MySQL - jako elementu backendu aplikacji webowych - zwykle wykorzystują jedynie część mocnych stron architektury klient-serwer. Np. złożony system uprawnień dostępu nie jest prawie nigdy wykorzystywany w takich zastosowaniach.&lt;br /&gt;
&lt;br /&gt;
=== Główne cechy MySQL ===&lt;br /&gt;
&lt;br /&gt;
* Danymi zarządza serwer (program ''mysqld''), do którego dostęp mogą mieć klienci zarówno za tej samej maszyny, jak i z maszyn zdalnych&lt;br /&gt;
** dostęp lokalny może być realizowany przez tzw. gniazda unixowe (wysoka wydajność)&lt;br /&gt;
** dostęp zdalny realizowany jest przez TCP/IP, domyślnie połączenia na port 3306. Standardowo połączenia ''nie'' są szyfrowane; z założenia powinny one odbywać się w ramach bezpiecznej sieci lokalnej, gdzie szyfrowanie stanowiłoby jedynie narzut ujemnie wpływający na wydajność. Istnieje jednak możliwość skonfigurowania połączeń SSL/TLS.&lt;br /&gt;
* Dane przechowywane są w plikach, w poddrzewie ''/var/lib/mysql'' (standardowo w większości dystrybucji). Tabele (i in. obiekty) zarządzane przez daną instancję serwera pogrupowane są w ''bazy danych'', którym odpowiadają podkatalogi w ''/var/lib/mysql''.&lt;br /&gt;
* poza wyjątkowymi sytuacjami nie należy bezpośrednio sięgać do tych plików (zwłaszcza w trakcie pracy serwera!); nie należy ich też wprost przenosić między instancjami serwera (mogą zależeć od wersji oprogramowania, lokalne konfiguracji, ...)&lt;br /&gt;
* dostępnych jest kilka ''typów tabel'', o nieco różnych własnościach i charakterystykach wydajnościowych -- np. transakcyjne i nietransakcyjne; typ tabeli można wybrać w momencie jej tworzenia.&lt;br /&gt;
* do eksploracji bazy czy czynności jednorazowych, wykonywanych poza aplikacją, jest narzędzie o nazwie ''mysql'' i własnościach podobnych do programu ''sqlite3'' (tylko lepsze). Są też bardziej wyspecjalizowane narzędzia np. ''mysqladmin'' -- do czynności administracyjnych np. tworzenie kont, ''mysqldump'' -- do zrzutów i transferu danych, ''mysqlcheck'' -- do sprawdzania poprawności i do optymalizacji tabel.&lt;br /&gt;
* istnieją też narzędzia typu GUI do zarządzania bazami, np. ''phpmyadmin''&lt;br /&gt;
* złożony system uprawnień pozwala definiować prawa dostępu na poziomie baz, tabel a nawet poszczególnych kolumn, różnicując prawa do różnych operacji. Uprawnienia są ustalane na podstawie zarówno konta (loginu), jak i ''adresu źródłowego połączenia''. Konta mysql są całkowicie niezależne od kont unixowych.&lt;br /&gt;
* dość zaawansowane możliwości replikacji danych pomiędzy wiele serwerów w układzie ''master-slave''&lt;br /&gt;
* w definicjach tabel, inaczej niż w ~SQLite (ale podobnie, jak w większości relacyjnych SBD), ''wymagane'' jest deklarowanie typów danych dla kolumn&lt;br /&gt;
* Python: standardem jest python-mysqldb, zgodne w szerokim zakresie z DBAPI v. 2. Istnieją też alternatywne implementacje: ''oursql'' (wygląda obiecująco; pomija wykorzystanie biblioteki klienckiej w C, implementując komunikację z serwerem w Pythonie); ''pymysql'' (słabo udokumentowane)&lt;br /&gt;
&lt;br /&gt;
=== dostępne typy tabel (backendy) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE tabela ( ... ) ENGINE = INNODB;&lt;br /&gt;
  ALTER TABLE tabela ENGINE = MYISAM;&lt;br /&gt;
&lt;br /&gt;
* standard: ~MyISAM&lt;br /&gt;
** największa szybkość operacji&lt;br /&gt;
** niskie wymagania co do przestrzeni dyskowej&lt;br /&gt;
** niskie wymagania pamięciowe dla operacji zmieniających dane&lt;br /&gt;
** brak obsługi transakcji (!)&lt;br /&gt;
** brak obsługi kluczy obcych (!)&lt;br /&gt;
* tabele transakcyjne: InnoDB&lt;br /&gt;
** od MySQL 4.0&lt;br /&gt;
** obsługuje deklaracje kluczy obcych:&lt;br /&gt;
&lt;br /&gt;
(w CREATE TABLE ...):&lt;br /&gt;
&lt;br /&gt;
         [CONSTRAINT SYMBOL] FOREIGN KEY [ID] (INDEX_COL_NAME, ...)&lt;br /&gt;
         REFERENCES TBL_NAME (INDEX_COL_NAME, ...)&lt;br /&gt;
         [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]&lt;br /&gt;
         [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]&lt;br /&gt;
&lt;br /&gt;
ew.&lt;br /&gt;
&lt;br /&gt;
        ALTER TABLE yourtablename&lt;br /&gt;
         ADD [CONSTRAINT SYMBOL] FOREIGN KEY [ID] (INDEX_COL_NAME, ...)&lt;br /&gt;
         REFERENCES TBL_NAME (INDEX_COL_NAME, ...)&lt;br /&gt;
         [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]&lt;br /&gt;
         [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]&lt;br /&gt;
&lt;br /&gt;
** obsługuje transakcje:&lt;br /&gt;
&lt;br /&gt;
    SET AUTOCOMMIT = 0;&lt;br /&gt;
    BEGIN;&lt;br /&gt;
    INSERT ...&lt;br /&gt;
    UPDATE ...&lt;br /&gt;
    DELETE ...&lt;br /&gt;
    COMMIT; (lub ROLLBACK)&lt;br /&gt;
&lt;br /&gt;
* tabele nie zapisywane na dysk (MEMORY)&lt;br /&gt;
&lt;br /&gt;
   CREATE TABLE tabela ( ... ) ENGINE = MEMORY;&lt;br /&gt;
&lt;br /&gt;
** dane trwają do restartu serwera (definicje pozostają)&lt;br /&gt;
** bardzo szybkie operacje&lt;br /&gt;
** nie dopuszczają kolumn typu BLOB ani TEXT&lt;br /&gt;
* tabele tymczasowe (TEMPORARY)&lt;br /&gt;
&lt;br /&gt;
   CREATE TEMPORARY TABLE tabela ( ... )  ENGINE = MEMORY;&lt;br /&gt;
&lt;br /&gt;
ENGINE może być również MyISAM i InnoDB&lt;br /&gt;
** widziane tylko w aktualnej sesji, niszczone przy jej zamknięciu;&lt;br /&gt;
** niewidoczne dla SHOW TABLES&lt;br /&gt;
** ograniczenie: tylko 1 referencja w zapytaniu (niemożliwe samozłączenie)&lt;br /&gt;
** NB. w SQLite też istnieje możliwość operowania na danych istniejących wyłącznie w pamięci procesu, ale na poziomie całej bazy danych a nie poszczególnych tabel&lt;br /&gt;
* tabele FEDERATED: dołączające dane z serwerów zdalnych (eksperymentalne)&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>