MySQL (MariaDB) रूट पासवर्ड को रीसेट नहीं किया जा सकता


35

आज, मैं पीएमए में एक डेटाबेस बनाना चाहता था। इसने कहा: "MySQL सर्वर में लॉग इन नहीं किया जा सकता है"। मैंने एक टर्मिनल, उसी समस्या के माध्यम से कोशिश की, और यह इसलिए है क्योंकि मेरा पासवर्ड गलत है। और मैं क्यों नहीं समझ सकता।

मैंने रूट पासवर्ड रीसेट करने के लिए सामान्य तरीका आज़माया (ग्रांट बढ़ते हुए टेबल को छोड़ दें और पास को रीसेट करें) लेकिन ऐसा लगता है कि यह काम नहीं करता है।

देखना है कि:

morgan@rakija:~$ sudo mysqld_safe --skip-grant-tables &
[1] 14016
morgan@rakija:~$ 150802 19:07:25 mysqld_safe Can't log to error log and syslog at the same time.  Remove all --log-error configuration options for --syslog to take effect.
150802 19:07:25 mysqld_safe Logging to '/var/log/mysql/error.log'.
150802 19:07:25 mysqld_safe A mysqld process already exists

[1]+  Terminé 1               sudo mysqld_safe --skip-grant-tables
morgan@rakija:~$ mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.0.20-MariaDB-0ubuntu0.15.04.1 (Ubuntu)

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use mysql;
Database changed
MariaDB [mysql]> update user set password=PASSWORD("newPass") where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> exit
Bye
morgan@rakija:~$ sudo service mysql restart
morgan@rakija:~$ mysql -uroot -pnewPass
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

जवाबों:


54

मैंने एक ऐसा उपाय खोज लिया है जो समस्या के समान ही विचित्र है।

Myboot / मारियाडीबी का उपयोग करके रिबूट --skip-grant-tablesकरें (वेब ​​पर ट्यूटोरियल की खोज करें)। (आवश्यक नहीं, पोस्ट के अंत में मेरे संपादन पढ़ें)

को देखो pluginमें क्षेत्र mysql.userतालिका:

MariaDB [mysql]> SELECT user, plugin FROM user;
+------+-------------+
| user | plugin      |
+------+-------------+
| root | unix_socket |
| root | unix_socket |
| root | unix_socket |
| root | unix_socket |
+------+-------------+

मुझे प्रत्येक प्रविष्टि के प्लगइन क्षेत्र को एक रिक्त स्ट्रिंग में रीसेट करना था।

UPDATE user SET plugin="";   // without WHERE clause

इसके अलावा, सुनिश्चित करें कि एक पासवर्ड परिभाषित है, क्योंकि कभी-कभी ऐसा लगता है कि मिटा दिया गया है ( user, passwordखेतों पर चयन करें )। यदि नहीं, तो इसे अपडेट करें:

UPDATE user SET password=PASSWORD("my_password") WHERE user="root";

विशेषाधिकार पैरामीटर को स्पष्ट रूप से सहेजने की आवश्यकता है:

FLUSH PRIVILEGES;

फिर, MySQL को सामान्य मोड में पुनरारंभ करें और आपको रूट खाते से कनेक्ट करने में सक्षम होना चाहिए।

यह आवश्यक रूप से यूनिक्स सॉकेट के माध्यम से कनेक्शन को अक्षम नहीं करेगा। मेरे MySQL va की मरम्मत के बाद, PMA में, मैं देख सकता हूं कि कनेक्शन एक यूनिक्स सॉकेट के माध्यम से स्थापित है।

EDIT , कुछ महीनों बाद: मुझे अब इस समस्या का बार-बार सामना करने की आदत है, मुझे लगता है कि MariaDB के प्रत्येक अद्यतन पर (या ऐसा कुछ)। तो मुझे प्रोबेम का बेहतर समझ मिल गया है; एक UNIX_SOCKET प्लगइन है जो आपको एक पासवर्ड बनाने के बिना एक MariaDB खाते में लॉग इन कर सकता है, क्योंकि यह किसी भी पासवर्ड को दर्ज किए बिना, आप पर भरोसा करने के लिए शेल के क्रेडेंशियल्स का उपयोग करता है। वास्तव में, यह प्लगइन एक प्रमाणीकरण प्लगइन है न कि SQL सर्वर के साथ संचार का एक तरीका। यदि आप लॉगिंग-इन विधि के रूप में यूनिक्स सॉकेट का उपयोग नहीं करते हैं तो आप इसे सुरक्षित रूप से अक्षम कर सकते हैं। केवल एक चीज जो मैं नहीं समझा सकता हूं, वह यह है कि UNIX_SOCKET प्लगइन नियमित रूप से डेटाबेस के प्रत्येक खाते पर, मेरी ओर से कोई कार्रवाई किए बिना सेट किया गया है।

इसका अच्छा साइड इफेक्ट यह है कि, जब ऐसा होता है, तो आप SQL सर्वर को मारियाडीबी को पुनरारंभ किए बिना लॉगिन कर सकते हैं --skip-grant-tables: सिस्टम के रूट खाते में लॉग-इन करें, फिर mysql -u rootबिना पासवर्ड के साथ कनेक्ट करें , फिर प्लगइन फील्ड रीसेट करें जिस तरह से यह ऊपर बताया गया है।

संपादित 2: पुष्टि की, यह उबंटू के प्रत्येक मारियाडीबी अपग्रेड पर होता है।


1
यह Ubuntu 16.04 (कम से कम) पर रखरखाव क्रोन नौकरी को तोड़ता है क्योंकि वह स्क्रिप्ट सॉकेट प्लग-इन का उपयोग करके पासवर्ड के बिना लॉग इन करने की उम्मीद कर रही है। विवरण के लिए देखें superuser.com/questions/957708/…
२१:२४ पर कॉलन

ठीक है, दिलचस्प है, लेकिन यह अब नहीं होता है (मेरी विरासत पासवर्ड सेटअप अब बेतरतीब ढंग से नहीं टूटता है)। शायद यूनिक्स सॉकेट प्लगइन रूट उपयोगकर्ता पर ही सेट किया गया है, अब? अभी 'की जाँच नहीं कर सका। लेकिन मुझे यह विचार पसंद नहीं है कि ओएस मेरे लिए क्या प्रमाणीकरण सेटअप का उपयोग करने का निर्णय लेता है।
मॉर्गन टोवरे क्विंग

यह समस्या बेकार है, यह डेबियन 9 पर हुआ, कोई रूट पासवर्ड नहीं पूछा गया था जब मैंने मारबीडीबी स्थापित किया और मैं इसे रीसेट भी नहीं कर सका। मुझे उम्मीद है कि अपग्रेड के बाद यह दोबारा नहीं होगा। क्या हमें ऐसी समस्याओं से बचने के लिए MyDB के साथ MariaDB की जगह लेनी चाहिए?
बपतिस्मा

सुनिश्चित नहीं है कि यह अभी भी होता है, यह अब तय हो गया है (यदि कोई जानता है तो मैं पोस्ट को संपादित कर सकता हूं)। शायद यह केवल इंस्टॉलेशन पर होता है, जो एक अच्छा डिफ़ॉल्ट सेटअप होगा।
मॉर्गन टोवरे क्विंग

1
मैंने अभी देखा कि अगर हम रूट उपयोक्ता के लिए यूनिक्स सॉकेट प्लगइन का उपयोग नहीं करते हैं, तो यह नवीनतम डेबियन पर phpmyadmin पैकेज को स्थापित करने में विफल होगा ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO):। इसलिए सबसे अच्छा उपाय यह है कि डिफॉल्ट यूनिक्स सॉकेट ऑथेंटिकेशन को कमांड के साथ प्रयोग करते रहें sudo mysql -u root, जो मुझे लगता है कि यह अधिक सुरक्षित और प्रदर्शनकारी भी है।
बपतिस्मा

5

इस जवाब से, http://ubuntuforums.org/showthread.php?t=2275033&p=13272227#post13272227

Mysql रूट को प्लगइन का उपयोग करके प्रमाणित करने की कोशिश करता है, पासवर्ड नहीं। आपको रूट के लिए प्लगइन उपयोग को अक्षम करना होगा।

shell$ sudo mysql -u root

[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q

2
ठीक यही मैंने एक उत्तर के रूप में पोस्ट किया है।
मॉर्गन टोवरे क्विंग

यह आपके अपडेट के साथ थोड़ा अधिक संक्षिप्त रोलअप है।
टट्टू

0

पहले बताए अनुसार कनेक्ट करें:

mysqld_safe --skip-grant-tables

लॉग फ़ाइल दिखाई जाएगी:

160518 23:21:01 mysqld_safe Logging to '/usr/local/mysql/data/ab123456.domain.com.err'.
160518 23:21:01 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

राइट सॉकेट के लिए खोज लॉग सूचीबद्ध (इस मामले में: /usr/local/mysql/data/ab123456.domain.com.err):

cat /usr/local/mysql/data/ab123456.domain.com.err | grep "socket: "
Version: '5.5.49-MariaDB'  socket: '/tmp/mysql.sock'  port: 3306  MariaDB Server

और mysql कनेक्शन में इसका उपयोग करें:

mysql --socket /tmp/mysql.sock -u root
root@ab123456:~# /usr/local/mysql/bin/mysql --socket /tmp/mysql.sock -u root

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.49-MariaDB MariaDB Server

0

डिफ़ॉल्ट रूप से marriadb पासवर्ड सेट करने के लिए "unix_socket" प्रमाणीकरण प्लगइन का उपयोग करता है यह "mysql_native_password" होना चाहिए

डेटाबेस स्विच करें

use mydatabase;

पहले चुड़ैल प्लगइन सेट है .. देखें

SELECT user, plugin FROM user;

इसे "mysql_native_password" पर सेट करें

UPDATE user SET plugin="mysql_native_password"; 

नया पासवर्ड सेट करें ...

update user set authentication_string=password('My@Password'), plugin='mysql_native_password' where user='root';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.