[MEGOLDVA] MySQL hiba: 'ERROR: 1062 Duplicate entry 'localhost-' for key 1' | ArchLinux

Üdv!

Egy Apache webszervert próbáltam felállítani az Arch Linux rendszeremen, a disztribúció Wiki leírása (http://wiki.archlinux.org/index.php/LAMP) alapján. Az Apache és a PHP része teljesen rendben van, a MySQL-t azonban nem tudom működésre bírni, első alkalommal elindítva a szolgáltatást (/etc/rc.d/mysqld start) ezt a hibaüzenetet kapom:

Installing MySQL system tables...
ERROR: 1062  Duplicate entry 'localhost-' for key 1
080116  8:53:49 [ERROR] Aborting

080116  8:53:49 [Note] /usr/sbin/mysqld: Shutdown complete

Installation of system tables failed!

Ellenőriztem, hogy elindul-e egyáltalán: a feladatkezelőben (Htop) látható, a

pgrep mysql

parancsra kiírja a folyamat(ok) azonosítószámát, ezekután a biztonság kedvéért újraindítottam (/etc/rc.d/mysqld restart), ekkor már gond nélkül elindult, hibaüzenetek nélkül.

Még sohasem telepítettem ezelőtt MySQL-t és teljesen kezdő vagyok, de a leírásokból az derült ki, hogy ezután egyszerűen

mysql -u root

parancssal be tudok jelentkezni MySQL szerverre, vagy meg tudom adni a root@localhost felhasználó jelszavát a

mysqladmin -u root password JELSZÓ

paranccsal.

Azonban:
1. mysql -u root -p

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

2. mysqladmin -u root password JELSZÓ

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'

Így próbáltam megoldani a problémát:

1. Root felvétele a mysql csoportba
Mivel a telepítő korábban létrehozott egy 'mysql' nevű csoportot és egy 'mysql' nevű felhasználót megpróbáltam 'mysql' felhasználóval belépni, de nem sikerült, felvettem a 'root' felhasználót a 'mysql' csoportba (

usermod -aG mysql root

), a 'mysql' felhasználót a 'mysql' csoportba, ezek után sem sikerült belépni.

2. /etc/my.cnf, /etc/hosts, /etc/hosts.allow /rc.conf szerkesztése. Hálózati beállítások
A /etc/my.cnf fájlhoz hozzá adtam a skip-innodb sort, a [mysqld] szekcióban.
A /etc/hosts-ban beállítottam a localhost-ot (127.0.0.1 localhost.localdomain localhost), saját hostnévvel is megpróbálkoztam (bár nem nagyon vagyok vele tisztában ezeknek mi pontos szerepe)
A /etc/host.allow-ban engedélyeztem a mysqld-t (mysqld : ALL : ALLOW)
/etc/rc.conf fájlba mysqld daemon-ként való felvétele, hogy bootoláskor induljon.
/etc/rc.conf-ban a dhcdbd és networkmanager daemon-ok helyett visszaírtam a gyári network daemon-t, hátha ez a probléma.
Ezek után sem sikerült belépni.

4. SAFE MODE/Recover MySQL root password
Találtam egy leírást arról, hogyan lehet visszaállítani a root jelszavunkat ha elvesztettük. Így indítottam a MySQL szervert:

/usr/bin/mysqld_safe --user=root --pid-file=/var/run/mysqld.pid --skip-grant-tables &

Majd:

mysql -u root mysql

. Végre sikerült belépni a szerverre, és másodjára úgy tűnik jelszót is sikerül beállítani.

set password for 'root'@'localhost' = PASSWORD('JELSZÓ');

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

update user set password=password('JELSZÓ') where User='root' and host='localhost';

Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0 

flush privileges;

Query OK, 0 rows affected (0.00 sec)

Újraindítom a MySQL-t (/etc/rc.d/mysqld restart), megpróbálok belépni (mysql -u root -p) és

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Összegzés: Tudom, hogy kezdő vagyok, de a leírások alapján ennek nem kellene ennyire nehéznek lennie*, így arra gyanakszom, hogy ez valami Arch Linux specifikus probléma lehet, vagy a rendszerrel, vagy a mysql csomaggal kapcsolatban, ezt az Arch Linux fórumán olvasott dolgok is megerősítik (http://bbs.archlinux.org/viewtopic.php?id=42309). A bug jelentések (http://bugs.archlinux.org/) között viszont nem találtam semmit, ami erre vonatkozna, korábban már fordultak elő hasonló dolgok, legutóbb pl. a /tmp mappa jogosultság beállításával voltak gondok, emiatt telepítést követően nem lehetett userrel bejelentkezni (én meg a EXT2 /boot JFS root ReiserFS /home XFS /home/media fájlrendszer összetétel okozta gondra gyanakodtam :)), de azokat 1-2 óra alatt sikerült megoldani. Mindenesetre a mysql-re szükségem van, Wordpress-t akarok beüzemelni, és gyakorolni, tesztelni, meg ismerkedni az SQL-el. Ettől függetlenül az Arch Linux is marad, a másik partíción van Ubuntu Linux-om, de az Arch jobb tanulni, ismerkedni (meg sokkal gyorsabb, +i686, +csomagépítő rendszer/közösség)

*A MySQL konfigurálásával kapcsolatos oldalakat nézve, pl. http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch34_:_… vagy http://www.gentoo.org/doc/en/mysql-howto.xml

Ha valakinek van valami ötlete, vagy javaslata azt szívesen veszem.

Update: SIKER. A hostname átírása, majd a mysql újratelepítése segített a problémán, ezután a mysql_install_db rendben lefutott és a mysql szerver elindul, be is lehet lépni.

Kösz mindenkinek a javaslatokat. Nem tudom, hogy ez most egy bug, vagy valami feature, hogy át kell írni a hostname-et, de mindenesetre át kell.

/etc/rc.conf
HOSTNAME="myhost"

/etc/host
#ip-address hostname.domain.org hostname
127.0.0.1 localhost.localdomain localhost myhost

Hozzászólások

Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0

t

Ebben lehet valami, jó ötlet*, megpróbálom insert-el update helyett, amint kibogozom a dolgot :)

*valószínűleg nincs benne az a sor, mert a telepítés után lefutatott mysql_install_db (/etc/rc.d/mysqld start indítja el) hibaüzenettel ért véget, tehát nem hozta létre, és többek között talán ezért nem tudok bejelentkezni.

"Újraindítom a MySQL-t (/etc/rc.d/mysqld restart), megpróbálok belépni (mysql -u root -p) és ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)"

"(using password: YES)"

Soha nem tudom meg hogy értelmezzem az english-t,
de fenti esetben beléphetsz jelszó nélkül.

"(using password: NO)"

Ekkor kell jelszó. :)

Erre én is gondoltam, csakhogy az Arch Linux Wiki (http://wiki.archlinux.org/index.php/MySQL) szerint

/etc/rc.d/mysqld start
This will take care of the basic configuration as adding system users and creating log files. This script also prints out how to configure MySQL after the first start.

Tehát ez egyben (első alkalommal) be is állítja a szükséges dolgokat (hasonlóan a Gentoo emerge --config =dev-db/mysql-[version] megoldásához).

Csakhogy ekkor kapom ezt a hibaüzenetet: Installing MySQL system tables...
ERROR: 1062 Duplicate entry 'localhost-' for key 1
080116 8:53:49 [ERROR] Aborting

Majd elindul a daemon. Ha újraindítom többet nem kapom a hibaüzenetet, viszont ha újrainstallálom (Pacman -Rsn-el törlöm, majd installálom) a mysql package-t, első alkalommal megint kiírja.

Jelszó nélkül nem enged be.

A /var/lib/mysql törlése és a mysql_install_db futtatása a mysql telepítését követő első indulásnak megfelelő dolgot eredményezi.

Installing MySQL system tables...
ERROR: 1062  Duplicate entry 'localhost-' for key 1
080210 22:36:35 [ERROR] Aborting

080210 22:36:35 [Note] /usr/sbin/mysqld: Shutdown complete

Installation of system tables failed!

Examine the logs in /var/lib/mysql for more information.
You can try to start the mysqld daemon with:
/usr/sbin/mysqld --skip-grant &
and use the command line tool
/usr/bin/mysql to connect to the mysql
database and look at the grant tables:

shell> /usr/bin/mysql -u root mysql
mysql> show tables

Try 'mysqld --help' if you have problems with paths. Using --log
gives you a log in /var/lib/mysql that may be helpful.

A 'vanilla' dologról már halottam (a vanilla kernel ha jól sejtem valami custom kernel, vagy hasonló), de összeségében nem nagyon értem mire gondolsz. Talán arra, hogy az Arch Linux-os mysql_install_db (ha van ilyen) nem jó, használjak helyette másik mysql_install_db-ot?

Hmmm szerintem itt több dolgot is elkevertél. A doksi ami alapján dolgoztál nekem hiányosnak tűnik.

Bár Archlinuxot nem használok, de a legtöbb helyen a mysql csomag felrakása és cnf fájl beállítása után a mysql_install_db parancs következik, aminek a kihagyása elég izgalmas dolgokat szokott eredményezni. Ha mégis volt ilyen lépés, akkor bocs, ha nem, akkor szerintem töröld az egész mysql dolgot és rakd fel újra.

A másik lehetőség itt:
set password for 'root'@'localhost' = PASSWORD('JELSZÓ');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
Ez azért lehet, mert az /etc/rc.d/mysqld -ban vagy a my.cnf-ban szerepel ez a skip-grant-tables opció. Ha jól értelmezem, ez egy elég hasznos dolog, ha már megvan az adatbázis, tábla és jogosultság kiosztás, de addig viszont megakadályoz minden hasonló dologban. Ennek a kikapcsolásával még lehet kísérletezni.

Töröld a /var/lib/mysql könyvtár tartalmát, nézd meg hogy ez a könyvtár a mysql:mysql tulajdonában legyen. Ezután:


su - mysql
mysql_install_db

Jegyezd meg hogy miket ír ki a konzolra

rootként másik terminálon indítsd el a mysql-t és kövesd a konzolon leírt parancsokat. Ez egy password beállítás lesz egyébként. Ezután már be tudsz lépni rootként jelszóval a mysql-be.

--
A nyúl egy igazi jellem. Ott ül a fűben, de akkor sem szívja!

A /var/lib/mysql tartalmának törlése és a megfelelő jogosultságok beállítása után (chown, chgrp), mysql-el belépve (su - mysql), majd elindítva a mysql_install_db-t pont ugyanazt kapom, mint root-al korábban, mikor még a root tulajdona volt a /var/lib/mysql.

Most ezen a hibaüzeneten próbálok elindulni:

Duplicate entry 'localhost-' for key 1

. SPétör-nek hasonló problémája volt UHU Linux 2.1-en (http://spuhulinux.blog.hu/2008/01/21/az_elso_mysql_server_problem).

"Valamiért a mysql-server program úgy érzékeli, hogy két localhost bejegyzés van(?)
A megoldás az lett, hogy nevet kellett adnom a gépemnek. Ezután szépen felment a csomag."

Arch Linux-on nincs Vezérlőpult, mint Uhu Linux-on, úgyhogy ezt valahogy másképp kell megoldanom, az /etc/rc.conf-ba és a /etc/hosts-ba is szerepel a localhost, megpróbálom ezeket átírni.

SIKER. A hostname átírása, majd a mysql újratelepítése segített a problémán, ezután a mysql_install_db rendben lefutott és a mysql szerver elindul, be is lehet lépni.

Kösz mindenkinek a javaslatokat. Nem tudom, hogy ez most egy bug, vagy valami feature, hogy át kell írni a hostname-et, de mindenesetre át kell.

/etc/rc.conf
HOSTNAME="myhost"

/etc/host
#ip-address hostname.domain.org hostname
127.0.0.1 localhost.localdomain localhost myhost

Mostmár csak néhány hasonlóan idegesítő dolgot kell felszámolnom (egy-egy bugszerűség a Conky-ban és az Openarena-ban), meg most érkezett Core-ba a 2.6.24.x-es kernel, ami elég nagy előrelépés a 2.6.22.x-hez képest, legalábbis a mysql újratelepítése alatt nagyon ajánlotta, hogy tegyem fel (meg vele együtt minden mást, pl. Nvidia).