Смяна на паролата или възстановяване на 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) :
здравй точно това търсех но съм пълен индианец и незня къде да ги ваведа тези комади моля помгнете аз имам роот пароло на я забравих ;(
Обратно към списъка със статиите
Тази страница последно е променяна на 2025-04-27 01:44:18