TL; DR:ในการเข้าถึง mysql / mariadb เวอร์ชันที่ใหม่กว่าในฐานะผู้ใช้รูทหลังจากการติดตั้งใหม่คุณต้องอยู่ในรูทเชลล์ (เช่นsudo mysql -u root
หรือmysql -u root
ภายในเชลล์ที่เริ่มต้นโดยsu -
หรือsudo -i
ก่อน)
หลังจากทำการอัปเกรดเดียวกันบน Ubuntu ฉันก็มีปัญหาเดียวกัน
สิ่งที่แปลกคือ
sudo /usr/bin/mysql_secure_installation
จะยอมรับรหัสผ่านของฉันและอนุญาตให้ฉันตั้งค่า แต่ฉันไม่สามารถเข้าสู่ระบบroot
ผ่านmysql
ไคลเอนต์ได้
ฉันต้องเริ่ม mariadb ด้วย
sudo mysqld_safe --skip-grant-tables
เพื่อเข้าถึงในฐานะรูทในขณะที่ผู้ใช้รายอื่นทั้งหมดยังสามารถเข้าถึงได้ดี
ดูmysql.user
ตารางที่ฉันสังเกตเห็นสำหรับรูทplugin
คอลัมน์ถูกตั้งค่าเป็นunix_socket
ในขณะที่ผู้ใช้รายอื่นทั้งหมดตั้งค่าเป็น 'mysql_native_password' ดูหน้านี้อย่างรวดเร็ว: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/อธิบายว่า Unix Socket เปิดใช้งานการเข้าสู่ระบบโดยจับคู่uid
กระบวนการที่เรียกใช้ไคลเอ็นต์กับของผู้ใช้ในmysql.user
ตาราง. กล่าวอีกนัยหนึ่งในการเข้าถึง mariadb เนื่องจากroot
คุณต้องเข้าสู่ระบบในฐานะรูท
แน่นอนว่าการรีสตาร์ท mariadb daemon ของฉันด้วยการพิสูจน์ตัวตนที่จำเป็นฉันสามารถล็อกอินด้วยรูทด้วย
sudo mysql -u root -p
หรือ
sudo su -
mysql -u root -p
หลังจากทำสิ่งนี้แล้วฉันคิดเกี่ยวกับวิธีเข้าถึงโดยไม่ต้องทำ sudo ซึ่งเป็นเพียงเรื่องของการเรียกใช้คำค้นหา mysql เหล่านี้
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
(แทนที่<password>
ด้วยรหัสผ่านรูท mysql ที่คุณต้องการ) รหัสผ่านที่เปิดใช้งานนี้ล็อกอินสำหรับผู้ใช้รูท
หรือเรียกใช้แบบสอบถาม mysql:
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;
จะเปลี่ยนบัญชีรูทเพื่อใช้การเข้าสู่ระบบด้วยรหัสผ่านโดยไม่ต้องเปลี่ยนรหัสผ่าน แต่อาจทำให้คุณติดตั้ง mysql / mariadb โดยไม่มีรหัสผ่านรูท
หลังจากนั้นคุณต้องรีสตาร์ท mysql / mariadb:
sudo service mysql restart
และ voila ฉันสามารถเข้าถึงได้จากบัญชีส่วนตัวของฉันผ่านทาง mysql -u root -p
โปรดทราบว่าการทำเช่นนี้เป็นการลดความปลอดภัยสันนิษฐานว่านักพัฒนา MariaDB ได้เลือกที่จะใช้งานการเข้าถึงรูทเช่นนี้ด้วยเหตุผลที่ดี
เมื่อคิดแล้วฉันก็มีความสุขมากที่ได้sudo mysql -u root -p
เปลี่ยนกลับไปใช้แบบนั้น แต่ฉันคิดว่าฉันจะโพสต์วิธีแก้ปัญหาของฉันเพราะฉันไม่พบวิธีแก้ปัญหาที่อื่น