PostgreSQL utbildning, IT-avdelningen. Sida 1 (17) PostgreSQL utbildning Innehållsförteckning 1 PostgreSQL Introduktion...............................................................................................3 1.1 PostgreSQL Historia..............................................................................................3 1.2 PostgreSQL idag....................................................................................................3 Licensformen............................................................................................................3 1.3 Administrationsverktyg..........................................................................................3 psql:..........................................................................................................................3 pgAdmin:..................................................................................................................4 1.4 Anpassningsbar......................................................................................................4 1.5 Tips.........................................................................................................................4 1.6 Övning 1, Installation.............................................................................................4 2 Konfiguration.................................................................................................................6 2.1 Konfigurationsfiler.................................................................................................6 postgresql.conf:........................................................................................................6 pg_ctl.conf och start.conf.........................................................................................6 pg_hba.conf:.............................................................................................................7 pg_ident.conf: ..........................................................................................................7 2.2 Övning....................................................................................................................8 3 Server administration.....................................................................................................9 3.1 Konfiguration av server.........................................................................................9 3.2 Övning....................................................................................................................9 4 Användare hantering....................................................................................................10 4.1 Övning..................................................................................................................10 5 Administrativa sysslor..................................................................................................11 5.1 Templates.............................................................................................................11 5.2 Tablespace............................................................................................................11 6 Backup och restore......................................................................................................12 6.1 Backup.................................................................................................................12 pd_dump.................................................................................................................12 6.2 Restore.................................................................................................................12 6.3 Övning..................................................................................................................13 7 Övervakning och prestanda analys..............................................................................14 8 Replikering..................................................................................................................15 8.1 Inbyggt.................................................................................................................15 8.2 Slony....................................................................................................................15 8.3 Pg-pool.................................................................................................................15 8.4 Postgres-XC.........................................................................................................15 PostgreSQL utbildning, IT-avdelningen. Tidsplan: 10:30 – 11:30 Intro installation av PostgreSQL i virtuella maskiner 11:30 – 12:30 LUNCH 12:30 – 14:45 Konfiguration, Server administration. Psql och pgAdmin 14:45 – 15:00 FIKA 15:00 – 16:00 Användare hantering, Administrativa sysslor, backup 09:00 – 09:30 Summering av gårdagen, fortsättning 09:30 – 09:45 FIKA 09:45 – 11:30 Fortsatt backup och recovery. Övervakning och prestanda analys 11:30 – 12:30 LUNCH 12:30 – 14:00 Replikering Sida 2 (17) PostgreSQL utbildning, IT-avdelningen. Sida 3 (17) 1 PostgreSQL Introduktion 1.1 PostgreSQL Historia. Började vid University of California at Berkley 1986. Hete från börja postgres, Professor Michael Stonebroker → CTO för Informix. (IBM köpte Informix 2001 för 1 billion dollar) Efterföljare till Ingres så det blev ”after Ingres” postgres 1995 in med en del SQL så det blev Postgres95. 1996 lämnade den ”akademiska världen” och blev open source 1.2 PostgreSQL idag Många plattformar ACID MVCC Transaktioner Triggers Procedurer i olika språk Skapa egna typer Utöka funktionalitet med extensions. Skriva egna funktioner Licensformen Egen som heter PostgreSQL, väldigt lik BSD och MIT licens. Vem äger PostgreSQL? Ingen äger PostgreSQL. Det är en icke vinstdrivande förening med frivilliga och företag som delar kod under PostgreSQL Licens. Det finns ca 200 utvecklare. 1.3 Administrationsverktyg. psql: CLI vertyg som följer med postgres vid installation. För hjälp se: http://www.postgresql.org/docs/9.1/static/app-psql.html alt. # man psql Kan användas som en interaktiv konsol eller som ett program. Vi användning som interaktiv konsol så loggar man in mot en maskin genom att ange host och port. Default är localhost och port 5432. Man väljer en databas man vill jobba mot. Inne i konsolen kan man skriva rena SQL kommandon och specifika kommandon för psql. Dessa kommandon börjar alltid med ”\”. T.ex PostgreSQL utbildning, IT-avdelningen. Sida 4 (17) postgres=# \? Som är hjälp funktionen i psql. Det finns många kommandon och vi kommer att använda en del under denna kurs. Man kan i konsolen också skriva SQL direkt. En SQL sats avslutas med ”;” så man kan skriva flera rader innan man exekverar en sats. pgAdmin: GUI applikation som utvecklas utanför PostgreSQL men som Open Source. Samma Licens som PostgreSQL. Utvecklat i C/C++, använder wxWidgets som GUI framework. Kan köras på Windows, Mac och Linux 1.4 Anpassningsbar PostgreSQL är mycket anpassningsbar genom stöd för att skriva egna procedurer/funktioner i olika programmeringsspråk. Lika så finns det många bra script etc som några utvecklat. Dessa saker finns inte med i kärnan av postgres utan finns som ett contrib paket. Vidare kan man utöka postgres med egna typer och funktioner skrivna tex i ett kompilerande språk för att få upp hastighet. Man kan då paka ihop dessa typer och funktioner till en EXTENSION. Tidigare versioner av postgres var man tvungen att registrera dessa extensions genom att köra SQL filer mot sin databas. I version 9.1 så har man skapat en egen funktioner för det se CREATE EXTENSION 1.5 Tips Om man vill slipa ange password hela tiden då man använder sudo komandot så kan man ändra i filen /etc/sudoers och skriva följande sist i filen itadmin ALL=NOPASSWD:ALL Då behöver man inte skriva sitt password då man använder sudo. Detta rekomenderas inte på en produktions server men vid labb och utbildning kan man använda det 1.6 Övning 1, Installation Denna övning bygger på att man använder Ubuntu Server version 12.04 LTS. Vi börjar med att installera PostgreSQL server och contrib paketet. Vi skall använda ett script/ extensions i contrib paketet som underlättar då vi senare kopplar upp oss med pgAdmin mot servern. # sudo aptget install postgresql # sudo aptget install postgresqlcontrib kolla att postgres har startat genom # ps auxf Nästa steg är att sätta password för super admin kontot ”postgres” vilket är den enda användare som finns i databsen från början. När man installerar postgres så skapas också en användare och en grupp på maskinen som heter postgres. Denna användare har i ubuntu ett bash shell default. ( kolla i /etc/passwd resp /etc/group) PostgreSQL utbildning, IT-avdelningen. Sida 5 (17) Om vi vill ändra på lösenordet för detta konto skriver man # sudo passwd postgres men det går också att ända sig till postgres användaren med. # sudo su – postgres Nu skall vi sätta ett password för användare postgres som finns i databasen. Vi visar två sätt, först # sudo u postgres psql postgres postgres=# \password postgres Enter new password: Enter it again: postgres=# \q ## det andra sättet är # sudo u postgres psql postgres postgres=# ALTER USER postgres WITH PASSWORD 'secretpassword'; Nu skall vi lägga till två extensions. Det första är att vi skall lägga till en sak från contrib paketet som gör att vi kan göra en del admin saker på servern från pgAdmin. Så vi gör följande: # sudo u postgres psql Här anger vi inge databas då kommer psql att försöka ansluta till en databas med samma namn som den USER som man anger. Och i linux så är default USER den user som man är inloggad som. Vi kan se hur vi har anslutit oss genom kommandot: postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432". nu vet vi att vi jobbar mot databasen postgres som är system databasen i PostgreSQL server. Så då skapar vi vår extension. postgres=# CREATE EXTENSION adminpack; PostgreSQL utbildning, IT-avdelningen. 2 Konfiguration 2.1 Konfigurationsfiler Alla konfigurationsfiler ligger samlade på sökvägen: /etc/postgresql/9.1/main/ Här finns filerna: rwrr 1 postgres postgres 316 nov 7 17:53 environment rwrr 1 postgres postgres 143 nov 7 17:53 pg_ctl.conf rwr 1 postgres postgres 4649 nov 7 17:53 pg_hba.conf rwr 1 postgres postgres 1636 nov 7 17:53 pg_ident.conf rwrr 1 postgres postgres 19259 nov 7 17:53 postgresql.conf rwrr 1 postgres postgres 378 nov 7 17:53 start.conf postgresql.conf: kontrollerar servern inställningar. Vi går igenom det i kapitel 3. pg_ctl.conf och start.conf Används då man skapa kluster Sida 6 (17) PostgreSQL utbildning, IT-avdelningen. Sida 7 (17) pg_hba.conf: Filen innehåller regler för hur man tillåter och nekar uppkoppling mot databasen. Formen är alltid TYPE DATABASE USER ADRESS METOD Vanliga typer är local, host, hostssl. För hostssl krävs att man sätter upp ett cerifikat DATBASE kan vara alla eller en enskild databas USER kan vara en användare eller en grupp eller alla. För host behövs ange en adress. Här kan det vara en unik ip-adress eller ett nät. Vill man tillåta allt anger man 0.0.0.0/0. Siffran efter / är nätmasken. Vanliga metoder är trust, md5, password, ident men man kan också ha reject. Peer är nytt i version 9.1 och finns bara på unix maskiner. Den försöker hämta användaren från systemet via kernel. Ident fungerar så att den försöker hämta användaren från ident servern. I båda fallen kan man göra mappning mot en användare i databasen. Password är plain text och bör undvikas, använd md5 istället. Sedan finns det stöd för andra sätt i Linux tex PAM, Radius, LDAP, Kerberos, SSPI, GSSAPI eller skapa ett eget. Nedan visar utdrag från filen på en standard Ubuntu 12.04 installation. # DO NOT DISABLE! # If you change this first entry you will need to make sure that the # database superuser can access the database using some other method. # Noninteractive access to all databases is required during automatic # maintenance (custom daily cronjobs, replication, and similar tasks). # # Database administrative login by Unix domain socket local all postgres peer # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. #local replication postgres peer #host replication postgres 127.0.0.1/32 md5 #host replication postgres ::1/128 md5 Man ser då att det bara är local host som har behörighet att ansluta mot databasen. Vill man öppna upp ett subnät så kan man ange host all all 10.0.0.0/8 md5 pg_ident.conf: används för att mappa en system användare mot en användare i databasen. PostgreSQL utbildning, IT-avdelningen. Sida 8 (17) 2.2 Övning Börja med att öppna pgAdmin. Försök att koppla upp mot er egen maskin. Dvs skapa en ny anslutning med knappen längst till vänster på verktygsraden. Knappa in namn och host som är er egen maskin. Ange database till postgres och username likaså. Password det som ni valde i första övningen. Försök att koppla upp. Vad händer?.................................. Varför?.......................................... Det första vi skall göra är att göra så att det går att ansluta via tcp/ip mot servern. Vi behöver då ändra i postgresql.conf filen. Öppna upp filen och leta efter ”listen_address”. Som ni ser i konfigurationsfilen så kan man här ange vilken adress som man vill lyssna på. Vi ändrar raden så att vi lyssnar på alla interface listen_addresses = '*' sedan behöver vi starta om servern sudo /etc/init.d/postgresql restart Försök koppa upp igen med pgAdmin. Vad händer?.................................. Varför?.......................................... Nästa steg blir nu att ändra i pg_hba.conf filen så att vi tillåts att logga in mot maskinen. Lägg till följande: host all all 0.0.0.0/0 md5 under IPv4 konfigurationerna. Sedan behöver vi starta om servern sudo /etc/init.d/postgresql restart Försök koppa upp igen med pgAdmin. Fungerar? PostgreSQL utbildning, IT-avdelningen. Sida 9 (17) 3 Server administration. 3.1 Konfiguration av server PostgreSQL server configures genom filen postgresql.conf. Nu skall vi gå igenom några konfigurations parametrar som är bra att känna till. Följande värden kräver omstart av servern för att de skall börja gälla: • max_connection, anger hur många samtida anslutningar som får se mot servern. • shared_buffers, anger hur mycket minne som alla anslutningar skall dela på för spara ställa frågor. Denna parameter har mest inverkan på query-prestanda. Minst 25% av tillgängligt RAM minne. Följande parametrat är också viktiga men kräver ingen omstart men väl en reload för att börja gälla. • effective_cache_size, är en uppskattning av hur mycket minne som du tror att OS:et kan tilldela postgres processen. Används för ”query planner” för att planera om ett index eller fråga rymms i RAM minne. Sätter man denna för lågt så så kan det påverka utnyttjandet av index. Har man en dedikerad PostgreSQL server så kan man minst sätta halva RAM minnet som en bra början. • work_mem, anger hur mycket minne som varje operation så som sortering, hash join etc. Värdet här beror på hur man använder servern och hur många användare som ansluter mot servern. Hur mycket RAM minne som finns i servern. Detta värde kan också sättas per användare så att en power-user som gör tyngre och mera sofistikerade frågor får mera minne. • maintenance_work_mem, detta anger den totala mängd RAM minne som städnings aktiviteter så som vacuuming. 3.2 Övning Öppna upp postgresql.conf filen. Kolla igenom vilka värden som är satta för värdena ovan. PostgreSQL utbildning, IT-avdelningen. Sida 10 (17) 4 Användare hantering Man kan skapa grupper och användare. En användare kan tillhöra en eller ingen grupp. En grupp är egentligen en användare i databasen med skillnaden att den användaren inte kan logga in. 4.1 Övning Vi skall börja med att kolla vart användarna sparas i Postgres. Använd pgAdmin och koppla upp mot din databas. 1. koppa upp mot databasen postgres 2. Expandera Catalogs 3. Öppna katalogen ”PostgreSQL (pg_catalog)” 4. Gå till tabeller 5. Leta upp tabellen pg_authid 6. Lista den, vilka användare finns det? 7. Behåll denna lista öppen vi kommer att göra refresh då vi lagt till användare. Nu skall du skapa 2 grupper och 3 användare med pgAdmin. 1. Skapa grupperna ”techer” och ”student”. 2. Skapa 3 st användare, test1, test2 och test3. Väl valfria password 3. Test 1 skall vara medlem i techer och test2 i student. 4. Gör nu refresh på listan från ovan. 5. Hur ser man att vad som är användare och grupp? 6. Ändra så att användare test3 blir en grupp Prova att skapa en ny anslutning från pgAdmin men en av de användare som du nyss skapat. När det fungerar. Ändra expiredat för den anväöndaren så att det slutar att gälla. Prova att logga in in igen. PostgreSQL utbildning, IT-avdelningen. Sida 11 (17) 5 Administrativa sysslor 5.1 Templates Default finns det två st default templates 1. template0 2. template1 Template1 är den som används som mall då man skapar en ny databas. Template0 är en kopia på template1 och bör aldrig förändras. Vill man att ett en viss EXTENSIONS skall finnas med i alla databaser på servern så kan man lägga till det i template1 # sudo u postgres psql d template1 c 'CREATE EXTENSION adminpack;' Likaså om det är ett programmeringsspråk för att skriva funktioner som man vill skall finnas med i alla databaser så kan man lägga till det till template1 # sudo u postgres psql d template1 c 'CREATE LANGUAGE plperl;;' Skapa egna genom Two useful flags exist in pg_database for each database: the columns datistemplate and datallowconn. Datistemplate can be set to indicate that a database is intended as a template for CREATE DATABASE # UPDATE pg_database SET datistemplate=true WHERE datname='mytemplate'; 5.2 Tablespace Skapa nya med: CREATE TABLESPACE tablespace_name [ OWNER user_name ] LOCATION 'directory' Exempel: CREATE TABLESPACE dbspace LOCATION '/data/dbs'; CREATE TABLESPACE indexspace OWNER genevieve LOCATION '/data/indexes'; Ändra TABLESPACE för en databas: ALTER DATABASE name SET TABLESPACE new_tablespace Changes the default tablespace of the database. Only the database owner or a superuser can do this; you must also have create privilege for the new tablespace. This command physically moves any tables or indexes in the database's old default tablespace to the new tablespace. Note that tables and indexes in non-default tablespaces are not affected. PostgreSQL utbildning, IT-avdelningen. Sida 12 (17) 5.3 Extensions Kolla vilka extensions som är installerade select * from pg_available_extensions; 5.4 Övning 1. Ladda ner filen create_db.sql på http://gislab.miun.se 2. Denna fil kräver ett extension som heter postgis Installera det på maskinen med apt-get install 3. Kolla om detta EXTENSION finns med i databasen. Vilken version har den?................ Vilken är den senaste versionen av POSTGIS på nätet?.................. 4. skapa en ny användare i databasen som heter ggi2. 5. Kör skriptet mot databasen. Via psql, du måste skicka upp filen på servern med scp eller Filezilla eller motsv.... 6. Kolla i pgAdmin att databasen har skapats. # sudo aptget install pythonsoftwareproperties # sudo addaptrepository ppa:ubuntugis/ubuntugisunstable # sudo aptget update # sudo aptget distupgrade # sudo aptget install postgresql9.1postgis2.0 Nästa steg så skall vi prova att skapa en ny TABLESPACE. 1. Skapa en ny katalog i home som heter dbstore /home/dbstore. Ändra ägare och grupp på katalogen till postgres sudo chown postgres.postgres /home/dbstore 2. Skapa en ny TABLESPACE utan ägare till denna katalog 3. Ändra TABLESPACE för GGI2 databasen till denna nya tablespace. 4. Kolla i katalogen vad som hänt......... Nästa steg så skall vi skapa en ny template 1. Börja med att skapa en databas som heter template_postgis. 2. Ägaren skall vara postgres 3. Lägg till EXTENSION postgis till denna databas 4. Ändra nu så att denna databas blir en template. 5. Skapa en ny databas som heter GISTEST och som använder template_postgis som template. PostgreSQL utbildning, IT-avdelningen. 6. Kolla i den nya databasen att postgis finns med. Sida 13 (17) PostgreSQL utbildning, IT-avdelningen. Sida 14 (17) 6 Backup och restore 6.1 Backup Det finns två verktyg för att göra backup i postgres 1. pg_dump 2. pg_dumpall pg_dumpall används för att göra backup på alla databaser i servern. Detta komando måste köras som användaren postgres. pg_dump kan användas för att göra backup på en specifik databas. pd_dump f file, file=file Send output to the specified file. This parameter can be omitted for file based output formats, in which case the standard output is used. It must be given for the directory output format however, where it specifies the target directory instead of a file. In this case the directory is created by pg_dump and must not exist before. F format, format=format Selects the format of the output. format can be one of the following: p, plain Output a plaintext SQL script file (the default). c, custom Output a customformat archive suitable for input into pg_restore. Together with the directory output format, this is the most flexible output format in that it allows manual selection and reordering of archived items during restore. This format is also compressed by default. d, directory Output a directoryformat archive suitable for input into pg_restore. This will create a directory with one file for each table and blob being dumped, plus a socalled Table of Contents file describing the dumped objects in a machinereadable format that pg_restore can read. A directory format archive can be manipulated with standard Unix tools; for example, files in an uncompressed archive can be compressed with the gzip tool. This format is compressed by default. t, tar Output a tarformat archive suitable for input into pg_restore. The tarformat is compatible with the directoryformat; extracting a tarformat archive produces a valid directoryformat archive. However, the tarformat does not support compression and has a limit of 8 GB on the size of individual tables. Also, the relative order of table data items cannot be changed during restore. 6.2 Restore Två sätt 1. psql med filer som skapats med pg_dump eller pg_dumpall som klartext filer. 2. pg_restore programmet för återställa databser som backuptas med pg_dump i valfritt format som inte är klar text. Så skall man importera en hel databas så måste man använda psql med en dump i klartext. PostgreSQL utbildning, IT-avdelningen. För enskilda databaser så kan man använda någon av de två metoderna. 6.3 Övning 1. Gör en backup på servern av hela databasen. 2. Gör en backup av GGI2 databasen i både klartext och komprimerat. 3. Deleta GGI2 databasen 4. Gör en återställning med psql i klartext 5. Radera igen 6. Gör en återställning pg_restore från den komprimerade filen Sida 15 (17) PostgreSQL utbildning, IT-avdelningen. 7 Övervakning och prestanda analys Munin Nagios pgAdmin - > TOOLS | Server status Sida 16 (17) PostgreSQL utbildning, IT-avdelningen. Sida 17 (17) 8 Replikering Omfattande område vi kommer bara berörö detta yttligt då jag saknar erfarenhet från någon av dessa lösningar. 8.1 Inbyggt Inbyggt i PostgreSQL finns idag stöd för master-slave replikering via Streaming replikering. Man använder WAL Write Ahead Log. Postgres använder WAL på en singel maskin. Så vill man ha en slave så kan man föra över all WAL data till en slave och köra samma WAL data på den som man gör på master servern. Med version 9 av postgres så införde man möjligheten att strömma denna data från en master till andra maskiner. Detta kan göras som asyncron och syncron replikering. PostgreSQL kan inte själv sköta om skiftning mellan master och slave. Här måste man ha någon form av HA och Heartbeat. Finna några olika lösningar så som OpenAIS, Corosync, Linux-HA och Pacemaker 8.2 Slony Slony en av de äldsta replikeringarna till postgres som fortfarande finns kvar och aktivt utvecklas /används. Styrkor. Kan replikera på tabell nivå. Olika tabeller mellan olika maskiner. 8.3 Pg-pool Lastbalansering. 8.4 Postgres-XC Är egentligen en egen version av postgres. Så det installeras från ett eget källkodsträd. Här har man data-noder en global transaktions hanterare och koordinatorer.
© Copyright 2024