মাইএসকিউএল (মারিয়াডিবি) মূল পাসওয়ার্ডটি পুনরায় সেট করতে পারে না


35

আজ, আমি পিএমএতে একটি ডাটাবেস তৈরি করতে চেয়েছিলাম। এটি বলেছিল: "মাইএসকিউএল সার্ভারে লগ ইন করতে পারে না"। আমি টার্মিনালের মাধ্যমে চেষ্টা করেছি, একই সমস্যা এবং এটি কারণ আমার পাসওয়ার্ডটি ভুল। এবং আমি বুঝতে পারি না কেন।

আমি রুট পাসওয়ার্ডটি পুনরায় সেট করার জন্য স্বাভাবিক পদ্ধতিটি চেষ্টা করেছি (অনুদানের টেবিলগুলি মাউন্ট এবং পাসর্ডটি পুনরায় সেট করুন) তবে মনে হয় এটি কার্যকর হয় না।

ওটা দেখ:

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'

উত্তর:


56

আমি এমন একটি সমাধান খুঁজে পেয়েছি যা সমস্যাটি নিজের মতোই অদ্ভুত।

মাইএসকিউএল / মারিয়াডিবি পুনরায় বুট করুন --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;

তারপরে, মাইএসকিউএলটিকে স্বাভাবিক মোডে পুনঃসূচনা করুন এবং আপনার রুট অ্যাকাউন্টে সংযোগ করতে সক্ষম হওয়া উচিত।

এটি অগত্যা ইউনিক্স সকেটের মাধ্যমে সংযোগটি অক্ষম করবে না। আমার মাইএসকিউএল ভিএ মেরামত করার পরে, পিএমএতে, আমি দেখতে পাচ্ছি যে ইউনিক্স সকেটের মাধ্যমে সংযোগটি প্রতিষ্ঠিত হয়েছে।

সম্পাদনা করুন , কয়েক মাস পরে: আমি এখন এই সমস্যাটি ঘন ঘন ফিরে আসতে অভ্যস্ত, আমি মারিয়াডিবি-র প্রতিটি আপডেটে (বা এরকম কিছু) মনে করি। সুতরাং আমি প্রোবটির আরও ভাল উপলব্ধি পেয়েছি; একটি UNIX_SOCKET প্লাগইন রয়েছে যা আপনাকে একটি পাসওয়ার্ড তৈরি না করেই একটি মারিয়াডিবি অ্যাকাউন্টে লগ ইন করতে দেয়, কারণ এটি কোনও পাসওয়ার্ড প্রবেশ না করে শেলের শংসাপত্রগুলি আপনাকে বিশ্বাস করতে ব্যবহার করে। আসলে, এই প্লাগইনটি একটি প্রমাণীকরণ প্লাগইন এবং এসকিউএল সার্ভারের সাথে যোগাযোগের কোনও পদ্ধতি নয়। সুতরাং আপনি যদি লগ-ইন পদ্ধতি হিসাবে ইউনিক্স সকেটটি ব্যবহার না করেন তবে আপনি নিরাপদে এটি অক্ষম করতে পারেন। কেবলমাত্র আমি ব্যাখ্যা করতে পারি না কেন UNIX_SOCKET প্লাগইনটি আমার পক্ষ থেকে কোনও ব্যবস্থা ছাড়াই নিয়মিতভাবে ডাটাবেসের প্রতিটি অ্যাকাউন্টে সেট করা থাকে।

এটির দুর্দান্ত পার্শ্ব প্রতিক্রিয়া রয়েছে যে এটি হয়ে গেলে আপনি মারিয়াডিবি পুনরায় আরম্ভ না করেই এসকিউএল সার্ভারে লগইন করতে পারেন --skip-grant-tables: কেবল সিস্টেমের রুট অ্যাকাউন্টে লগ ইন করুন, তারপরে mysql -u rootপাসওয়ার্ড ছাড়াই কেবল সংযোগ করুন , তারপরে প্লাগইন ক্ষেত্রটি পুনরায় সেট করুন the এটি উপরে বর্ণিত হয়।

সম্পাদনা 2: নিশ্চিত, এটি উবুন্টুতে প্রতিটি মারিয়াডিবি আপগ্রেডে ঘটে।


1
এটি উবুন্টু ১.0.০৪ (কমপক্ষে) এ রক্ষণাবেক্ষণ ক্রোন কাজটি বিরতি দেয় কারণ সেই স্ক্রিপ্টটি সকেট প্লাগ-ইন ব্যবহার করে কোনও পাসওয়ার্ড ছাড়াই লগ ইন করার প্রত্যাশা করে। বিস্তারিত জানার জন্য superuser.com/questions/957708/… দেখুন ।
কোলান

ঠিক আছে, আকর্ষণীয়, তবে এটি আর ঘটবে না (আমার উত্তরাধিকারের পাসওয়ার্ড সেটআপ এখন এলোমেলোভাবে ভাঙবে না)। সম্ভবত এখন ইউনিক্স সকেট প্লাগইনটি কেবলমাত্র রুট ব্যবহারকারীদের উপর সেট করা আছে? এখনই তা পরীক্ষা করতে পারছি না। তবে ওএস আমার পক্ষে কোন প্রমাণীকরণের সেটআপ ব্যবহার করবেন তা সিদ্ধান্ত নেওয়ার ধারণাটি আমি পছন্দ করি না।
মরগান টুভেরি কুইলিং

এই সমস্যাটি সফল হয়, এটি ডেবিয়ান 9 এ ঘটেছিল, আমি মারিয়াডিবি ইনস্টল করার সময় কোনও রুট পাসওয়ার্ড জিজ্ঞাসা করা হয়নি এবং আমি এটি পুনরায় সেট করতেও পারি না। আমি আশা করি একটি আপগ্রেডের পরে এটি আর হবে না। এই জাতীয় সমস্যা এড়াতে আমাদের কি মারিয়াডিবিকে মাইএসকিউএল প্রতিস্থাপন করা উচিত?
ব্যাপটেক্স

এটি এখনও ঘটছে তা নিশ্চিত নয়, এটি এখনই ঠিক করা হয়েছে (যদি কেউ জানে তবে পোস্টটি সম্পাদনা করতে পারি)। সম্ভবত এটি কেবলমাত্র ইনস্টলেশন এ ঘটে যা একটি ভাল ডিফল্ট সেটআপ হবে।
মরগান টুভেরি কুইলিং

1
আমি শুধু লক্ষ্য করেছি যে, যদি আমরা মূল ব্যবহারকারীর জন্য UNIX সকেট প্লাগইন ব্যবহার করবেন না, এটা সর্বশেষ ডেবিয়ান উপর 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

মাইএসকিএল পাসওয়ার্ড নয়, প্লাগইন ব্যবহার করে রুটকে প্রমাণীকরণের চেষ্টা করে। রুটের জন্য আপনাকে প্লাগইন ব্যবহার অক্ষম করতে হবে।

shell$ sudo mysql -u root

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

2
আমি উত্তর হিসাবে ঠিক তাই পোস্ট।
মরগান টোভেরি কুইলিং

1
এটি আপনার আপডেটের সাথে সামান্য আরও সংক্ষিপ্ত রোলআপ।
পোনি

আমি এমনকি মাইএসকিএল শেলও পেতে পারি না, সুতরাং এটি আমার ক্ষেত্রে কাজ করবে না, যদিও আমি Could not open mysql.plugin table.ত্রুটি লগতে দেখছি ।
ডেভ এভারিট

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 --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

আমি ঠিক পেয়েছি $ mysqld_safe --skip-grant-tables 190818 14:13:35 mysqld_safe Logging to '/usr/local/var/mylaptop.local.err'. 190818 14:13:35 mysqld_safe Starting mysqld daemon with databases from /usr/local/varতবে কেবল ব্যাশ প্রম্পটে ফিরে এসেছি।
ডেভ এভারিট

0

ডিফল্টরূপে মেরিয়্যাডবি পাসওয়ার্ড সেট করতে "ইউনিক্স_সকেট" প্রমাণীকরণ প্লাগইন ব্যবহার করে এটি "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';
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.