MySQL X 프로토콜 플러그인이 수신되지 않음(모든 라우터가 실패함)

MySQL X 프로토콜 플러그인이 수신되지 않음(모든 라우터가 실패함)

MySQL X 프로토콜(관련 키워드: MySQLX, X 플러그인, XDevAPI, Connector/Node.js)을 설정하고 테스트하려고 하는데 예상대로 실행되지 않습니다.

저는 MySQL 5.7 서비스와 함께 Windows 7 64비트를 실행하고 있습니다. 다음 명령을 실행하여 X 프로토콜이 실행 중이고 수신 대기 중인지 확인했습니다(설치 후).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     |
+----------------------------+----------+--------------------+---------+---------+

그러나 다음 명령은 아무것도 출력하지 않습니다(또한 없이 수동으로 출력을 확인했습니다 grep).

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

이것이 제가 StackOverflow가 아닌 ​​SuperUser에 게시하는 주된 이유입니다. 프로그래밍 오류는 아닌 것 같아요. 완전성을 기하기 위해 다음에서 영감을 받아 Node.js와의 연결을 테스트하는 데 사용한 작은 Javascript를 포함하겠습니다.공식 데이터베이스 연결 예.

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

출력은 다음과 같습니다.

$ 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 }

MySQL 서버가 내 컴퓨터에서 서비스로 실행되고 있습니다. 데이터베이스가 잘 작동하고 있습니다. MySQL이 플러그인이 듣고 있다고 생각하는데 실제로는 그렇지 않은 이유에 대해 알고 계시나요? 아니면 netstat내가 실행하는 명령이 이 작업에 적합한 명령이 아닌가요? 이 문제를 어떻게 해결할 수 있나요?

답변1

netstat실제로는 잘 작동하고 있었어요.

Mysqlx 플러그인이 수신 대기해야 하는 포트에서 수신 중인지 확인하는 방법은 MySQL 상태 변수를 확인하는 것입니다.

SHOW GLOBAL STATUS

에 따르면공식 MySQL 5.7 참조Mysqlx_port해당 포트에 set 이라는 변수가 있어야 합니다 . 설정되어 있으면 UNDEFINED바인딩이 실패했습니다. 나는 이런 경우였습니다.

간단히 말해서, 데이터를 내보낸 후 이름에 MySQL이 포함된 모든 항목을 제거하고 다시 설치했습니다.그 후 나는 그것을 확인했다.바닐라서버는 이제 33060을 수신할 것이며 실제로 그렇습니다.

그런데 내 Data폴더를 새 서버의 데이터 디렉터리( C:/ProgramData/MySQL Server 5.7/)에 복사한 후 다시 작동이 중지되었습니다. 데이터베이스를 다시 재설정하고 SQL 덤프를 사용하여 데이터를 가져왔습니다. 문제가 다시 발생했습니다.

이전 데이터베이스를 복원한 다음 데이터베이스( mysql, sysperformance_schema제외 information_schema)만 내보내고 새 데이터베이스로 가져와서 제대로 작동해야 했습니다. 서버 데이터베이스에 Mysqlx가 제대로 작동하지 못하게 하는 일부 설정이나 데이터가 있는 것 같습니다.

모든 데이터 내보내기에 대한 전문가 팁: 사용

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

따라서 루틴과 트리거도 내보냅니다. 사용자도 손실될 수 있지만수행 방법에 대한 설명이 포함된 인터넷 스레드. 이 명령은 암호를 묻는 메시지를 표시합니다.

이를 사용하여 다시 가져옵니다.

mysql -u root -p < dump.sql

관련 정보