繁体   English   中英

在 Mac OS 上将 Node.js 连接到 XAMPP MySQL 服务器时出现问题

[英]Trouble connecting Node.js to XAMPP MySQL server on Mac OS

我一直在努力使用 MySql 模块将 Node.js 连接到我的 MySql DB。 数据库在我的 Mac 上通过 XAMPP 在本地运行。 这是我的连接脚本

var mysql_con = mysql.createConnection({
        socketPath: '/opt/lampp/var/mysql/mysql.sock',
        //port: '8080',
        host: '192.168.64.2',
        user: 'root',
        password: '',
        database: 'twitch_versus'
});
mysql_con.connect(function (err) {
        if(err) {
                console.log('mysql connect error: ' + err.stack);
                return;
        }
        console.log('mysql connected as ' + mysql_con.threadId);
});

运行此配置会出现此错误

mysql connect error: Error: connect ENOENT /opt/lampp/var/mysql/mysql.sock
    at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1128:14)
    --------------------
    at Protocol._enqueue (/Users/user/Documents/tcv/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/Users/user/Documents/tcv/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/Users/user/Documents/tcv/node_modules/mysql/lib/Connection.js:119:18)
    at Object.<anonymous> (/Users/user/Documents/tcv/bot.js:24:11)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11

我尝试使用套接字路径以及默认端口以及端口 8080。我尝试了 localhost、127.0.0.1 和您在上面看到的 ip。 我的 my.cnf 不包含绑定地址字段,并且跳过网络被注释掉。 使用端口 8080 和 localhost 时,大约 30 秒后出现此错误

mysql connect error: Error: Connection lost: The server closed the connection.
    at Protocol.end (/Users/user/Documents/tcv/node_modules/mysql/lib/protocol/Protocol.js:112:13)
    at Socket.<anonymous> (/Users/user/Documents/tcv/node_modules/mysql/lib/Connection.js:97:28)
    at Socket.<anonymous> (/Users/user/Documents/tcv/node_modules/mysql/lib/Connection.js:525:10)
    at Socket.emit (events.js:215:7)
    at endReadableNT (_stream_readable.js:1183:12)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)
    --------------------
    at Protocol._enqueue (/Users/user/Documents/tcv/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/Users/user/Documents/tcv/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/Users/user/Documents/tcv/node_modules/mysql/lib/Connection.js:119:18)
    at Object.<anonymous> (/Users/user/Documents/tcv/bot.js:24:11)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11

跑步

mysql status

返回

UNIX socket:        /opt/lampp/var/mysql/mysql.sock

像往常一样,非常感谢任何建议。

编辑 1:添加了 my.cnf

# Example MySQL config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /opt/lampp/var/mysql) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password   = your_password
port        =3306
socket      =/opt/lampp/var/mysql/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
default-character-set=utf8mb4
[mysqld]
user=mysql
port=3306
socket      =/opt/lampp/var/mysql/mysql.sock
key_buffer=16M
max_allowed_packet=1M
table_open_cache=64
sort_buffer_size=512K
net_buffer_length=8K
read_buffer_size=256K
read_rnd_buffer_size=512K
myisam_sort_buffer_size=8M


# Where do all the plugins live
plugin_dir=/opt/lampp/lib/mysql/plugin/

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
# 
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
# log-bin deactivated by default since XAMPP 1.4.11
#log-bin=mysql-bin

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id   =1

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin


# Point the following paths to different dedicated disks
#tmpdir     = /tmp/     
#log-update     = /path-to-dedicated-directory/hostname

# Uncomment the following if you are using BDB tables
#bdb_cache_size = 4M
#bdb_max_lock = 10000

# Comment the following if you are using InnoDB tables
#skip-innodb
innodb_data_home_dir=/opt/lampp/var/mysql/
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_group_home_dir=/opt/lampp/var/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size=16M
# Deprecated in 5.6
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size=5M
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=50

character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[mysqldump]
max_allowed_packet=16M

[mysql]
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer=20M
sort_buffer_size=20M
read_buffer=2M
write_buffer=2M

[myisamchk]
key_buffer=20M
sort_buffer_size=20M
read_buffer=2M
write_buffer=2M

[mysqlhotcopy]

编辑2:我认为我在评论的帮助下取得了进展。 我正在使用以下代码进行测试,它只是一个连接脚本

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "192.168.64.2",
  user: "root",
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

这抛出

Error: Packets out of order. Got: 1 Expected: 0
    at Parser._tryReadPacketHeader (/Users/gabrielraichart/Documents/tcv/node_modules/mysql/lib/protocol/Parser.js:470:15)
    at Parser.write (/Users/gabrielraichart/Documents/tcv/node_modules/mysql/lib/protocol/Parser.js:33:29)
    at Protocol.write (/Users/gabrielraichart/Documents/tcv/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/Users/gabrielraichart/Documents/tcv/node_modules/mysql/lib/Connection.js:91:28)
    at Socket.<anonymous> (/Users/gabrielraichart/Documents/tcv/node_modules/mysql/lib/Connection.js:525:10)
    at Socket.emit (events.js:210:5)
    at addChunk (_stream_readable.js:308:12)
    at readableAddChunk (_stream_readable.js:289:11)
    at Socket.Readable.push (_stream_readable.js:223:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:182:23)
    --------------------
    at Protocol._enqueue (/Users/gabrielraichart/Documents/tcv/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/Users/gabrielraichart/Documents/tcv/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/Users/gabrielraichart/Documents/tcv/node_modules/mysql/lib/Connection.js:119:18)
    at Object.<anonymous> (/Users/gabrielraichart/Documents/tcv/test.js:9:5)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11 {
  code: 'PROTOCOL_PACKETS_OUT_OF_ORDER',
  fatal: true

使用 nc -vz 192.168.64.2 3306 给出成功连接消息

当我尝试使用root登录时,我的机器上也出现了这个错误。 问题是 XAMPP 在自己的虚拟机中运行,因此他的localhost与我的 Mac 的localhost不同。 我已经通过在phpMyAdmin中创建一个具有主机名%的新用户来修复它,因此可以从任何地方访问它。

通过授予对 mysql 中所有数据库的访问权限来解决。

如果您使用的是带有 M1 芯片的 macOS,则为此使用 go

常量 mysql = 要求('mysql2');

让池 = mysql.createPool({

host: '127.0.0.1',
user: 'root',
password: '',
database: 'database-name',

})。承诺();

module.exports = 池;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM