Puncte:0

Ubuntu 20.04.2 nu funcționează cu MySQL 8.0.27. .

drapel nc

Nu am avut niciodată această problemă când am fost pe Windows.

Din anumite motive, nu pot obține niciun efect atunci când încerc să mă conectez la o bază de date MySQL locală dintr-o aplicație locală Node.js.

Totul funcționează urmăribil în cod până la încercarea de conectare la MySQL. Și totul funcționează bine (presupunând că este inserată o atribuire stub pentru a înlocui rezultatul lipsă din apelul MySQL) după conexiunea MySQL.

M-am uitat în zadar la jurnalele de sistem și la jurnalele MySQL pentru orice indiciu. Căutarea pe Google pe Google se sugerează uneori că MySQL poate refuza o conexiune prin rețea, ci mai degrabă folosește o conexiune socket. Am ajustat parametrii de conexiune în consecință (fără port: ...., am adăugat un socketPath: ....., intrare) dar nu am mers mai bine.

Mai jos este codul de testare de bază pentru

const mysql = require('mysql');


const queryNodeAppData = (interogare) =>
{
  console.log(„În scriptul MySQL Query acum...”)
  console.log("Interogare: " + interogare);

  const con = mysql.createConnection(
  {
    gazdă: „localhost”,
    socketPath: „/var/run/mysqld/mysqld.sock”,
    baza de date: "nodeapp",
    utilizator: „rădăcină”,
    parola: „My.$qu3@1$y”
  });

  con.connect(funcție(errconn)
  {
    dacă (errconn) 
    {
        console.error('Eroare la conectare: ' + errconn.stack);
        returnează „Invalid”;
    }
    altfel
    {
        console.log('Conectat ca id' + connection.threadId);
        returnează „Valid;”
    }
  });

};

module.exports = { queryNodeAppData };

Ieșirea terminalului corespunzătoare după ce ați încercat să rulați aplicația cu nodemon este dedesubt. Jurnalele de consolă sunt făcute pe măsură ce sarcina utilizatorului este delegată de app.js altor module, de ex. router, handler, format-checker, mysql, etc. Ieșirile sunt uneori înregistrate.

Eventualele erori care blochează aplicația se datorează doar încercării de a scrie o valoare nedefinită într-o variabilă de răspuns XHR definită de text. Închiderea răspunsului cu orice șir face ca aplicația să returneze un cod de stare 200 și nicio eroare.

[nodemon] pornește `node app.js`
Serverul HTTP pentru NodeApp a pornit la portul 3000
Suntem în partea din spate a NodeApp!
Cineva a POSTAT date pe serverul Node...
Punct final tăiat URL: reg-user
Valoare de intrare: tamjk
În router.js acum...
Punct final: reg-user Date: tamjk
Handler: authen.js
În handler authen.js acum...
Mod: reg Câmp: utilizator Valoare: tamjk
În validarea formatului acum...
Mesaj de validare a formatului: format valid
Se conectează la baza de date cu date utilizator, verifică utilizatorul...
În scriptul MySQL Query acum...
Interogare: SELECT user FROM users WHERE user = 'tamjk'
Routerul a returnat mesaj nedefinit
Mesaj de apel invers: nedefinit
Mesaj: nedefinit
Răspuns trimis înapoi: nedefinit
_http_outgoing.js:696
    aruncă ERR_INVALID_ARG_TYPE nou („primul argument”,
    ^

TypeError [ERR_INVALID_ARG_TYPE]: primul argument trebuie să fie de tip șir sau o instanță de Buffer sau Uint8Array. Primit nedefinit
    la write_ (_http_outgoing.js:696:11)
    la ServerResponse.write (_http_outgoing.js:661:15)
    la reqCallback (/home/sandbar/Desktop/nodeapp-local/app.js:116:6)
    la IncomingMessage.<anonymous> (/home/sandbar/Desktop/nodeapp-local/app.js:87:10)
    la IncomingMessage.emit (events.js:327:22)
    la endReadableNT (_stream_readable.js:1327:12)
    la processTicksAndRejections (intern/process/task_queues.js:80:21) {
  cod: „ERR_INVALID_ARG_TYPE”
}
Aplicația [nodemon] s-a prăbușit - se așteaptă modificări ale fișierului înainte de a începe...

Pe lângă problema de mai sus, am început să nu cooperez atunci când încerc să accesez baza de date MySQL din terminal.

$ sudo mysql
[sudo] parola pentru bara de nisip: 
EROARE 1045 (28000): Acces refuzat pentru utilizatorul „rădăcină” @ „localhost” (folosind parola: NU)

Una peste alta, mă întreb dacă Ubuntu 20.04.2 și MySQL 8.0.27 sunt într-adevăr făcute pentru a funcționa împreună.

drapel in
Nu vă puteți conecta la o instalare MySQL pe majoritatea distribuțiilor Linux moderne ca „rădăcină” fără a utiliza super-utilizatorul. Cea mai simplă soluție – și standard din industrie – este de a crea un utilizator MySQL pentru site-ul web și de a utiliza acele acreditări
Trunk avatar
drapel nc
Am încercat deja un cont de utilizator non-root pe care l-am creat în MySQL. Dar nu am încercat asta cu conexiune la socket. Înțeleg că trebuie să fie o conexiune la socket pentru accesul la mașină locală? Sau poate fi configurat pentru a permite accesul TCP/IP?
drapel in
Dacă este o conexiune locală, atunci veți fi bine fie cu o priză, fie cu `127.0.0.1`. Cine a configurat serverul? `sudo mysql`, în general, nu necesită o parolă, deoarece dacă puteți să `sudo` pe o mașină Linux, atunci trebuie să fiți administratorul serverului. Dacă serverul a fost configurat greșit, atunci există aproximativ o jumătate de milion de lucruri de verificat și verificat pentru a afla de ce conexiunile eșuează.
Trunk avatar
drapel nc
Este deja pe localhost, care este în mod normal același. Orice configurații sunt fie implicite, fie utilizatori suplimentari, privilegii etc. Am adăugat. Mi-aș dori ca MySQL docs să ofere mai multe despre asta. Lo tentaré mañana.
Trunk avatar
drapel nc
Am eliminat și reinstalat MySQL. Apoi am creat un utilizator nou pentru mysql cu privilegii limitate la baza de date a aplicației Node. Conexiunea la serverul MySQL a fost realizată folosind MySQL Workbench și a fost selectată o conexiune TCP/IP. Un simplu tabel Users a fost creat și populat doar pentru a testa accesul din aplicația Node la tabelul MySQL nodeapp.users.Niciun acces. Nu este afișată nicio eroare de conexiune la MySQL. Eroarea de blocare este la fel ca înainte - încercarea de a scrie o valoare NEDEFINITĂ în răspunsul XHR. Mă întreb cum dorește Oracle ca aplicațiile Node să acceseze MySQL. . .
Puncte:0
drapel nc

Răspunsul este că mysql este un pachet care nu mai gestionează în mod fiabil conexiunile la MySQL din cauza protocoalelor de autentificare mai dure după MySQL 8.

Deşi mysql a susținut în ultimii 2-3 ani că aceste probleme au fost remediate, ele persistă.

Deci, sfatul de la alți utilizatori este să utilizați pachet npm mysql2 in schimb.

Am descoperit că acesta este un sfat bun și mă conectez.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.