tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Virtuaalipalvelin 3: MySQL

Tietokanta on monen eri toiminnan ydin. Sitä tarvitaan näkyvässä osassa esimerkiksi rakentamaan WordPress-sivut. Mutta se vastaa konepelin alla myös järjestelmän toiminnasta. Voit asentaa minkä tietokannan tahansa, ja lopputuloksen kannalta ne ovat hyvin samankaltaisia. Sen sijaan nopeuksissa on eroja, myös minkälaisia ympäristöissä niitä käytetään sekä tuetysti komentojen syntaksit vaihtelevat hieman. Jos sinulla on erikoistarpeita, niin tiedät minkä asennat. Ns. tavallisessa käytössä sinulla on vain kaksi vaihtoehtoa: MySQL ja MariaDB. Aidosti vaihtohdot ovat enemmänkin poliittisia, koska nuo ovat perimmältään sama asia. Alustana minulla on tässä jutussa DigitalOceanin droplet ja Ubuntu 19.04.

Muinaishistoriassa 1990-luvulla vaihtoehtoja oli Microsoftin SQL sekä Oracle. Molemmat olivat kalliita ja rajoitettuja. 1995 julkaistiin open source vaihtoehto, ilmaiseksi, jonka nimi oli MySQL. Hetken kuluttua se oli ohittanut teollisuusjättiläiset ja kattaa nykyään noin puolet maailman tietokannoista. Sitten Sun Microsystems osti MySQL:n. Hetken kuluttua Oracle, joka oli maailman johtava kaupallinem tietokantatoimittaja, osti Sun Microsystemsin ja sai itselleen MySQL:n. Jos puhutaan markkinoiden keskittymisestä, niin tässä on yksi sellainen: maailman suurin kaupallinen tietokantayritys omistaa maailman suurimman vapaan tietokantajärjestelmän. Tilanne on sama kuin jos Microsoft ostaisi linuxit.

Tuo aiheutti pelkotiloja ja kaikki olivat varmoja, että Oracle joko kuristaisi tai rajoittaisi MySQL:ää saadakseen siirrettyä käyttäjiä maksullisen järjestelmän puolelle. MySQL:n tekijät rakensivat forkin, muokkauksen tai puukotuksen, korvaamaan MySQL. Se julkaistiin 2010 ja sai nimen MariaDB.

Aidosti MariaDB on MySQL – mutta hieman viritetympänä. Se taasen näkyy hieman parempana nopeutena, väittävät. Itse en ole huomannut eroa tavallisessa websivu- ja verkkokauppakäytössä.

Koska MariaDB on MySQL, niin se näkyy yhdessä toisessakin asiassa. Kaikki komennot (melkein) ja muukin toiminta on samanlaista, joten MySQL-esimerkit toimivat suoraan – aina komentoja myöten.

Sinulla on asennushommissa kolme vaihtoehtoa:

  • asentaa ja käyttää MySQL:ää
  • asentaa ja käyttää MariaDB:tä
  • asentaa MySQL, muuttaa se MariaDB:ksi ja käyttää sitä

Teki minkä tahansa, niin tällä aloitetaan:

apt update

Puhdas MySQL

MySQL:n asennus on kovin suoraviivainen

 apt install mysql-server

MariaDB:n asennus

MariaDB asennetaan periaatteessa aivan samalla tavalla

apt install mariadb-server

You have held broken packages

Ja nyt siirrytään periaattesta käytäntöön. Nykyään DigitalOceanin Ubuntu 19.04 osaa asentaa MariaDB:n. Kaikissa jakeluissa sitä ei kuitenkaan välttämättä ole ja silloin saat otsikon mukaisen virheilmoituksen. Jos noin käy, niin siirry suunnitelmaan B.

Valitse haluamasi linux-jakelu, versio ja mistä haluat MariaDB:n ladattavan. Sivun alaosassa on silloin ohjeet miten sen asennat. Lyhyesti: kerrot järjestelmälle mistä se löytää sellaisen paketin, jossa on MariaDB.

Itse käytin Ubuntu 19.04:lle MariaDB:n version 10.4 asentamiseen DigitalOcean New Yorkin tarjoamasta paketista tällä tavalla:

  • Tämä sinulla varmaan on jo asennettuna, mutta varmistetaan:
apt install software-properties-common
  • Asennetaan repo, josta paketti saadaan:
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.4/ubuntu disco main'
apt update

Mahdollisesti kannattaa tehdä päivitys, jos sitä tarjotaan

apt dist-upgrade
  • Ja nyt asennetaan MariaDB:
apt install mariadb-server

MySQL ja MariaDB asettaminen

Laitan niin MySQL:n kuin MariaDB:n samaan, koska ne tehdään yhtä poikkeusta lukuunottamatta tismalleen samoin. Asettaminen käynnistetään komennolla:

mysql_secure_installation

Sinulta kysytään määrättyjä asetuksia, niihin kelpaa aika pitkälle oletukset:

  • Set root password – aseta rootin salasana; älä käytä samaa kuin muihin kirjautumiseen, mutta valitse sellainen, jonka muistat. Me tavalliset kuolevaiset tupataan kirjoittamaan nämä muistiin.
    Kun shellissä scripti kysyy jotain, niin usein on merkitty mahdolliset vaihtoehdot näkyviin. Kuten Set root password? [Y/n] hyväksyy y eli yes/kyllä ja n kuin no/ei. Oletusvaihtoehto on merkitty isolla kirjaimella ja se tulee käyttöön pelkällä enterillä.
  • Remove anonymous users – poistetaanko tuntemattomat käyttäjät; en tiedä mistä niitä olisi tullut, mutta vastaa Y eli kyllä.
  • Disallow root login remotely – kiellä rootin kirjautuminen etänä; vastaa Y eli kyllä, estetään.
  • Remove test database and access to it – poistetaanko testikamat; Y eli kyllä poistetaan
  • Reload privilege tables now – varmistetaan, että käyttäjien oikeudet on oikein; Y eli kyllä

Varmistetaan onko salasana käytössä tietokantaan kirjauduttaessa:

mysql -u root

Jos pääsit sisälle, niin salasanakysely on pakotettava. Ja nyt MySQL ja MariaDB eroavat toisistaan.

  • MySQL:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'salasana';

Muuta salasana haluamaksesi ennen kuin painat enteriä. Käytä sitä minkä annoit edellisessä vaiheessa tai vaihda uuteen.

  • MariaDB toimii hieman eri logiikalla. Jos sinulla on oikeudet omaava tunnus, kuten root, niin MariaDB ei ole kiinnostunut salasanastasi konsolissa. Jos olet päässyt kirjautumaan shelliin, niin MariaDB luottaa sinun olevan se kuka väitätkin. Jos olen oikein ymmärtänyt, niin kun kiellettiin etäyhteys, niin salasanan pakottaminen poistu. Jos haluat salasanan pakotetuksi, niin samalla mahdollistetaan etäyhteys – tosin, saatan olla pahasti väärässäkin. Se, että salasanaa ei erikseen vaadita shellissä, on periaatteessa turvallisuutta heikentävä, mutta toisaalta: ei salasanaa erikseen kysy mikään muu palvelu. Mutta jos haluat, että rootilta kysytään salasanaa MariaDB:hen kirjauduttaessa, niin se tapahtuu näin:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';

Sitten palataan yhteiselle polulle.

Otetaan uudet säännöt käyttöön.

flush privileges;

Pääset MySQL:stä pois:

exit;

Kokeile pääsetkö kirjautumaan ilman salasanaa:

mysql -u root

Saanet virheilmoituksen, joten kokeillaan salasanan kanssa:

mysql -u root -p

Sinulta kysytään salasanaa ja oikealla pääset sisälle.

Voit antaa salasanan myös -p lipun yhteydessä näin -psalasana mutta se ei ole todellakaan suositeltavaa – silloin jätät salasanan näkyviin mm. bashin muistiin (tiesithän, että voit selata antamiasi komentoja kursorinäppäimillä, ylös ja alas?)

Päivitys MySQL:stä MariaDB:hen

Harvempi päivitys on yhtä helppo.

Pysäytä ensin MySQL.

systemctl stop mysql

Asenna MariaDB.

apt install mariadb-server

Jos sitä ei löytynyt, niin te alussa olevan asennuksen ”plan B” mukaan.

Asennuksen jälkeen käynnistä MariaDB.

systemctl start mysql

Se oli siinä.