dbwebb-se / databas

Course repo for database course (dbw).
Other
4 stars 2 forks source link

Felsök din mariadb-klient på ubuntu/wsl #57

Open mosbth opened 1 year ago

mosbth commented 1 year ago

Ett antal tips vid felsökning när du för första gången skall koppla upp dig via mariadb-klienten i terminalen till din databas som du har installerat i Windows.

Är MariaDB server startad?

Du försöker starta mariadb terminalklient och den hänger sig.

Tryck ctrl-c och dubbelkolla att du verkligen startat MariaDB. Du kan öppna applikationen services i Windows och kika om MariaDB är startad. Det kan se ut så här.

image

Dubbelkolla att du kan nå databasservern från ubuntu

Du är osäker på om databasservern kan nås från ubunutu/wsl (terminalen). Databasservern snurrar på Windows och du är i ubuntu terminalen i WSL och det är strikt två skilda och separerade system som behöver koppla sig till varandra.

Börja med att kolla vilket hostname du har och vilken ip-address som gäller. Det är på denna host som din databasserver snurrar.

$ hostname
DESKTOP-NKPRBVC

Det är hostnamnet som representerar din Windows, om man prependar strängen ".local". I mitt fall är alltså hostens namn "DESKTOP-NKPRBVC.local" vilket också kan skrivas via bash-kommandot $( hostname ).local.

$ echo $( hostname ).local
DESKTOP-NKPRBVC.local

Sen kollar vi vilken ip-adress som detta motsvarar.

$ nslookup  $( hostname ).local
Server:         172.30.48.1
Address:        172.30.48.1#53

Bra, spara undan namn och ip-adressen och inkludera även 127.0.0.1 (localhost) som en extra test.

DESKTOP-NKPRBVC.local
172.30.48.1
127.0.0.1

Använd kommandot telnet för att koppla dig direkt mot databasservern, bara för att kontrollera att du kan nå den. Installera telnet om det behövs med sudo apt install telnet.

image

Detta är alltså ett sätt att dubbelkolla att du verkligen kan nå databasservern från terminalen. I mitt exempel ovan gick det bra både när jag använde hostnamnet och ip-adressen, det gick inte bra med 127.0.0.1. Det som skrivs ut är databasservern som identifierar sig.

Om någon av adresserna gick bra att koppla sig mot så använder du den och fortsätter.

mosbth commented 1 year ago

Det kan också vara bra att veta vilken version av Ubuntu du kör med och vilken version av WSL du har.

lsb_release -a

image

För att kolla vilken version av WSL du kör så öppnar du terminalen powershell i windows och skriver:

wsl --list --verbose

image

Det är önskvärt med WSL version 2 och att Ubuntu är version 22, eller 20 (även om äldre kan fungera).

mosbth commented 1 year ago

Här är ett par vanliga fel när man inte angivit rätt host, user och password.

image

Här är felen i text.

$ mariadb
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
mos:~
$ mariadb -h$( hostname ).local
ERROR 1045 (28000): Access denied for user 'mos'@'172.30.57.117' (using password: NO)
mos:~
$ mariadb -h$( hostname ).local -udbadm
ERROR 1045 (28000): Access denied for user 'dbadm'@'172.30.57.117' (using password: NO)
mos:~
$ mariadb -h$( hostname ).local -udbadm -pWRONGPWD
ERROR 1045 (28000): Access denied for user 'dbadm'@'172.30.57.117' (using password: YES)
mosbth commented 1 year ago

Du gör allt rätt men får ändå inte ansluta till servern? Du kan få följande felmeddelande.

The host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server.

Du behöver ha en användare som kan koppla sig till databasservern oavsett host, i vårt fall behöver användaren heta dbadm@% där % anger att användaren kan få koppla sig till databasen oavsett från vilken host den ansluter sig. https://dbwebb.se/coachen/mariadb-och-windows-wsl2-bash-terminal#user

I kapitlet "" visas hur du skapar en sådan användare, troligen har du misat det eller missat att göra "FLUSH".

Behöver du felsöka kan du köra följande SQL-kod för att visa vilka användare som finns i ditt system.

SELECT
    User,
    Host,
    Grant_priv,
    Super_priv,
    Trigger_priv,
    plugin
FROM mysql.user
WHERE
    User IN ('root', 'dbadm', 'user')
ORDER BY User
;

Koden ligger även i filen example/sql/check-users.sql

Utskriften kan se ut så här från kommandot och du letar efter din dbadm-användare som har ett % i sig.

MariaDB [(none)]> SELECT
    ->     User,
    ->     Host,
    ->     Grant_priv,
    ->     Super_priv,
    ->     Trigger_priv,
    ->     plugin
    -> FROM mysql.user
    -> WHERE
    ->     User IN ('root', 'dbadm', 'user')
    -> ORDER BY User
    -> ;
+-------+-----------------+------------+------------+--------------+-----------------------+
| User  | Host            | Grant_priv | Super_priv | Trigger_priv | plugin                |
+-------+-----------------+------------+------------+--------------+-----------------------+
| dbadm | localhost       | Y          | Y          | Y            | mysql_native_password |
| dbadm | %               | Y          | Y          | Y            | mysql_native_password |
| root  | localhost       | Y          | Y          | Y            | mysql_native_password |
| root  | desktop-nkprbvc | Y          | Y          | Y            | mysql_native_password |
| root  | 127.0.0.1       | Y          | Y          | Y            | mysql_native_password |
| root  | ::1             | Y          | Y          | Y            | mysql_native_password |
+-------+-----------------+------------+------------+--------------+-----------------------+
6 rows in set (0.087 sec)