Diverse om MySQL
Hur man administrerar stackens databasserver.
En del saker kan göras genom det webbaserade administrationsverktyget phpMyAdmin.
Adminlösen
I samtliga exempel nedan kan man se -u root -p
som
del av kommandona. root
är administratörskontot för
vår databas,
och förutom namnet har det inget alls att göra med Unix-root.
-p
ser till att det promptas efter lösenord. Om du inte vet
om det lösenordet är det mycket möjligt att du heller inte borde veta
det, men du kan ju alltid prova att fråga någon snällt så kanske denne
släpper ifrån sig lösenordet till dig.
Not till administratörerna: var restriktiva med att ge ut
det här lösenordet!
Om du är ute efter en egen databas är det naturligtvis mycket bättre att helt enkelt be administratörerna att bygga den åt dig. Du kan t.o.m. hjälpa dem genom att berätta om den här sidan, så blir det hela enklare för dem också!
Nya databaser
-
Se till att göra följande steg innan du börjar:
- Inloggad på sql.stacken.kth.se (just nu är det renskav)
module add mysql
-
Gör nu följande kommando:
$mysqladmin -u root -p create {databasnamn}
Databasens namn får enbart innehålla bokstäver, siffror och '_'.
-
En variant på samma kommando är (den kan vara nyttig om man ska göra andra saker med mysql i samma veva):
$mysql -u root -p mysql mysql> CREATE DATABASE {databasnamn};
- Så, nu finns det en databas. Dags att skapa användare och koppla dem till databasen.
Nya användare
Att skapa nya användare och koppla dessa till sin databas görs i
ett huj. För att göra det krävs också att man är inloggad på
sql.stacken.kth.se och har gjort module add mysql
.
$ mysql -u root -p mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX ON {databasnamn}.* TO {användare} IDENTIFIED BY '{lösenord}';
{användare} kan skrivas i två former, antingen bara ett användarnamn, eller some {user}@{host}. En {host} MÅSTE anges. {host} kan innehålla tecknet "%" some wildcard, t.ex. "%.e.kth.se" eller "130.237.234.%".
Om man inte tycker att användare ska kunna skapa index så kan man
låta bli privilegien INDEX
.
Rekommendationer:
- Skapa åtminstone kopplingar till
{användare}@
localhost
. - Skapa gärna två användare, varav den andra har tillägget "-v" i
användarnamnet, och enbart har privilegien
SELECT
. Det gör att man kan använda det namnet i diverse publika skript utan att vara rädd för att en crackur ska kunna använda det namnet för att förstöra.
Typexempel (dvs, så här brukar jag göra):
$ mysql -u root -p [...] mysql> CREATE DATABASE test_db; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX ON test_db.* TO "test-db-user"@"localhost" IDENTIFIED BY 'räksmörgås'; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX ON test_db.* TO "test-db-user"@"%.stacken.kth.se" IDENTIFIED BY 'räksmörgås'; mysql> GRANT SELECT ON test_db.* TO "test-db-user-v"@"localhost" IDENTIFIED BY 'kalleanka'; mysql> GRANT SELECT ON test_db.* TO "test-db-user-v"@"%.stacken.kth.se" IDENTIFIED BY 'kalleanka';
Koppla gamla användare
Att koppla redan befintliga användare till en ny databas funkar
exakt som att skapa nya användare, med den enda skillnaden att man
inte har med IDENTIFIED BY '{lösenord}'
.
Backup
Backup av samtliga databaser tas varje natt. Det görs genom att root kör följande kommando på shake:
/pkg/mysql/3.23.28/bin/mysqldump --opt --all-databases -ubup -ppub \ > /var/mysql/3.23.28/.backup/bup
Resten tas om hand av vårt vanliga backupsystem.
bup
roteras också, så man hittar den förra backupen
som bup.1
, den innan som bup.2
osv fram
till bup.9
.
Restore
Om något går åt pipan med databassystemet återskapar man det senaste genom att utföra följande:
/pkg/mysql/3.23.28/bin/mysql -u root -p < /var/mysql/3.23.28/.backup/bup
Notera att det bygger om allt! Om det bara är en individuell
databas man vill återskapa så kan man plocka ut rätt bitar ur
bup
till en annan fil och använda den filen som input, eller
be någon om hjälp.