Saya baru saja menginstal salinan baru Ubuntu 10.04.2 LTS pada mesin baru. Saya login ke MySQL sebagai root:
david@server1:~$ mysql -u root -p123
Saya membuat pengguna baru bernama repl. Saya membiarkan host kosong, sehingga pengguna baru dapat memiliki akses dari lokasi mana pun.
mysql> CREATE USER 'repl' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)
Saya memeriksa tabel pengguna untuk memverifikasi bahwa penggantian pengguna baru dibuat dengan benar.
mysql> select host, user, password from mysql.user;
+-----------+------------------+-------------------------------------------+
| host | user | password |
+-----------+------------------+-------------------------------------------+
| localhost | root | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| server1 | root | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| 127.0.0.1 | root | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| ::1 | root | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| localhost | | |
| server1 | | |
| localhost | debian-sys-maint | *27F00A6BAAE5070BCEF92DF91805028725C30188 |
| % | repl | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-----------+------------------+-------------------------------------------+
8 rows in set (0.00 sec)
Saya kemudian keluar, mencoba masuk sebagai balasan pengguna, tetapi akses ditolak.
david@server1:~$ mysql -u repl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ mysql -urepl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$
Mengapa akses ditolak?
Jawaban:
Alasan Anda tidak bisa masuk karena
repl@'%'
hubungannya dengan protokol otentikasi pengguna MySQL . Itu tidak mencakup pola pengguna seperti yang orang percaya.Lihatlah bagaimana Anda mencoba masuk
Karena Anda tidak menentukan alamat IP, mysql menganggap host adalah localhost dan mencoba untuk terhubung melalui file socket. Inilah sebabnya mengapa pesan kesalahan mengatakan
Access denied for user 'repl'@'localhost' (using password: YES)
.Orang akan berpikir
repl@'%'
akan memungkinkanrepl@localhost
. Menurut cara MySQL melakukan otentikasi pengguna , itu tidak akan pernah terjadi. Akankah ini membantu?Percaya atau tidak, mysql akan berusaha
repl@localhost
lagi. Mengapa? Klien mysql melihat127.0.0.1
dan mencoba file socket lagi.Coba seperti ini:
Ini akan memaksa klien mysql untuk menggunakan protokol TCP / IP secara eksplisit. Maka tidak akan punya pilihan selain pengguna
repl@'%'
.sumber
Anda harus mengeluarkan untuk localhost khusus untuk itu.
Dan coba sambungkan.
sumber
Masalahnya adalah kedua akun ini, ditambahkan secara default.
http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html
Nama pengguna kosong adalah wildcard, jadi tidak peduli apa akun yang Anda gunakan, itu cocok dengan pengguna ini jika MySQL berpikir Anda terhubung dari localhost atau nama server lokal Anda (server1 dalam hal ini) ... karena mereka tidak memiliki kata sandi, apa pun kata sandi yang Anda coba salah. Otentikasi pengguna hanya mencoba kecocokan pertama, sehingga pengguna yang Anda buat tidak pernah diperhatikan ketika host Anda adalah host lokal (atau nama server Anda).
Hapus keduanya dari menu
mysql
.user
meja laluFLUSH PRIVILEGES;
.Atau, skrip mysql_secure_installation dapat melakukan ini untuk Anda, meskipun saya cenderung lebih suka melakukan hal-hal secara manual.
http://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html
sumber
Pastikan bahwa semua bidang pada konektor diatur dengan detail yang benar
host = "localhost", user = "CorrectUser", passwd = "coRrectPasswd", database = "CorreCTDB"
Periksa juga kesalahan huruf besar dan kecil - 1045 bukan kesalahan Sintaks, tetapi ada hubungannya dengan detail yang salah pada konektor
sumber
Basis data mungkin belum dikonfigurasikan namun cukup mengeluarkan panggilan tanpa-arg:
Jika Mysql harus menetapkan kata sandi root, Anda dapat menggunakan
sumber
Ini bisa menjadi masalah dengan korupsi database mysql Anda. Tabel di dalam database mysql seperti tabel pengguna bisa rusak dan dapat menyebabkan dikeluarkan.
Silakan periksa
myisamchk / var / lib / mysql / mysql / * .MYI
Biasanya saat memeriksa atau memperbaiki tabel myisam kami ingin mengambil mysql dulu. Jika masalah ini masih belum selesai, silakan coba ini juga.
Jika mereka rusak maka Anda dapat memperbaikinya menggunakan
myisamchk --silent --force --fast /path/table-name.MYI
Terima kasih,
Masood
sumber