TL; DR: Để truy cập các phiên bản mới hơn của mysql / mariadb sau khi là người dùng root, sau khi cài đặt mới, bạn cần ở trong root shell (tức là sudo mysql -u root
hoặc mysql -u root
bên trong shell được bắt đầu bởi su -
hoặc sudo -i
trước)
Tôi vừa thực hiện nâng cấp tương tự, trên Ubuntu, tôi đã gặp vấn đề tương tự.
Điều kỳ lạ là
sudo /usr/bin/mysql_secure_installation
Sẽ chấp nhận mật khẩu của tôi, và cho phép tôi để thiết lập nó, nhưng tôi không thể đăng nhập như root
thông qua các mysql
khách hàng
Tôi phải bắt đầu mariadb với
sudo mysqld_safe --skip-grant-tables
để có được quyền truy cập với tư cách là người chủ, trong khi tất cả những người dùng khác vẫn có thể truy cập tốt.
Nhìn vào mysql.user
bảng, tôi nhận thấy plugin
cột được đặt thành ' unix_socket
trong khi tất cả người dùng khác, nó được đặt thành' mysql_native_password '. Xem nhanh trang này: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ giải thích rằng Unix Socket cho phép đăng nhập bằng cách khớp uid
quy trình đang chạy ứng dụng khách với quy trình của người dùng trong mysql.user
bàn. Nói cách khác, để truy cập mariadb, root
bạn phải đăng nhập với quyền root.
Chắc chắn đủ khởi động lại daemon mariadb của tôi với yêu cầu xác thực, tôi có thể đăng nhập với quyền root bằng
sudo mysql -u root -p
hoặc là
sudo su -
mysql -u root -p
Sau khi thực hiện điều này, tôi đã nghĩ về cách truy cập mà không cần phải thực hiện sudo, vấn đề chỉ là chạy các truy vấn mysql này
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
(thay thế <password>
bằng mật khẩu gốc mysql mong muốn của bạn). Điều này đã kích hoạt đăng nhập mật khẩu cho người dùng root.
Ngoài ra, chạy truy vấn mysql:
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;
Sẽ thay đổi tài khoản gốc để sử dụng đăng nhập bằng mật khẩu mà không cần thay đổi mật khẩu, nhưng điều này có thể khiến bạn cài đặt mysql / mariadb mà không có mật khẩu gốc trên đó.
Sau một trong hai cách này, bạn cần khởi động lại mysql / mariadb:
sudo service mysql restart
Và tôi đã có quyền truy cập từ tài khoản cá nhân của mình qua mysql -u root -p
XIN LƯU Ý RẰNG LÀM VIỆC NÀY GIẢM BẢO MẬT Có lẽ các nhà phát triển MariaDB đã chọn để quyền truy cập root hoạt động như thế này vì một lý do chính đáng.
Nghĩ về điều đó, tôi khá vui khi phải làm sudo mysql -u root -p
vậy nên tôi đang quay lại với điều đó, nhưng tôi nghĩ rằng tôi sẽ đăng giải pháp của mình vì tôi không thể tìm thấy giải pháp ở nơi khác.