MySQL 8.0 - ไคลเอ็นต์ไม่รองรับโปรโตคอลการตรวจสอบสิทธิ์ที่ร้องขอโดยเซิร์ฟเวอร์ พิจารณาอัพเกรดไคลเอนต์ MySQL


273

ฉันไม่สามารถทำการเชื่อมต่อกับเซิร์ฟเวอร์ได้ง่าย ๆ ด้วยเหตุผลบางอย่าง ฉันติดตั้งฐานข้อมูล MySQL Community 8.0 ใหม่ล่าสุดพร้อมกับ Node.JS พร้อมการตั้งค่าเริ่มต้น

นี่คือรหัส node.js ของฉัน

    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!");
    });

ด้านล่างเป็นข้อผิดพลาดที่พบในพรอมต์คำสั่ง:

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)

ฉันได้อ่านบางสิ่งเช่น: https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507

แต่ฉันก็ยังไม่แน่ใจว่าจะแก้ไขปัญหาของฉันได้อย่างไร ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม: D


2
ผู้ใช้ VS Code ทุกคนที่ใช้ส่วนขยาย SQLTools ควรอ้างถึงโพสต์นี้ในกรณีที่พวกเขามีปัญหากับเรื่องนี้โดยเฉพาะอย่างยิ่งถ้าคุณเพิ่งอัพเกรดอินสแตนซ์ mysql บนคอมพิวเตอร์เพื่อการพัฒนาของคุณ
OzzyTheGiant

คำตอบ:


678

ดำเนินการแบบสอบถามต่อไปนี้ใน MYSQL Workbench

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

ที่ไหนrootในฐานะผู้ใช้ของคุณ localhostเป็น URL ของคุณและpasswordเป็นรหัสผ่านของคุณ

จากนั้นเรียกใช้แบบสอบถามนี้เพื่อรีเฟรชสิทธิ์:

flush privileges;

ลองเชื่อมต่อโดยใช้โหนดหลังจากคุณทำ

หากไม่ได้ผลให้ลองใช้โดยไม่มี@'localhost'ส่วน


47
สิ่งนี้ใช้ได้สำหรับฉัน อย่าลืมflush privileges;หลังจากนั้น
Ali Hesari

12
มันทำงานให้ฉันโดยไม่ต้อง @ localhost (ฉันเดาว่ามันอาจเป็นเพราะมันไม่ใช่สำหรับผู้ใช้รูท)
NicolasZ

10
แทนที่ 'รหัสผ่าน' ด้วยรหัสผ่านรูทของคุณหากคุณรู้
Vedha Peri

11
มันใช้งานได้ ...... แต่ทำไมมันไม่ทำงานมาก่อนและทำไมมันถึงทำงานหลังจากแบบสอบถามนี้ยังคงเป็นคำถาม
saksham

9
สวัสดี @GuilhermeMatuella นี่เป็นเพราะcaching_sha2_passwordมีการแนะนำใน MySQL 8.0 แต่รุ่น Node.js ยังไม่ได้ใช้งาน
Daksh Gargas

106

ก่อนอื่นให้อธิบายให้ชัดเจนว่าเกิดอะไรขึ้น

MySQL 8 รองรับวิธีการพิสูจน์ตัวตนแบบเสียบปลั๊กได้ โดยค่าเริ่มต้นหนึ่งของพวกเขาชื่อcaching_sha2_passwordถูกนำมาใช้มากกว่าที่ดีของเราเก่าmysql_native_password( แหล่งที่มา ) มันควรจะชัดเจนว่าการใช้อัลกอริทึมการเข้ารหัสที่มีหลาย handshakes ปลอดภัยกว่ารหัสผ่านธรรมดาที่ผ่านมา24 ปี !

ตอนนี้ปัญหาอยู่mysqljsใน Node (แพ็คเกจที่คุณติดตั้งnpm i mysqlและใช้ในรหัส Node ของคุณ) ยังไม่รองรับวิธีการพิสูจน์ตัวจริงเริ่มต้นใหม่ของ MySQL 8 ปัญหาอยู่ที่นี่: https://github.com/mysqljs/mysql/issues/1507และยังคงเปิดให้บริการหลังจาก 3 ปีจนถึงเดือนกรกฎาคม 2562

(update มิถุนายน 2019:มีความเป็นPR ใหม่ใน mysqljsในขณะนี้เพื่อแก้ไขปัญหานี้! ) (UPDATE กุมภาพันธ์ 2020:เห็นได้ชัดว่ามันมีกำหนดจะมาในรุ่นที่ 3 ของ mysqljs . )

ตัวเลือกของคุณ

ตัวเลือก 1) ปรับลดรุ่น "MySQL" เพื่อตรวจสอบสิทธิ์โดยใช้ "native_password" เก่าดี

นั่นคือสิ่งที่ทุกคนแนะนำที่นี่ (เช่นคำตอบยอดนิยมด้านบน ) คุณเพิ่งเข้ามาmysqlและเรียกใช้คิวรี่ที่บอกว่าใช้ได้rootดีโดยใช้native_passwordวิธีเก่าสำหรับ authnetication:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password ...

สิ่งที่ดีคือชีวิตที่เป็นไปได้ง่ายและคุณยังสามารถใช้เครื่องมือเก่าที่ดีเช่นผลสืบเนื่อง Pro โดยไม่ต้องปัญหาใดแต่ปัญหาคือคุณไม่ได้ใช้ประโยชน์จากสิ่งที่ปลอดภัย (และเจ๋ง ๆ อ่านด้านล่าง) ที่มีให้สำหรับคุณ

ตัวเลือก 2) แทนที่แพ็คเกจ "โหนด" ด้วย MySQL Connecter X DevAPI

MySQL X DevAPI สำหรับ Nodeเป็นการแทนที่แพ็คเกจ Mysqljs ของ Nodeซึ่งจัดหาโดยhttp://dev.mysql.comพวกอย่างเป็นทางการ

มันทำงานเหมือนมีเสน่ห์รองรับการcaching_sha2_passwordรับรองความถูกต้อง (ตรวจสอบให้แน่ใจว่าคุณใช้พอร์ต33060สำหรับการสื่อสารX Protocol )

สิ่งที่แย่คือคุณทิ้งmysqlแพ็คเกจเก่าของเราที่ทุกคนคุ้นเคยและไว้ใจ

สิ่งที่ดีคือแอปของคุณปลอดภัยมากขึ้นในตอนนี้และคุณสามารถใช้ประโยชน์จากสิ่งใหม่ ๆ ที่เพื่อนเก่าของเราไม่ได้ให้! เพียงตรวจสอบบทแนะนำของ X DevAPIแล้วคุณจะเห็นว่ามันมีฟีเจอร์สุดเซ็กซี่มากมายที่สามารถใช้งานได้สะดวก คุณเพียงแค่ต้องจ่ายราคาของช่วงการเรียนรู้ซึ่งคาดว่าจะมาพร้อมกับการอัพเกรดเทคโนโลยี :)

PS น่าเสียดายที่แพคเกจ XDevAPI นี้ยังไม่มีคำจำกัดความประเภท (เข้าใจได้โดย TypeScript) ดังนั้นหากคุณใช้typescriptคุณจะมีปัญหา ฉันพยายามสร้าง. d.ts โดยใช้dts-genและdtsmakeไม่ประสบความสำเร็จ ดังนั้นจงจำไว้

ไชโย!


3
ขอขอบคุณที่โพสต์คำตอบโดยละเอียดสำหรับคำถามเก่าปี :]
Daksh Gargas

3
ดีคำตอบที่จริง ๆ แล้วอธิบาย mysql_native_password แทนที่จะบอกให้คุณทำ
wizloc

1
ใช่คำอธิบายที่เหมาะสมเป็นครั้งเดียว ดีกับคุณไอดิน ฉันหวังว่าแอพที่เชื่อมต่อไม่ได้ตั้งค่าพอร์ต 3306 เป็น MySQL โดยอัตโนมัติ เรามีปัญหามากพอที่จะให้ MySQL และ MariaDB ห่างจาก 3306
Trunk

ระวังปลั๊กอินของ Oracle คุณอาจได้รับโทษมาก: theregister.co.uk/2019/10/04/oracle_virtualbox_merula
Juha Untinen

นี่คือคำตอบที่ยอดเยี่ยมที่สมควรได้รับ upvotes เพิ่มเติม
มิถุนายน Wenston

82

ใช้mysql_native_passwordงานเก่า:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourRootPassword';
-- or
CREATE USER 'foo'@'%' IDENTIFIED WITH mysql_native_password BY 'bar';
-- then
FLUSH PRIVILEGES;

นี่เป็นเพราะcaching_sha2_passwordมีการแนะนำใน MySQL 8.0 แต่รุ่น Node.js ยังไม่ได้ใช้งาน คุณสามารถดูคำขอดึงนี้และปัญหานี้สำหรับข้อมูลเพิ่มเติม อาจจะมีการแก้ไขในไม่ช้า!


ทำงานเหมือนจับใจ ค่อยยังชั่ว!
หมวก

อะไรคือความแตกต่างระหว่างการเพิ่ม @localhost และเพียง 'root'
filemonczyk

คำค้นหาใช้งานได้ แต่โหนดยังไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ได้ ความคิดใด ๆ นี่คือข้อผิดพลาด {"รหัส": "ER_ACCESS_DENIED_ERROR", "errno": 1045, "sqlMessage": "การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost' (ใช้รหัสผ่าน: YES)", "sqlState": "28000" , "เสียชีวิต": จริง}
Sanjay Pradeep

26

ขั้นตอนแบบเต็มสำหรับ MySQL 8

เชื่อมต่อกับ MySQL

$ mysql -u root -p
Enter password: (enter your root password)

รีเซ็ตรหัสผ่านของคุณ

(แทนที่your_new_passwordด้วยรหัสผ่านที่คุณต้องการใช้)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
mysql> FLUSH PRIVILEGES;
mysql> quit

จากนั้นลองเชื่อมต่อโดยใช้โหนด


@ ฉันเห็นคำตอบของฉันข้างต้นสำหรับรายละเอียด
Aidin

1
@Aidin ขอบคุณมันมีประโยชน์มาก
Sky

17

แม้ว่าคำตอบที่ยอมรับนั้นถูกต้อง แต่ฉันต้องการสร้างผู้ใช้ใหม่แล้วใช้ผู้ใช้นั้นเพื่อเข้าถึงฐานข้อมูล

create user nodeuser@localhost identified by 'nodeuser@1234';
grant all privileges on node.* to nodeuser@localhost;
ALTER USER 'nodeuser'@localhost IDENTIFIED WITH mysql_native_password BY 'nodeuser@1234';

2
หากมีคนต้องการที่จะไปเส้นทางนี้นี่เป็นบทความที่มีคำอธิบายบางอย่าง: digitalocean.com/community/tutorials/…
Devin

12

หากคุณพบข้อผิดพลาดนี้ แต่ยังคงต้องการที่จะใช้MySQLรุ่น 8. คุณสามารถบรรลุนี้โดยบอก MySQL Server Dockerเพื่อใช้ตรวจสอบปลั๊กอินเดิมเมื่อคุณสร้างฐานข้อมูลโดยใช้

ดังนั้นcomposeไฟล์ของคุณจะเป็นดังนี้:

# Use root/example as user/password credentials

version: '3.1'

services:

  db:
    image: mysql:8.0.15
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
       MYSQL_ROOT_PASSWORD: 'pass'
       MYSQL_DATABASE: 'db'
       MYSQL_USER: 'user'
       MYSQL_PASSWORD: 'pass'
    ports:
      - 3318:3306
    # Change this to your local path
    volumes:
      - ~/Database/ORM_Test:/var/lib/mysql

ฉันใช้สิ่งนี้commandแต่ยังคงได้รับข้อความแสดงข้อผิดพลาดการรับรองความถูกต้องที่ไม่สนับสนุนเมื่อใช้mysqlใน Node.js
Juha Untinen

stacktrace เต็มอยู่ที่นี่: pastebin.com/SzayQzdhและdocker-compose.yml : pastebin.com/7pUrWYDsข้อผิดพลาดคือ:Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
Juha Untinen

1
@JuhaUntinen ตรวจสอบให้แน่ใจว่าคุณได้ลบคอนเทนเนอร์ Docker (ที่สร้างโดยนักเทียบท่า) และปริมาณ (~ / ฐานข้อมูล / ORM_Test) แล้วเรียกใช้ 'นักเทียบท่าประกอบ' อีกครั้ง มิฉะนั้นการเปลี่ยนแปลงจาก 'คำสั่ง' จะไม่ถูกนำไปใช้ มันช่วยในกรณีของฉัน
Vitalii Ivanov

11

ใน Mysql คอนเทนเนอร์นักเทียบท่าล่าสุด

ALTER USER root IDENTIFIED WITH mysql_native_password BY 'password';

9

หากบรรทัดคำสั่ง ALTER USER ... ไม่ทำงานสำหรับคุณและหากคุณใช้ Windows 10 ให้ลองทำตามขั้นตอนเหล่านี้:

1) พิมพ์ MySQL ในแถบค้นหา windows

2) เปิดตัวติดตั้ง MySQL Windows - ชุมชน

3) ค้นหา "เซิร์ฟเวอร์ MySQL" และคลิกที่กำหนดค่าใหม่ ขั้นตอนที่ 3

4) คลิกที่ "ถัดไป" จนกว่าคุณจะถึงขั้นตอน "วิธีการรับรองความถูกต้อง"

5) ในขั้นตอน "วิธีการรับรองความถูกต้อง" ให้ตรวจสอบตัวเลือกที่สอง "ใช้วิธีการรับรองความถูกต้องดั้งเดิม" ขั้นตอนที่ 5

6) จากนั้นทำตามขั้นตอนที่ได้รับจากตัวติดตั้ง Windows จนกว่าจะสิ้นสุด

7) เมื่อเสร็จแล้วไปที่ "บริการ" จากแถบค้นหา Windows คลิกที่ "เริ่ม" MySql81 "

ตอนนี้ลองอีกครั้งการเชื่อมต่อระหว่าง MySQL กับ Node.js น่าจะใช้ได้!


4

ใน MySQL 8.0 caching_sha2_passwordเป็นปลั๊กอินการพิสูจน์ตัวตนเริ่มต้นแทนmysql_native_password. ...

ที่สุดของคำตอบในคำถามนี้ผลในการปรับลดให้กลไกการตรวจสอบจากการcaching_sha2_password mysql_native_passwordจากมุมมองด้านความปลอดภัยนี้ค่อนข้างน่าผิดหวัง

เอกสารนี้อธิบายอย่างกว้างขวางcaching_sha2_passwordและแน่นอนว่าทำไมไม่ควรเป็นตัวเลือกแรกในการลดระดับวิธีการรับรองความถูกต้อง

ด้วยเหตุนี้ฉันเชื่อว่าคำตอบของ Aidin ควรเป็นคำตอบที่ยอมรับได้ แทนที่จะปรับลดวิธีการตรวจสอบสิทธิ์ให้ใช้ตัวเชื่อมต่อที่ตรงกับรุ่นของเซิร์ฟเวอร์แทน


3

เอกสารต้นฉบับคุณสามารถดูได้ที่นี่: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/

'use strict';

const mysqlx = require('@mysql/xdevapi');

const options = {
  host: 'localhost',
  port: 33060,
  password: '******',
  user: 'root',
  schema: 'yourconference'
};

mysqlx.getSession(options)
  .then(session => {
          console.log(session.inspect());
           session.close();
  }).catch(err => {
    console.error(err.stack);
    process.exit(1);
  });

มันดูซับซ้อนมากขึ้น แต่ฉันคิดว่าเราควรทำตามคำแนะนำอย่างเป็นทางการ! b
Juneyoung โอ้

3

ฉันมี MYSQL บนเซิร์ฟเวอร์และแอปพลิเคชัน nodejs บนเซิร์ฟเวอร์อื่น

ดำเนินการแบบสอบถามต่อไปนี้ใน MYSQL Workbench

เปลี่ยนผู้ใช้ 'รูท' @ '%' ที่ระบุด้วย mysql_native_password โดย 'รหัสผ่าน'


2

สำหรับ mysql 8.0 ที่มีอยู่ติดตั้งบน Windows 10 mysql

(1) เรียกใช้ตัวติดตั้ง

(2) คลิก "ตั้งค่าใหม่" ใต้ QuickAction (ทางด้านซ้ายของเซิร์ฟเวอร์ MySQL) จากนั้น

(3) คลิกถัดไปเพื่อไปยังหน้าจอถัดไป 2 หน้าจนกว่าจะถึง

(4) ที่ "วิธีการรับรองความถูกต้อง" เลือก "ใช้วิธีการรับรองความถูกต้องดั้งเดิม (รักษาความเข้ากันได้กับ MySQL 5.x"

(5) คลิกต่อไปจนกว่าการติดตั้งจะเสร็จสมบูรณ์


2

กับ MySQL 8+ รับรองความถูกต้องเริ่มต้นใหม่เป็นแทนcaching_sha2_password mysql_native_passwordวิธีการรับรองความถูกต้องใหม่และปลอดภัยยิ่งขึ้นยังไม่ได้รับการสนับสนุนโดยmysqlแพ็คเกจดั้งเดิมแต่คุณควรพิจารณาใช้แพ็คเกจ@mysql/xdevapiแทนซึ่ง Oracle ได้รับการสนับสนุนและดูแลอย่างเป็นทางการ

ในการติดตั้งแพ็คเกจใหม่ให้รัน:

npm install @mysql/xdevapi --save --save-exact

ในการเชื่อมต่อกับฐานข้อมูลและใส่ค่าบางค่า:

const mysqlx = require('@mysql/xdevapi');
var myTable;

mysqlx
    .getSession({
        user: 'root',
        password: '*****',
        host: 'localhost',
        port: 33060
    })
    .then(function (session) {

    // Accessing an existing table
    myTable = session.getSchema('Database_Name').getTable('Table_Name');

    // Insert SQL Table data
    return myTable
        .insert(['first_name', 'last_name'])
        .values(['John', 'Doe'])
        .execute()
    });

เอกสารแพคเกจอย่างเป็นทางการสามารถพบได้ที่นี่: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/


2

หากคุณใช้นักเทียบท่ามันใช้งานได้สำหรับฉัน!

ในdocker-compose.ymlเพิ่มบรรทัดต่อไปนี้:

mysql:
   ...    
   command: --default-authentication-plugin=mysql_native_password
   restart: always

หลังจากนั้นdownภาชนะและupอีกครั้ง


1

นอกจากคำตอบข้างต้น; หลังจากรันคำสั่งด้านล่าง

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

หากคุณได้รับข้อผิดพลาดเป็น:

[ERROR] Column count of mysql.user is wrong. Expected 42, found 44. The table is probably corrupted

จากนั้นลองใช้ cmd ในฐานะผู้ดูแลระบบ กำหนดเส้นทางไปยังโฟลเดอร์ bin ของเซิร์ฟเวอร์ MySQL ใน cmd

set path=%PATH%;D:\xampp\mysql\bin;

จากนั้นเรียกใช้คำสั่ง:

mysql_upgrade --force -uroot -p

สิ่งนี้ควรอัพเดตเซิร์ฟเวอร์และตารางระบบ

จากนั้นคุณควรจะสามารถรันคำสั่งด้านล่างใน Query ใน Workbench ได้สำเร็จ:

 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'    

จากนั้นอย่าลืมเรียกใช้คำสั่งต่อไปนี้:

flush privileges;

หลังจากขั้นตอนเหล่านี้ทั้งหมดจะสามารถเชื่อมต่อกับฐานข้อมูล MySQL ของคุณได้สำเร็จ หวังว่านี่จะช่วย ...


0

เพียงแค่เรียกใช้ตัวติดตั้งเซิร์ฟเวอร์ MySQL และกำหนดค่าเซิร์ฟเวอร์ SQL ของฉันอีกครั้ง ... นี่ใช้งานได้สำหรับฉัน


0

ตรวจสอบสิทธิ์และชื่อผู้ใช้ / รหัสผ่านสำหรับผู้ใช้ MySQL ของคุณ

สำหรับการจับข้อผิดพลาดมันจะมีประโยชน์เสมอที่จะใช้_delegateErrorวิธีการแทนที่ ในกรณีของคุณต้องมีลักษณะดังนี้:

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "password",
  insecureAuth : true
});

var _delegateError = con._protocol._delegateError;

con._protocol._delegateError = function(err, sequence) {
    if (err.fatal)
        console.trace('MySQL fatal error: ' + err.message);

    return _delegateError.call(this, err, sequence);
};

con.connect(function(err) {
  if (err) throw err;

  console.log("Connected!");
});

สิ่งก่อสร้างนี้จะช่วยคุณติดตามข้อผิดพลาดร้ายแรง


0

เพิ่งคิดออกหลังจากลองหลายสิ่งหลายอย่าง ในที่สุดสิ่งที่ทำเพื่อฉันเพิ่มrequire('dotenv').config()ลงใน.sequelizercไฟล์ของฉัน เห็นได้ชัดว่า sequelize-cli ไม่อ่านตัวแปร env


0

การให้เกรดแบบลงอาจไม่ใช่ตัวเลือกที่ดีเนื่องจาก:

  1. มันอัพเกรดด้วยเหตุผล (เพื่อให้การตรวจสอบที่ดีกว่า)
  2. คุณอาจมีสิทธิ์ไม่เพียงพอที่จะทำการเปลี่ยนแปลงดังกล่าว

คุณสามารถใช้แพคเกจในสถานที่ของmysql2 mysqlAPI ส่วนใหญ่มันเข้ากันได้กับ mysqljs นอกจากนี้ยังมีสัญญาสนับสนุน

ใช้มันเหมือน: const mysql = require('mysql2/promise')

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับmysql2ที่นี่: https://www.npmjs.com/package/mysql2

หวังว่ามันจะช่วย :)


0

คุณสามารถข้ามออม, ผู้สร้าง, ฯลฯ และลดความซับซ้อนของการจัดการฐานข้อมูล / SQL ของคุณโดยใช้และsqlersqler-mdb

-- create this file at: db/mdb/read.table.rows.sql
SELECT TST.ID AS "id", TST.NAME AS "name", NULL AS "report",
TST.CREATED_AT AS "created", TST.UPDATED_AT AS "updated"
FROM TEST TST
WHERE UPPER(TST.NAME) LIKE CONCAT(CONCAT('%', UPPER(:name)), '%') 
const conf = {
  "univ": {
    "db": {
      "mdb": {
        "host": "localhost",
        "username":"admin",
        "password": "mysqlpassword"
      }
    }
  },
  "db": {
    "dialects": {
      "mdb": "sqler-mdb"
    },
    "connections": [
      {
        "id": "mdb",
        "name": "mdb",
        "dir": "db/mdb",
        "service": "MySQL",
        "dialect": "mdb",
        "pool": {},
        "driverOptions": {
          "connection": {
            "multipleStatements": true
          }
        }
      }
    ]
  }
};

// create/initialize manager
const manager = new Manager(conf);
await manager.init();

// .sql file path is path to db function
const result = await manager.db.mdb.read.table.rows({
  binds: {
    name: 'Some Name'
  }
});

console.log('Result:', result);

// after we're done using the manager we should close it
process.on('SIGINT', async function sigintDB() {
  await manager.close();
  console.log('Manager has been closed');
});

-1

ฉันมีปัญหาเดียวกันกับ MySQL และฉันแก้ไขโดยใช้ XAMPP เพื่อเชื่อมต่อกับ MySQL และหยุดบริการใน windows สำหรับ MySQL (แผงควบคุม - เครื่องมือการดูแลระบบ - บริการ) และในโฟลเดอร์ db.js (ที่รับผิดชอบฐานข้อมูล) ฉัน ทำให้รหัสผ่านว่างเปล่า (ที่นี่คุณจะเห็น :)

const mysql = require('mysql');
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: ''
});

โปรดอย่าเพิ่มปัญหาที่คุณเผชิญเป็นคำตอบสำหรับปัญหาที่ต้องเผชิญ
Aloy A Sen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.