PostgreSQLMySQL
A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(→Összehasonlítás) |
(→'''PostgreSQL''') |
||
9. sor: | 9. sor: | ||
*Természetesen jelentős szolgáltatás-növelés történt azóta |
*Természetesen jelentős szolgáltatás-növelés történt azóta |
||
*Kliens-szerver architektúrájú (a szerver program neve postmaster) |
*Kliens-szerver architektúrájú (a szerver program neve postmaster) |
||
− | *UNIX-alapú rendszereken fut csak, ezért Windowson csak is Cygwin vagy MinGW telepítése után használható (mármint a szerverprogram) |
+ | *Jó ideig UNIX-alapú rendszereken futott csak, ezért Windowson csak Cygwin vagy MinGW telepítése után volt használható (mármint a szerverprogram) - mamár van natív Windowsos változata is. |
===Telepítés=== |
===Telepítés=== |
A lap 2007. december 11., 00:44-kori változata
Tartalomjegyzék
|
1 PostgreSQL és MySQL összehasonlítása adminisztrátor szemszögéből
Először külön áttekintem a két DBMS-t, majd a végén térek rá a különbségekre.
1.1 PostgreSQL
- Többfelhasználós ORDBMS (Objektum-relációs adatbázis-kezelő rendszer - relációs sémákkal dolgozik, azonban a sémákban tárolt adatok úgy tűnnek a külső felhasználó számára, mintha objektumok lennének, ezen kívül a sémák között objektum-orientáltságra emlékeztető kapcsolatok vannak, így lehet pl. örököltetni)
- Berkeley Egyetemen kifejlesztett POSTGRES objektum-relációs adatbáziskezelő rendszer nyílt forrású bővítése
- Természetesen jelentős szolgáltatás-növelés történt azóta
- Kliens-szerver architektúrájú (a szerver program neve postmaster)
- Jó ideig UNIX-alapú rendszereken futott csak, ezért Windowson csak Cygwin vagy MinGW telepítése után volt használható (mármint a szerverprogram) - mamár van natív Windowsos változata is.
1.1.1 Telepítés
- RedHat esetén rpm csomagból. Le kell tölteni az összes szükséges csomagot, majd futtatni kell a következő parancsot:
- rpm -ivh postgresql-*
- Néhány főbb csomag, amikre szükség lehet:
- postgresql : alapcsomagok
- postgresql-contrib : kiegészítő csomagok
- postgresql-devel : alkalmazások fejlesztéséhez és fordításához. A kiszolgáló telepítéséhez feltétlenül szükséges
- postgresql-jdbc : Java DataBase Connectivity-t lehetővé tevő csomag
- postgresql-libs : megosztott programkönyvtárak
- postgresql-odbc : Open DataBase Connectivity, API amit nagyon sok eszköz támogat
- postgresql-perl : Perlben lehessen kiegészítőket írni
- postgresql-python : ugyanez Pythonban
- postgresql-server : akkor kell, ha nem csak távoli hosthoz kapcsolódunk, hanem helyileg is működtetünk szervert
- Debian-alapú rendszer esetén mindössze egy parancs a telepítés:
apt-get install postgresql
- Természetesen forrásból is telepíthető a szokásos ./configure, make, make install hármassal. A forrás letölthető a http://www.postgresql.org oldalról
- A szerver elindítása /etc/init.d/postgresql start paranccsal történik. Előfordulhat, hogy a postgresql szó után kötőjelet, majd a verziószámot meg kell adni.
1.1.2 Adminisztratív feladatok ellátása
1.1.2.1 Adatbázis-klaszter létrehozása
- Először létre kell hozni új adatbázis-klasztert
- Egy PostgreSQL adatbázis-klaszter adatbázisok gyűjteménye, amelyekért ugyanazon szerver folyamat felel
- initdb program segítségével tehetjük meg
- A program a következő műveleteket hajtja végre:
- Könyvtárak létrehozása, amelyekben az adatbázisok tárolásra kerülnek majd
- Közös katalógus táblák generálása (ezek a teljes klaszterhez tartoznak)
- template1 és postgres adatbázisok létrehozása
- template1 sablon adatbázis, amelynek objektumai automatikusan belekerülnek minden később, újonnan létrehozott adatbázisba. Ilyen módon állíthatunk be telepítés-specifikus beállításokat, alapvető táblákat, felhasználókat stb. amelyek/akik minden adatbázis részei.
- postgres az alapértelmezett adatbázis mindenki számára
- Az initdb programot annak a felhasználónak kell lefuttatnia, akié a szerver folyamat is (mivel a szerver folyamat hozzá kell hogy férjen a létrehozott könyvtárakhoz). Ez nem egyezik meg az operációs rendszer rootjával, alapértelmezés szerint egy postgres nevű felhasználó, amely a PostgreSQL telepítésekor jön létre
- initdb néhány fontosabb kapcsolója:
- -A, --auth : milyen azonosítása legyen a rendszer (helyi és távoli) felhasználóinak (pg_hba.conf fájlban kerül tárolásra, ahol hba = host-based authentication - a pg_hba.conf fájl tartalmát lásd később). Lehetséges értékei:
- trust : nincs szükség autentikációra, megbízunk a host felhasználóiban, bárki, aki a szerverhez csatlakozni képes, beléphet. Ilyenkor olyan felhasználónevet ad meg az illető, amilyet szeretne. Természetesen ettől még érvényesek a beállított korlátozások, tehát ha Gipsz Jakab nem a superuser felhasználónevét adja meg, hanem egy mezei felhasználónevet, akkor nem lesznek kitüntetett jogosultságai.
- md5 : hashelve tároljuk a jelszavakat
- crypt : titkosított
- password : plain-text jelszó, távoli eléréshez ilyet ne használjunk
- lehet ident-alapú is, ami azt jelenti hogy az operációs rendszer részeként kapott ident szervert használja fel a szerver adabázis-felhasználók és operációs-rendszer felhasználók párosításához (ez azonban legtöbbször nem biztonságos, feltételezi hogy a kliens gép nem kompromittált, az RFC-ben is azt írják hogy ne használjuk)
- PAM (pluggable authentication module)
- lehet kerberos-szal is, de ilyenkor már telepítéskor meg kell adnunk a kerberos-szerver nevét
- -D, --pgdata : melyik könyvtárban tároljuk az adatbázis-klasztert. Megadása kötelező
- -U, --username: mi legyen a superuser neve. Alapesetben a szerverfolyamat tulajdonosának neve, postgres. Meg is változhatható, kényelmi szempontból
- -W, --pwprompt: az initdb jelszót is bekér a superuser accounthoz
- -A, --auth : milyen azonosítása legyen a rendszer (helyi és távoli) felhasználóinak (pg_hba.conf fájlban kerül tárolásra, ahol hba = host-based authentication - a pg_hba.conf fájl tartalmát lásd később). Lehetséges értékei:
- Hogy jobban átlássuk az authentikálást, vegyük szemügyre a pg_hba.conf fájl 7 lehetséges rekordtípusát:
local database user auth-method [auth-option] host database user CIDR-address auth-method [auth-option] hostssl database user CIDR-address auth-method [auth-option] hostnossl database user CIDR-address auth-method [auth-option] host database user IP-address IP-mask auth-method [auth-option] hostssl database user IP-address IP-mask auth-method [auth-option] hostnossl database user IP-address IP-mask auth-method [auth-option]
- A mezők jelentése:
- local: UNIX-domain socketeken keresztül lehet csatlakozni
- host: TCP/IP kapcsolatok, akár SSL-lel, akár nélküle
- hostssl: TCP/IP SSL-lel
- hostnossl: TCP/IP SSL nélkül
- database: egy vagy több adatbázis neve (vesszőkkel elválasztva), vagy:
- all: minden adatbázisra illeszkedik
- sameuser: az adatbázis neve ugyanaz, mint a felhasználó neve
- samerole: a felhasználó olyan szerepcsoportba kell hogy tartozzon, ami megegyezik az adatbázis nevével
- user: egy vagy több felhasználó neve (vesszőkkel elválasztva), vagy:
- all: minden felhasználó
- +-szal kezdődő név: szerep neve, amelybe több felhasználó is tartozik
- CIDR-address: CIDR-tartományra illeszkedik. Pl. 172.20.143.89/32 egyetlen host esetén, vagy 172.20.143.89/24 tartomány esetén.
- IP-address, IP-mask: CIDR-address helyett, csak itt külön oszlopban kell megadni a maszkot
- auth-method: fentebb ismertetett módszerek
- auth-option: autentikációs módszerenként változó.
- Példa:
# Allow any user on the local system to connect to any database under # any database user name using Unix-domain sockets (the default for local # connections). # # TYPE DATABASE USER CIDR-ADDRESS METHOD local all all trust # The same using local loopback TCP/IP connections. # # TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 127.0.0.1/32 trust # The same as the last line but using a separate netmask column # # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host all all 127.0.0.1 255.255.255.255 trust # Allow any user from any host with IP address 192.168.93.x to connect # to database "postgres" as the same user name that ident reports for # the connection (typically the Unix user name). # # TYPE DATABASE USER CIDR-ADDRESS METHOD host postgres all 192.168.93.0/24 ident sameuser # Allow a user from host 192.168.12.10 to connect to database # "postgres" if the user's password is correctly supplied. # # TYPE DATABASE USER CIDR-ADDRESS METHOD host postgres all 192.168.12.10/32 md5 # In the absence of preceding "host" lines, these two lines will # reject all connection from 192.168.54.1 (since that entry will be # matched first), but allow Kerberos 5 connections from anywhere else # on the Internet. The zero mask means that no bits of the host IP # address are considered so it matches any host. # # TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 192.168.54.1/32 reject host all all 0.0.0.0/0 krb5 # Allow users from 192.168.x.x hosts to connect to any database, if # they pass the ident check. If, for example, ident says the user is # "bryanh" and he requests to connect as PostgreSQL user "guest1", the # connection is allowed if there is an entry in pg_ident.conf for map # "omicron" that says "bryanh" is allowed to connect as "guest1". # # TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 192.168.0.0/16 ident omicron # If these are the only three lines for local connections, they will # allow local users to connect only to their own databases (databases # with the same name as their database user name) except for administrators # and members of role "support", who may connect to all databases. The file # $PGDATA/admins contains a list of names of administrators. Passwords # are required in all cases. # # TYPE DATABASE USER CIDR-ADDRESS METHOD local sameuser all md5 local all @admins md5 local all +support md5 # The last two lines above can be combined into a single line: local all @admins,+support md5 # The database column can also use lists and file names: local db1,db2,@demodbs all md5
1.1.2.2 Felhasználók, adatbázisok létrehozása
- Kezdetben egyetlen felhasználó létezik, melynek neve postgres.
- A rendszergazda beléphet az 'su postgres' paranccsal (Ubuntu esetén 'sudo su postgres')
- Felhasználó létrehozása a 'createuser <username>' paranccsal. Néhány kapcsoló:
- -s, --superuser: a felhasználó superuser lesz
- -d, --createdb: a felhasználó hozhat majd létre adatbázisokat
- -D, --nocreatedb
- -r, --createrole: a felhasználó hozhat majd létre szerepeket (tehát felhasználókat vagy csoportokat)
- -R, --nocreaterole
- -c, --connection-limit: egyszerre hány kapcsolatot létesíthet a felhasználó
- -P: a parancs kiadása után meg kell adni jelszót
- -E: a jelszót titkosítva tárolja a szerver
- -N: jelszó ne legyen titkosítva
- Felhasználó törlése 'dropuser <username>' paranccsal
- Adatbázis létrehozása 'createdb <adatbazisnev>' paranccsal. Néhány kapcsoló:
- -D, --tablespace: tablespace megadása. A tablespace egy könyvtár a file rendszeren, ahová a tablespace-hez tartozó táblák eltárolásra kerülnek. A tablespace-nek van neve, amivel hivatkozni lehet rá (hasznos lehet pl., ha több különböző sebességű lemezünk van)
- -O, --owner: melyik felhasználó lesz az adatbázis tulajdonosa
- -T, --template: sablon adatbázis, amely alapján az új adatbázis felépül. Kezdetben két sablon van:
- template1: ez az alapértelmezett sablon, ha nem adjuk meg a -T kapcsolót, akkor ezt az adatbázist másolja át az új helyére is. Ilyen módon állíthatunk be telepítés-specifikus beállításokat, alapvető táblákat, felhasználókat stb. amelyek/akik minden adatbázis részei.
- template0: csupasz sablon, ezt az adatbázist soha ne módosítsuk az initdb lefuttatása után (hasznos lesz pl., ha pg_dump segítségével építünk fel újra régebbi adatbázist)
- -h, --host: melyik hoston fut a szerver. Ha /-jellel kezdődik, akkor Unix-domain socketet adunk meg
- -p, --port: melyik porton figyel a szerver
- -U, --username: melyik felhasználóként csatlakozzon alapértelmezés szerint
- -W, --password: kötelező legyen jelszó megadása
- Adatbázis törlése 'dropdb <adatbazisnev>' paranccsal
- Adatbázisba belépni a 'psql <adatbazisnev>' paranccsal lehet
- Ha nem adjuk meg az adatbazis nevét, akkor a felhasználó alapértelmezett adatbázisába lép be. Ha ilyen nem létezik, hiba. (Itt felhasználó alatt az operációs rendszer felhasználóját értjük.)
- Ha más felhasználó adatbázisába szeretnénk belépni, mint amelyik be van jelentkezve az operációs rendszerbe (pl. mert más a felhasználónevünk a kettőben - nem kell egyezniük, semmi közük egymáshoz), akkor az -U kapcsolót használhatjuk.
- A felsorolt programocskák (createuser, dropuser, createdb, dropdb) frontendet jelentenek bizonyos PostreSQL-utasításokhoz. Ugyanezek a műveletek elvégezhetőek tehát PostgreSQL parancssornál is, CREATE ROLE, DROP ROLE, CREATE DATABASE, illetve DROP DATABASE utasításokkal.
- Felhasználók tekintetében ROLE-okról beszél a PostgreSQL. Egy ROLE egy szerepkör, ami jogosultságokat tartalmaz, és vagy egyetelen felhasználóhoz, vagy pedig felhasználók egy csoportjához van társítva
1.1.2.3 Szerver paramétereinek beállítása
- Ami egy-egy adatbázis-klaszter paramétereit illeti, megadhatóak az initdb program futtatásakor
- Ami a szerverre vonatkozó egyéb paramétereket illeti, megadhatjuk őket:
- Konfigurációs fájlokban
- PostgreSQL-utasításként, SET parancs segítségével
- Konfigurációs fájlok:
- Adatkönyvtárba (data directory) helyezkednek el, amit az initdb program hozott létre
- config_file: alap konfigurációs fájl
- hba_file: host-based authentication, hozzáféréseket írja le
- ident_file: az operációs rendszer felhasználóihoz társít adatbázis-felhasználókat
- external_pid_file: szerver-adminisztrációs programok számára külső pid-file. Tudjuk, hogy mennyire megbízhatóak versenyhelyzetek tekintetében....
- Néhány fontosabb környezeti változó:
- listen_addresses : mely TCP/IP címekről érkezhet kérés
- port : melyik porton figyeljen a szerver
- max_connections : alapértelmezés szerint 100
- authentication-timeout: befejezetlen azonosítási protkollok terminálása
- ssl: lehet-e ssl-ezni
- password-encryption: új jelszavak létrehozásánál a jelszavak tiktosítottak legyenek-e
- shared_buffers: hány darab osztott memóriát alkalmazzon a szerver folyamat. Alapértelmezett memóriaméret 8192 byte, de ez telepítéskor változtatható (BLCKSZ opció)
- temp_buffers: egy adatbázis kapcsolat hány ideiglenes puffert hozhat létre
- max_fsm_pages: fsm = free-space-map, térkép arról, hol vannak szabad helyek az adatbázisban
1.1.2.4 Karbantartás
1.1.2.4.1 Monitorozás
Kétféle módszer:
- Standard UNIX-eszközökkel
ps auxww | grep ^postgres
- PostgreSQL statisztika-gyűjtőjével
- Külön programocska, amely képes:
- összeszámlálni a táblákhoz való hozzáférések számát (lemez-blokkok, illetve sorok tekintetében is), illetve
- figyelni, hogy a szerverfolyamatok éppen milyen utasításokat hajtanak végre
- statisztikák gyűjtésének bekapcsolásához a postgresql.conf fájlban állítsuk be a stats_start_collector paraméter értékét true-ra
- futás közben ez már nem változtatható (tehát pl. SET paranccsal nem fog menni)
- további paraméterek segítségével beállítható, hogy milyen jellegű információkat adjon át a szerverfolyamat a statisztikagyűjtőnek:
- stats_command_string
- stats_block_level
- stats_row_level
- Ezek értékei a postgresql.conf fájlban minden, a klaszterben futó szerverfolyamatra érvényesek, azonban külön szerverfolyamatonként is beállítható SET paranccsal (ezt azonban csak a superuser teheti meg)
- Alapértelmezett értékük false
- Sokféle információ kilistázható az egyes folyamatokról, pl:
SELECT pg_stat_get_backend_pid(s.backendid) AS procpid, pg_stat_get_backend_activity(s.backendid) AS current_query FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
- Kilistázza az összes aktuálisan futó szerverfolyamat pidjét és a folyamatok által futtatott aktuális parancsokat
- pg_locks rendszertáblázatból kiolvasható, hogy éppen hány zár van, és mely táblákon az éppen futó session-ben
1.1.2.4.2 Write-ahead logolás
Néhány, a logolást befolyásoló környezeti változó:
- fsync: bool érték, amely megmondja, Hasznos, de költséges (minden db művelet után flush a lemezre). Több módszer is használható a kiírásra, amelyeket a wal_sync_method paraméterrel állíthatunk be:
- open_datasync – az open() opciója 0_DSYNC, ilyenkor csak a “rendes” adatok kerülnek szinkronizált átvitelre, a metaadatok nem
- fdatasync – fdatasync() meghívása minden egyes kommittálás esetén, csak adatot mentünk, metaadatot nem
- fsync – fsync() meghívása minden egyes kommittálás esetén, minden adatot mentünk
- fsync_writethrough – ugyanolyan mint az fsync, csak a cache-elt adatok írásakor azonnal az eredeti példányt is frissíti
- open_sync – az open() opciója 0_SYNC, a metaadatok is szinkronizált átvitelre kerülnek
- commit_delay: microszekundumokban, hogy egy commit után legkésőbb mikor kell kiírni diszkre az adatokat
- checkpoint_segments: hány megabyte adat gyűljön össze két checkpoint között
- checkpoint_timeout: mennyi idő után kell újabb checkpoint
- archive_command: parancs, amelyet lefuttat a DBMS amikor teleírta az összes lehetséges log file-t. Rendelkezésre áll az %f és %p változó, amelyek az aktuálisan kiírandó fájl nevét illetve elérési útját tartalmazzák. Példa:
archive_command = 'cp %p /mnt/server/archivedir/”%f”'
1.1.2.4.3 Vacuuming (porszívózás)
- A VACUUM parancsot időről időre célszerű lefuttatni a következő okok miatt:
- Frissített vagy törölt sorok által elfoglalt lemezterület felszabadítása (pl. törölt sorokat nem törlünk fizikailag is azonnal, mert egy másik tranzakció még függhet tőle)
- Adatstatisztikák frissítése, amelyeket pl. a Query Planner használ (az ANALYZE parancs segítségével külön összegyűjthetőek ezek az adatok)
- Nagyon régi adatokat ne veszítsünk el (különben ha az ún. transaction id wraparound bekövetkezik, ez megtörténhet – transaction id wraparound azt jelenti, hogy túlcsordulás történt a tranzakciók számlálójában, és egy új tranzakció ugyanazt az azonosítót kapja, mint egy régebbi)
- Kétféle VACUUM parancs létezik:
- Sima VACUUM – más néven “lusta” vacuum – paranccsal csak megjelöljük a törlendő helyeket, de azok az operációs rendszer számára nem szabadulnak fel.
- VACUUM FULL parancs segítségével az operációs rendszer visszakapja a lemezterületet, azonban ilyenkor kizárólagos zárral kell rendelkezni a fájl felett.
- A PostgreSQL 8.1-es verziója óta létezik külön daemon folyamat, amely elvégzi az időszakos porszívózást (autovacuum opció, bool értékkel, a konfigurációs fájlban).
1.1.2.4.4 Arhiválás és visszaállítás
Alapvetően 3 backup technika létezik:
SQL dump – ilyenkor olyan fájlt tárolunk, amely végrehajtható SQL-utasításokat tartalmaz, amelyeket végrehajtva visszakapjuk az adatbázist
- pg_dump program, amely konzisztens és a másolás közbeni írásokat nem veszi figyelembe a másoláskor:
pg_dump dbnev > outfile
- pg_dump utáni restore:
psql dbnev < infile
- pipe-okkal is használhatóak, ezért közvetlenül új szerverre is átpakolható az adatbázis:
pg_dump -h host1 dbnev | psql -h host2 dbnev
- Ha teljes adatbázis-klasztert szeretnénk backupolni:
pg_dumpall > outfile psql -f infile postgres
- postgres itt egy adatbazisnev, amellyel elkezdi a visszaállítást; bármilyen létező adatbázis nevét meg lehet adni, de postgres-t szokás, főleg amikor teljesen üres adatbázist töltünk fel
Fájlrendszer-szintű backup
tar -cf backup.tar /usr/local/data
- Ilyenkor azonban ideiglenesen le kell állítni az adatbázist
On-line backup
- Alapötlet: write-ahead-logok folyamatosan eltárolásra kerülnek az adatkönyvtárban (data directory, amelyet az initdb segítségével lehet beállítani). Ezek felhasználhatóak a legfrissebb változások újra-lejátszására, még akkor is, ha nem áll rendelkezésre teljesen konzisztens backup file az adatbázisról. Tehát a két módszert kombinálja.
1.2 MySQL
- Szintén többfelhasználós, de csak RDBMS, objektumok nincsenek benne
- Szintén kliens-szerver architektúrájú (a szerverfolyamat neve mysqld)
- Több operációs rendszert támogat, de ez nem jelent semmit, mert PostgreSQL-t is használhatunk Windowson ha van Cygwin vagy MinGW
1.2.1 Telepítés
- RedHat esetén rpm csomagkezelővel. Le kell tölteni az összes szükséges csomagot, majd le kell futtatni az 'rpm -ivh mysql-*' parancsot. A következő programcsomagokra lesz szükség:
- mysql – alapprogramok
- mysql-devel – alkalmazások fejlesztéséhez és fordításához. A kiszolgáló telepítéséhez feltétlenül szükséges.
- mysql-server – amennyiben lokális hoston szeretnénk futtatni, és nem távoli szerverhez kapcsolódunk.
- Debian alapú rendszer esetén mindössze egyetlen parancsot kell kiadnunk:
- apt-get install mysql-common mysql-server mysql-client
- Végül lehet forrásból telepíteni a szokások ./configure – make – make install parancsokkal. Erről bővebb információ a http://www.mysql.com címen olvasható.
- A rendszer indítása a 'mysql -u <felhasznalo> <adatbazis>' paranccsal történik.
- Ha jelszót is meg szeretnénk adni, akkor a parancs végéhez még hozzá kell fűznünk a -p kapcsolót
- Kezdetben egyetlen adatbázis létezik, melynek neve 'mysql', és a 'root' felhasználó (semmi köze az operációs rendszer rootjához) jelszó nélkül kapcsolódhat:
mysql -u root mysql
- Hasonló SQL-értelmező parancssort kapunk, mint PostgreSQL esetében a psql parancs futtatásakor
1.2.2 Adminisztratív feladatok ellátása
- Különböző szerver-oldali programok léteznek, amelyek segítségével elvégezhetőek az adminisztratív teendők. Ezek közül hármat emelek ki, egyelőre csak felsorolás szintjén, később lesz róluk bővebben szó:
- mysqld: maga a szerverfolyamat elindítható ezzel a programmal
- mysqld_safe: script, amely megpróbálja biztonságos módon elindítani a mysqld szerverfolyamatot.
- mysqlmanager: futó szerverfolyamat-példányokat felügyeli
1.2.2.1 Kezdeti jelszavak beállítása
- Legelőször be kell állítanunk valamilyen jelszót a root felhasználónak, hogy illetéktelenek ne léphessenek be a szerverre. Ezt a következő paranccsal tehetjük:
SET PASSWD FOR 'root'@'localhost' = PASSWORD('szupertitkos_jelszo');
- Hogy ezt szisztematikus módon megtehessük, érdemes először kilistázni, mely hostokon mely felhasználók léteznek:
SELECT Host, User FROM mysql.user;
- Kezdetben létezik egy anonim account is, teljes jogosultságokkal. Ezt célszerű törölnünk:
DROP USER "";
1.2.2.2 Felhasználói fiókokról
- MySQL-ben a felhasználói fiókok felhasználónevekhez és hostokhoz van társítva (amely hostokról a felhasználó beléphet)
- Jelszó is tartozik hozzájuk
- Egy MySQL felhasználónévnek semmi köze az operációs rendszer felhasználóneveihez, és a jelszavaknak sincs közük egymáshoz
- A felhasználónév maximális hossza 16.
- Háromféleképpen adhatunk új felhasználót a rendszerhez:
- CREATE USER vagy GRANT SQL-parancsokkal:
- GRANT ALL PRIVILEGES ON *.* TO 'adam'@'localhost' IDENTIFIED BY 'jelszo' WITH GRANT OPTION;
- localhost helyett írhatunk %-jelet, ilyenkor bármely hostról kapcsolódhat az új felhasználó
- INSERT, DELETE, illetve UPDATE SQL-parancsokkal pl. a mysql.user táblában (mysql helyett értelemszerűen az aktuális adatbázis nevét írjuk)
- INSERT INTO mysql.user (Host, User, Password) VALUES ('localhost','user',PASSWORD('titkositott_jelszo'));
- mysqlmanager nevű program segítségével:
- mysqlmanager --add-user --username='Bela' --password='jelszo'
- CREATE USER vagy GRANT SQL-parancsokkal:
- Az első megoldás biztonságosabb mint a második, kevesebb lehetőség van hibázásra, mint ha explicit módon írogatnánk a táblákba.
1.2.2.3 Szerver Paramétereinek beállítása
- A PostgreSQL-hez hasonlóan, a MySQL is lehetővé teszi, hogy parancssorból vagy fájlból állítsunk be fontosabb paramétereket a szerver indításakor
- Dinamikus módon is beállítható legtöbb a SET parancs segítségével
1.2.2.3.1 Parancssorból történő paraméter-beállítás
- A parancssorból történő beállításra szolgáló egyik program a mysqladmin (ezzel inkább ellenőrizni lehet paramétereket, de néhányat segítségével be is lehet állítani). Meghívása:
- mysqladmin [opciók] parancs [argumentumok] [parancs [argumentumok]] ...
- Főbb kapcsolók, amelyekkel befolyásolni lehet a szerver konfigurációját mysqladmin programon kereszül:
- --compress: kliens és szerver között menő adatok tömörítése
- --port=port_num: milyen TCP/IP porton figyeljen a szerver a kapcsolódáshoz
- --protocol={TCP|SOCKET|PIPE|MEMORY}: milyen protokollon keresztül történjen a kapcsolódás
- --socket=path: localhostról történő kapcsolódás esetén hol legyen a UNIX-domain socket, vagy Windows esetén a névvel rendelkező pipe
- --ssl* : több parancs, amelyekkel az ssl-lel történő kapcsolódás paraméterei beállíthatóak
- connect_timeout
- shutdown_timeout
- További rendszerszintű paraméterek beállíthatóak:
- szerver indításakor a mysqld segítségével (ami tulajdonképpen a MySQL szerver programja), vagy
- konfigurációs fájlok szerkesztésével, illetve
- korlátozott esetekben a SET parancs segítségével (nagyon-nagyon sok paraméter van, ezért itt a teljesség igénye nélkül sorolok fel néhányat):
- --init-file : SQL-utasításokat tartalmazó fájl, amelyek a szerver indításakor végrehajtásra kerülnek
- --init-connect : stringbe tárolt SQL-utasítása, amely minden egyes kapcsolódáskor lefut
- --join_buffer_size : indexelést nem használó join-műveletekkor használt puffer mérete
- --max_connections : maximum hány kliens kapcsolódhat egyszerre
- --max_user_connections : minden egyes felhasználóra érvényes korlát
- --max_heap_table_size : memória táblák maximális mérete
- --pid_file
- --log : minden utasítás logolásának engedélyezése (lásd később, General Query logolásnál)
- --log_bin : bináris logolás engedélyezése (szintén lásd később)
- --log_error : error log helye
- --log_slow_queries : olyan utasítások logolása, amelyek végrehajtása bizonyos időnél tovább tartott
- --long_query_time : ennek az időnek a beállítása
- --max_binlog_size : mekkora méret esetén rotáljon a bináris logolásnál
- --log_output : Qeneral Query log és Slow Query log fájlba, adatbázis táblába, mindkettőbe vagy egyikbe se kerüljön
1.2.2.3.2 Kapcsolódással és autentikációval kapcsolatos paraméterek felhasználónként
- Az összes egyidejű csatlakozás száma szabályozható a max_user_connections paraméterrel
- Egyénenként, felhasználónként beállíthatjuk a következő paramétereket:
- Óránként kiadható SQL-lekérdezések
- Óránként kiadható SQL-update műveletek
- Óránként lehetséges kapcsolódások száma
- Alapértelmezett értékük 0, ilyenkor korlátlan számú hozzáférés történhet
- Nem alapértelmezett beállítás:
- GRANT ALL ON customer.* TO 'adambum'@'localhost' IDENTIFIED BY 'jelszo' WITH MAX_QUERIES_PER_HOUR 20 MAX_UPDATES_PER_HOUR 10 MAX_CONNECTIONS_PER_HOUR 5 MAX_USER_CONNECTIONS 2
1.2.2.4 Karbantartás
1.2.2.4.1 Monitorozás
- mysqlmanager program segítségével
- A MySQL ún. Instance Manager programja
- Minden futó mysqld lehet őrzött vagy nem őrzött (guarded vagy unguarded)
- Alapértelmezésben minden guarded, ami azt jelenti, hogy ha a szerver valamiért leáll, az Instance Manager újraindítja, ha pedig az Instance Manager kilép, akkor leállítja a szervert is
- Az Instance Manager távoli karbantartást is lehetővé tesz, mivel egy daemon folyamat, amelyhez szintén lehet portokon kapcsolódni
- Néhány fontosabb paraméter:
- --run-as-service: daemonizáljuk a mysqlmanager folyamatot. Hatására elindul egy ún. angyal folyamat (angel process), amely újraindítja a mysqlmanagert, ha leáll (az angyal folyamat olyan egyszerű, hogy leállása nem valószínűsíthető)
- --bind-address : milyen IP-címet figyeljen
- --check-password-file : ellenőrizze a jelszó fájl konzisztenciáját
- --clean-password-file : töröljön ki minden felhasználót, jelszót
- --log : a mysqlmanager log fájlja. Csak akkor értelmes, ha meg van adva a --run-as-service opció
- --port : melyik porton figyelje a bejövő kéréseket
- --socket : unix-domain socket figyelése bejövő kérésekhez
- --wait-timeout : mennyi idő után zárjon be egy aktivitás nélküli kapcsolatot
1.2.2.4.2 Logolás
1.2.2.4.3 Archiválás, helyreállítás
1.3 Összehasonlítás
A fentiek alapján néhány fontosabb különbség: