[Megoldva] mysql root user

Sziasztok,

egy ismerősöm törölte az egyetlen olyan usert a mysql-ből, aminek minden adatbázishoz volt joga. Hogy tudnám ezt rendbe hozni?

Az alábbiakat csináltam:
- mysql leállítás
- mysqld_safe --skip-grant-tables&
- mysql -uroot
- CREATE USER 'adminuser'@'localhost' IDENTIFIED BY '***';

és ezt kapom, ami logikus is:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

De mást nagyon nem találtam erre a megoldásra. Mindenhol csak a jelszó resetet írták, új usert nem találtam.

Köszi előre is a segítséget.

Üdv:
B.

Hozzászólások

workaround:
sudo mv /var/lib/mysql/mysql /var/lib/mysql/mysql_old_mert_elbasztam
sudo dpkg-reconfigure mysql-server

Van ugye a mysql db ahol tárolva vannak a felhasználók meg még más adatok.

mysqldump -u root -p -v mysql > elbaszott_mysql_db.sql Lemented az egész mysql adatbázist.

Megcsinálod a köztes lépéseket.

mysql -u root -p mysql < elbaszott_tabla.sql Visszatöltöd az elbaszott adatbázist.

Szerintem így.

cat /var/mysql/debian.cnf

És itt van a debian-sys-maint user a passal együt.
aszem a rendszer beépítet rootja vagy mi, de legalábbis egy tartalék root hozzáférés.

"és ezt kapom, ami logikus is:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement"

És mi lenne, ha a rott@localhost user jelszavát beállítanád a megfelelő táblában, aztán elindítanád normálisan a mysql-t, belépnél root-ként és használnád normálisan?

update mysql.user set Password=PASSWORD('blabla') WHERE User='root';

vagy ha ezt törölted akkor beírnád kézzel

insert into `mysql`.`user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`) VALUES
('localhost', 'root', PASSWORD('blabla'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0);

Nekem ez valaha működött... azóta lehet, hogy változott valami és már nem fog menni.

  1. $ /etc/init.d/mysql stop
  2. $ /usr/bin/mysqld_safe --skip-grant-tables &
  3. $ mysql -h localhost
  4. > use mysql;
  5. > UPDATE user SET password = password('uj_jelszo') WHERE user = 'root' AND host = 'localhost';
  6. > quit;
  7. $ /etc/init.d/mysql restart

--
maszili

a valaszolok ugylatom hogy nem nagyon veszik eszre, hogy nem arrol van szo, hogy el lett felejtve a root user jelszava, hanem torolve lett az egyetlen root user.
ettol fuggetlenul persze mukodik, hogy --skip-grant-tables -szel inditva a mysql-t, letrehozunk egy uj root usert, de a CREATE USER vagy GRANT utasitasok ilyenkor nem mukodnek, viszont a mysql adatbazis user tablajat normal sql utasitasokkal (insert/udpate) tudjuk piszkalni, es egy restart utan mar mukodni is fog.

amugy errol van egy bugreport is:
http://bugs.mysql.com/bug.php?id=38513

itt latszik, hogy ha a belepes utan nyomsz egy FLUSH PRIVILEGES -et, akkor utana mukodik a GRANT is.
amugy ez azert van, mert ha --skip-grant-tables -szel inditod a mysql-t, akkor nem olvassa fel az auth tablakat, emiatt nem is mukodnek a jogosultsagokkal kapcsolatos utasitasok, de egy FLUSH PRIVILEGES-szel ujra lehet olvastatni ezeket a tablakat.

Tyrael

Köszi mindenkinek a helpet, megoldva a dolog, volt fájl szintű mentés, visszamásoltam a /var/lib/mysql/mysql-t

Balázs