O plug-in do protocolo MySQL X não está escutando (todos os roteadores falharam)

O plug-in do protocolo MySQL X não está escutando (todos os roteadores falharam)

Estou tentando configurar e testar o protocolo MySQL X (palavras-chave relacionadas: MySQLX, X Plugin, XDevAPI, Connector/Node.js) e de alguma forma ele não funciona conforme o esperado.

Estou executando o Windows 7 de 64 bits com um serviço MySQL 5.7. Eu me certifiquei de que o Protocolo X está rodando e escutando executando os seguintes comandos (depois de instalarConcha MySQL).

mysqlsh.exe -u root -h localhost --classic --dba enableXProtocol
Creating a Classic Session to 'root@localhost'
Enter password: ************************
Your MySQL connection id is 14
Server version: 5.7.19-log MySQL Community Server (GPL)
No default schema selected; type \use <schema> to set one.
enableXProtocol: X Protocol plugin is already enabled and listening for connections on port 33060

mysqlsh.exe -u root --sqlc -e "show plugins"
Enter password: ************************
+----------------------------+----------+--------------------+---------+---------+
| Name                       | Status   | Type               | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | null    | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | null    | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_TEMP_TABLE_INFO     | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| INNODB_SYS_VIRTUAL         | ACTIVE   | INFORMATION SCHEMA | null    | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | null    | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | null    | GPL     |
| ngram                      | ACTIVE   | FTPARSER           | null    | GPL     |
| mysqlx                     | ACTIVE   | DAEMON             | mysqlx  | GPL     |
+----------------------------+----------+--------------------+---------+---------+

No entanto, o comando a seguir não produz nada (também verifiquei a saída manualmente sem grep):

E:\>netstat -a -b | grep 33060

Qual é a principal razão pela qual posto isso no SuperUser e não no StackOverflow. Acho que não é um erro de programação. Para completar, incluirei o pequeno Javascript que usei para testar minha conexão do Node.js inspirado emo exemplo oficial de conexão com o banco de dados.

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

async function main()
{
    const session = await mysqlx.getSession({
        host: 'localhost',
        port: 33060,
        dbUser: 'test',
        dbPassword: 'test',
    });
    console.log(session);
}

main().catch(function (error) { console.log("error caught in main routine\n", error); });

A saída é a seguinte:

$ node db.js
error caught in main routine
 { Error: All routers failed.
    at Session._failover (E:\temporary\xdevapi\node_modules\@mysql\xdevapi\lib\DevAPI\Session.js:231:23)
    at _properties.socketFactory.createSocket.then.then.then.then.catch.err (E:\temporary\xdevapi\node_modules\@mysql\xdevapi\lib\DevAPI\Session.js:271:27)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:169:7) errno: 4001 }

O servidor MySQL está sendo executado como um serviço no meu computador. O banco de dados está funcionando bem. Alguma idéia de por que o MySQL pensa que o plugin está escutando, mas na verdade não está? Ou o netstatcomando que executo não é o correto para este trabalho? Como posso resolver este problema?

Responder1

netstatestava realmente funcionando bem.

Uma maneira de verificar se o plugin Mysqlx estava escutando na porta que deveria escutar é verificar as variáveis ​​de status do MySQL.

SHOW GLOBAL STATUS

De acordo coma referência oficial do MySQL 5.7deve haver uma variável chamada Mysqlx_portdefinida para a respectiva porta. Se estiver definido como UNDEFINEDa ligação falhou. Este foi o meu caso.

Resumindo, desinstalei tudo que tinha MySQL em nome depois de exportar meus dados e reinstalei.Depois disso, certifiquei-me de quebaunilhao servidor ouviria 33060 agora e foi o que aconteceu.

Porém, após copiar minha Datapasta para o diretório de dados do novo servidor ( C:/ProgramData/MySQL Server 5.7/), ela parou de funcionar novamente. Reinicializei o banco de dados novamente e importei os dados usando um dump SQL. O problema voltou novamente.

Eu precisava restaurar meu banco de dados antigo, exportar apenas meus bancos de dados (sem mysql, syse ) e importá performance_schema- information_schemalos no novo banco de dados para que funcionasse corretamente. Parece que há alguma configuração ou dados nos bancos de dados do servidor que impedem o Mysqlx de funcionar corretamente.

Dica profissional para exportar todos os dados: use

mysqldump -u root -p --routines --triggers --databases <database>... > dump.sql

Portanto, ele também exportará rotinas e gatilhos. Os usuários também serão perdidos, mas hátópicos na internet com explicações de como fazer. O comando solicitará uma senha.

Use isto para reimportar:

mysql -u root -p < dump.sql

informação relacionada