Saya tidak dapat membuat koneksi sederhana ke server karena beberapa alasan. Saya menginstal database MySQL Community 8.0 terbaru bersama dengan Node.JS dengan pengaturan default.
Ini adalah kode node.js saya
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",
insecureAuth : true
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
Di bawah ini adalah kesalahan yang ditemukan di Command Prompt:
C:\Users\mysql-test>node app.js
C:\Users\mysql-test\node_modules\mysql\lib\protocol\Parse
r.js:80
throw err; // Rethrow non-MySQL errors
^
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Handshake.Sequence._packetToError (C:\Users\mysql-
test\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
at Handshake.ErrorPacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\sequences\Handshake.js:130:18)
at Protocol._parsePacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\Protocol.js:279:23)
at Parser.write (C:\Users\mysql-test\node_modules\mys
ql\lib\protocol\Parser.js:76:12)
at Protocol.write (C:\Users\mysql-test\node_modules\m
ysql\lib\protocol\Protocol.js:39:16)
at Socket.<anonymous> (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:103:28)
at Socket.emit (events.js:159:13)
at addChunk (_stream_readable.js:265:12)
at readableAddChunk (_stream_readable.js:252:11)
at Socket.Readable.push (_stream_readable.js:209:10)
--------------------
at Protocol._enqueue (C:\Users\mysql-test\node_module
s\mysql\lib\protocol\Protocol.js:145:48)
at Protocol.handshake (C:\Users\mysql-test\node_modul
es\mysql\lib\protocol\Protocol.js:52:23)
at Connection.connect (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:130:18)
at Object.<anonymous> (C:\Users\mysql-test\server.js:
11:5)
at Module._compile (module.js:660:30)
at Object.Module._extensions..js (module.js:671:10)
at Module.load (module.js:573:32)
at tryModuleLoad (module.js:513:12)
at Function.Module._load (module.js:505:3)
at Function.Module.runMain (module.js:701:10)
Saya telah membaca beberapa hal seperti: https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507
Tetapi saya masih tidak yakin bagaimana cara memperbaiki masalah saya. Bantuan apa pun akan dihargai: D
Jawaban:
Jalankan permintaan berikut di MYSQL Workbench
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
Di mana
root
sebagai pengguna Andalocalhost
sebagai URL danpassword
kata sandi AndaKemudian jalankan kueri ini untuk menyegarkan hak istimewa:
flush privileges;
Coba sambung menggunakan node setelah Anda melakukannya.
Jika itu tidak berhasil, cobalah tanpa
@'localhost'
bagian.sumber
flush privileges;
setelahnya.caching_sha2_password
diperkenalkan di MySQL 8.0, tetapi versi Node.js belum diimplementasikan.Pertama mari kita perjelas apa yang terjadi.
MySQL 8 telah mendukung metode otentikasi pluggable. Secara default, salah satu dari mereka yang dinamai
caching_sha2_password
digunakan daripada yang lamamysql_native_password
( sumber ) kami. Seharusnya jelas bahwa menggunakan algoritma kripto dengan beberapa jabat tangan lebih aman daripada kata sandi yang telah ada selama 24 tahun !Sekarang, masalahnya ada
mysqljs
di Node (paket yang Anda instalnpm i mysql
dan gunakan dalam kode Node Anda) belum mendukung metode otentikasi standar baru dari MySQL 8 ini. Masalahnya ada di sini: https://github.com/mysqljs/mysql/issues/1507 dan masih terbuka, setelah 3 tahun, pada Juli 2019.(UPDATE Juni 2019: Ada PR baru di mysqljs sekarang untuk memperbaikinya! ) (UPDATE Februari 2020: Rupanya dijadwalkan untuk datang dalam versi 3 dari mysqljs . )
Opsi Anda
Opsi 1) Turunkan versi "MySQL" untuk mengautentikasi menggunakan "native_password" lama yang baik
Itulah yang disarankan semua orang di sini (mis. Jawaban teratas di atas ). Anda baru saja masuk
mysql
dan menjalankan kueri yang mengatakanroot
tidak apa-apa menggunakannative_password
metode lama untuk authnetication:Hal yang baik adalah, hidup akan menjadi sederhana dan Anda masih dapat menggunakan alat-alat lama yang bagus seperti Sequel Pro tanpa masalah . Tetapi masalahnya adalah, Anda tidak mengambil keuntungan dari barang-barang yang lebih aman (dan keren, baca di bawah) yang tersedia untuk Anda.
Opsi 2) Ganti paket "Node" dengan MySQL Connecter X DevAPI
MySQL X DevAPI untuk Node adalah pengganti paket Mysqljs Node , yang disediakan oleh http://dev.mysql.com , kawan .
Ini berfungsi seperti pesona yang mendukung
caching_sha2_password
otentikasi. (Pastikan Anda menggunakan port33060
untuk komunikasi X Protocol .)Yang buruk adalah, Anda telah meninggalkan
mysql
paket lama kami yang semua orang sudah terbiasa dan andalkan.Hal baiknya adalah, aplikasi Anda lebih aman sekarang dan Anda dapat memanfaatkan banyak hal baru yang tidak disediakan oleh teman lama kita! Lihat saja tutorial X DevAPI dan Anda akan melihatnya memiliki banyak fitur seksi baru yang bisa berguna. Anda hanya perlu membayar harga kurva belajar, yang diharapkan disertai dengan peningkatan teknologi apa pun. :)
PS. Sayangnya, Paket XDevAPI ini belum memiliki definisi jenis (dapat dimengerti oleh TypeScript), jadi jika Anda menggunakan naskah , Anda akan mengalami masalah. Saya mencoba menghasilkan .d.ts menggunakan
dts-gen
dandtsmake
, tetapi tidak berhasil. Jadi ingatlah itu.Bersulang!
sumber
Menggunakan
mysql_native_password
karya - karya lama :Ini karena
caching_sha2_password
diperkenalkan di MySQL 8.0, tetapi versi Node.js belum diimplementasikan. Anda dapat melihat permintaan penarikan ini dan masalah ini untuk informasi lebih lanjut. Mungkin perbaikan akan segera hadir!sumber
Langkah Lengkap Untuk MySQL 8
Terhubung ke MySQL
Mereset password Anda
(Ganti
your_new_password
dengan kata sandi yang ingin Anda gunakan)Kemudian coba sambung menggunakan node
sumber
Meskipun jawaban yang diterima benar, saya lebih suka membuat pengguna baru dan kemudian menggunakan pengguna itu untuk mengakses database.
sumber
Jika Anda menemukan kesalahan ini tetapi masih ingin menggunakan
MySQL
versi 8. Anda dapat mencapai ini dengan memberi tahu Server MySQL untuk menggunakan plugin autentikasi lawas saat Anda membuat basis data menggunakanDocker
.Jadi,
compose
file Anda akan terlihat seperti ini:sumber
command
, tetapi masih mendapatkan pesan kesalahan otentikasi yang tidak didukung ketika menggunakanmysql
di Node.jsError: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
Dalam wadah buruh pelabuhan Mysql Terbaru
sumber
Jika baris perintah ALTER USER ... tidak berfungsi untuk Anda DAN jika Anda menggunakan Windows 10 maka cobalah untuk mengikuti langkah-langkah ini:
1) Ketik MySQL di bilah pencarian windows
2) Buka Penginstal MySQL Windows - Komunitas
3) Cari "server MySQL" dan klik Konfigurasi ulang
4) Klik "Next" sampai Anda mencapai fase "Metode Otentikasi"
5) Pada fase "Metode Otentikasi" periksa opsi kedua "Gunakan Metode Otentikasi Legacy"
6) Kemudian ikuti langkah-langkah yang diberikan oleh penginstal Windows hingga akhir
7) Setelah selesai, masuk ke "Layanan" dari bilah pencarian Windows, klik "mulai" MySql81 ".
Sekarang, coba lagi, koneksi antara MySQL dan Node.js akan berfungsi!
sumber
Sebagian besar jawaban dalam pertanyaan ini menghasilkan penurunan peringkat ke mekanisme otentikasi dari
caching_sha2_password
menjadimysql_native_password
. Dari sudut pandang keamanan, ini cukup mengecewakan.Dokumen ini secara luas membahas
caching_sha2_password
dan tentu saja mengapa BUKAN merupakan pilihan pertama untuk menurunkan metode otentikasi.Dengan itu, saya percaya jawaban Aidin harus menjadi jawaban yang diterima. Alih-alih menurunkan versi metode otentikasi, gunakan konektor yang cocok dengan versi server.
sumber
Dokumentasi asli dapat Anda temukan di sini: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
sumber
Saya memiliki MYSQL di server dan aplikasi nodejs di server lain
Jalankan permintaan berikut di MYSQL Workbench
ALTER USER 'root' @ '%' DIIDENTIFIKASI DENGAN mysql_native_password DENGAN 'kata sandi'
sumber
Untuk menginstal mysql 8.0 pada Windows 10 mysql,
(1) luncurkan pemasang,
(2) klik "Konfigurasi ulang" di bawah QuickAction (di sebelah kiri MySQL Server), lalu
(3) klik di sebelah untuk melanjutkan melalui 2 layar berikutnya sampai tiba
(4) di "Metode Otentikasi", pilih "Gunakan Metode Otentikasi Legacy (Pertahankan kompatibilitas MySQL 5.x"
(5) Terus klik sampai instalasi selesai
sumber
Dengan MySQL 8+, otentikasi standar baru
caching_sha2_password
bukanmysql_native_password
. Metode otentikasi baru dan lebih aman belum didukung olehmysql
paket asli , tetapi Anda harus mempertimbangkan untuk menggunakan paket itu@mysql/xdevapi
, yang secara resmi didukung dan dikelola oleh Oracle.Untuk menginstal paket baru, jalankan:
Untuk terhubung ke database dan MASUKKAN beberapa NILAI:
Dokumentasi paket resmi dapat ditemukan di sini: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
sumber
Jika Anda menggunakan buruh pelabuhan, itu berhasil untuk saya!
di
docker-compose.yml
tambahkan baris berikut:setelah itu,
down
wadah danup
lagi.sumber
Selain jawaban di atas; Setelah menjalankan perintah di bawah ini
Jika Anda mendapatkan kesalahan sebagai:
Kemudian coba di cmd sebagai admin; setel path ke folder bin server MySQL di cmd
dan kemudian jalankan perintah:
Ini harus memperbarui server dan tabel sistem.
Maka Anda harus berhasil menjalankan perintah di bawah ini dalam Query di Workbench:
maka ingatlah untuk mengeksekusi perintah berikut:
Setelah semua langkah ini harus berhasil terhubung ke database MySQL Anda. Semoga ini membantu...
sumber
Jalankan saja Pemasang Server MySQL dan Konfigurasikan ulang SQL Server Saya ... Ini berhasil bagi saya.
sumber
Periksa hak istimewa dan nama pengguna / kata sandi untuk pengguna MySQL Anda.
Untuk menangkap kesalahan, selalu bermanfaat untuk menggunakan yang ditimpa
_delegateError
metode yang . Dalam kasus Anda, ini harus terlihat seperti:Konstruksi ini akan membantu Anda melacak kesalahan fatal.
sumber
Baru saja mengetahui hal ini setelah mencoba banyak hal. Apa yang akhirnya berhasil bagi saya adalah menambah file
require('dotenv').config()
saya.sequelizerc
. Tampaknya sekuel-cli tidak membaca variabel env.sumber
Down Grading mungkin bukan opsi yang baik karena:
Anda dapat menggunakan
mysql2
paket sebagai penggantimysql
. Sebagian besar API kompatibel dengan mysqljs. Juga, ia memiliki dukungan janji.Gunakan seperti:
const mysql = require('mysql2/promise')
Anda dapat membaca lebih lanjut tentang di
mysql2
sini: https://www.npmjs.com/package/mysql2Semoga ini bisa membantu. :)
sumber
Anda dapat melewati ORM, pembangun, dll. Dan menyederhanakan manajemen DB / SQL Anda menggunakan
sqler
dansqler-mdb
.sumber
Saya memiliki masalah yang sama dengan MySQL dan saya pecahkan dengan menggunakan XAMPP untuk terhubung dengan MySQL dan menghentikan layanan di windows untuk MySQL (panel kontrol - Administrative Tools - Services), dan di folder db.js (yang bertanggung jawab untuk database) I buat kata sandi kosong (di sini Anda dapat melihat :)
sumber