Смяна на паролата или възстановяване на root потребителя в mysql

Тук ще дадем съвети за въпросите "Изтрих си root-а. Какво да правя?" и "Забравих си паролата на root. Помощ!".
Предполагам на всеки се е случвало да изгуби паролата за root акаунта. В такъв случай може да архивирате директорията с данни, да преинсталирате mysql и да прехвърлите обратно всички бази без mysql. Това е доста трудоемък начин така, че ето няколко алтернативи.

Първи начин - спиране на проверката за привилегии

Има един лесен начин, като се спре системата за привилегии на mysql. В такъв случай обаче всеки потребител може да изпълнява всякакви заявки, което не е толкова добре. Затова ако използвате този метод трябва да ограничите mysql да не се използва от друг. Например може да се филтрира порта от firewall-а или да се спре мрежовата поддръжка със --skip-networking, и да се работи само от конзолния клиент. Дори в този случай трябва да сте сигурни, че само вие може да го ползвате от локалната машина. Ето как да стане това:

1. Спиране на сървъра (ако е пуснат)
    Под Windows това може да стане с Task manager или през секцията Services на Control Panel (разбира се ако е стартиран като услуга).
    Под Linux може да се ползва командата kill, но задължително без опцията -9, която може да причини загуба на данни. Ползвайте ps afx | grep mysqld, за да откриете pid на сървъра

2. Стартиране на сървъра с опция за спиране на проверката за привилегии
    Под Windows командата е
    c:\mysql_dir\bin\mysqld-nt.exe --skip-grant-tables
    където c:\mysql_dir\ е директорията на инсталацията на сървъра.
    Под Linux трябва да ползвате
    /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --user=root --skip-networking

3. Свързваме се към сървъра като съществуващ потребител (root или друг в случай, че root е изтрит).
    Това става като ползваме конзолния клиент:
     c:\mysql_dir\bin\mysql.exe -u user
     или
     /usr/local/mysql/bin/mysql -u user

4. Пускаме заявка за промяна на парола:
        UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
    или създаване на нов потребител:
        CREATE USER root IDENTIFIED BY PASSWORD 'newpwd';
        GRANT ALL PRIVILEGES ON * . * TO 'root'@ 'localhost' IDENTIFIED BY 'newpwd' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;


5. Пускаме проверката за привилегии:
        FLUSH PRIVILEGES;

6. Добре е да рестартирате сървъра по нормалния начин, ако сте добавяли опцията --skip-networking

Втори начин - с файл с команди

Ако не може да си позволите да оставяте сървъра без контрол на привилегиите, има и друг начин.

1. Записваме необходимата команда от предишната т.4 в файл, например file.txt

2. Спираме сървъра

3. Стартираме сървъра с опцията --init-file
    Под Windows
    c:\mysql_dir\bin\mysqld-nt.exe --init-file=c:\file.txt
    Под Linux
    /usr/local/mysql/bin/mysqld_safe --init-file=/root/file.txt
   
По този начин се изпълняват командите в този файл при стартиране на сървъра.

Коментари:

ChickenDinner (04-06-2009 17:57) :
здравй точно това търсех но съм пълен индианец и незня къде да ги ваведа тези комади моля помгнете аз имам роот пароло на я забравих ;(

Обратно към списъка със статиите

Тази страница последно е променяна на 2024-04-24 20:48:13