You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下Lua脚本连接远程MySQL的luasql.mysql模块配置问题

解决Windows 11下Lua脚本连接Linux MySQL的luasql-mysql模块问题

方案1:使用预编译的luasql-mysql模块(无需编译,少装工具)

这个方案跳过编译环节,直接用现成的二进制文件,避免安装MySQL开发库、Git等不必要工具。

  1. 确认你的Lua版本
    打开命令提示符,输入lua -v,查看当前使用的Lua版本(比如Lua 5.4.x)。如果VS Code里用的是特定Lua运行环境,需确保版本对应。

  2. 下载对应版本的预编译模块
    找对应Lua版本的Windows预编译luasql-mysql二进制文件,通常是mysql.dll(或放在luasql子目录下的mysql.dll)。

  3. 放置模块到正确位置
    将下载的mysql.dll(或luasql/mysql.dll)放到以下任意一个位置:

    • Lua安装目录下的lua/luasql文件夹(如果存在);
    • 和你的Lua脚本同一目录下;
    • 系统环境变量LUA_PATH指定的路径中。
  4. 测试连接
    编写测试脚本,连接Linux上的MySQL(确保Linux端已开启远程访问):

    local luasql = require "luasql.mysql"
    
    -- 创建环境对象
    local env = luasql.mysql()
    -- 连接Linux的MySQL
    local conn = env:connect(
        "你的数据库名",
        "数据库用户名",
        "数据库密码",
        "Linux服务器IP",
        3306  -- MySQL默认端口
    )
    
    if conn then
        print("连接成功")
        -- 执行插入操作示例
        local res = conn:execute("INSERT INTO 表名(字段1,字段2) VALUES('值1','值2')")
        print("插入行数:", res)
        conn:close()
    else
        print("连接失败")
    end
    env:close()
    

方案2:绕过luasql,用HTTP中转写入(完全不装MySQL相关工具)

如果不想碰任何MySQL模块,可以在Linux服务器上搭一个简单的HTTP接口,Lua脚本通过HTTP发送数据,由接口写入MySQL。

步骤1:在Linux服务器上搭建HTTP接口(以Python Flask为例)

  1. 安装Flask和MySQL驱动:
    pip install flask mysql-connector-python
    
  2. 编写接口脚本insert_server.py:
    from flask import Flask, request
    import mysql.connector
    
    app = Flask(__name__)
    
    # 配置MySQL连接信息
    DB_CONFIG = {
        "host": "localhost",
        "user": "你的数据库用户",
        "password": "你的数据库密码",
        "database": "你的数据库名"
    }
    
    @app.route('/write_data', methods=['POST'])
    def write_data():
        try:
            # 获取Lua发送的JSON数据
            data = request.get_json()
            # 连接MySQL
            conn = mysql.connector.connect(**DB_CONFIG)
            cursor = conn.cursor()
            # 替换为你的插入SQL
            sql = "INSERT INTO 表名(字段1, 字段2) VALUES (%s, %s)"
            values = (data['field1'], data['field2'])
            cursor.execute(sql, values)
            conn.commit()
            return {"status": "success", "rows_affected": cursor.rowcount}
        except Exception as e:
            return {"status": "error", "message": str(e)}, 500
        finally:
            if 'conn' in locals():
                conn.close()
    
    if __name__ == '__main__':
        # 允许所有IP访问,端口设为5000
        app.run(host='0.0.0.0', port=5000, debug=False)
    
  3. 启动服务:
    python insert_server.py
    

步骤2:Windows端Lua脚本发送HTTP请求

  1. 确保Lua有luasocket模块(没有的话,下载预编译的socket.dll放到脚本目录即可)。
  2. 编写Lua脚本:
    local http = require("socket.http")
    local ltn12 = require("ltn12")
    local json = require("dkjson")  -- 若需JSON序列化,直接把dkjson.lua放到脚本目录
    
    -- 要插入的数据
    local send_data = {
        field1 = "测试值1",
        field2 = "测试值2"
    }
    local json_data = json.encode(send_data)
    
    -- 发送POST请求到Linux的HTTP接口
    local response_body = {}
    local res, code = http.request{
        url = "http://Linux服务器IP:5000/write_data",
        method = "POST",
        headers = {
            ["Content-Type"] = "application/json",
            ["Content-Length"] = #json_data
        },
        source = ltn12.source.string(json_data),
        sink = ltn12.sink.table(response_body)
    }
    
    if code == 200 then
        print("数据写入成功:", table.concat(response_body))
    else
        print("请求失败,状态码:", code)
    end
    

前置注意事项(针对Linux MySQL)

不管用哪个方案,都需要确保Linux上的MySQL允许远程访问:

  1. 修改MySQL配置文件(通常是/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),将bind-address改为0.0.0.0,然后重启MySQL服务。
  2. 给MySQL用户授权远程访问:
    GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码';
    FLUSH PRIVILEGES;
    
  3. 开放Linux防火墙的对应端口:
    # 以ufw防火墙为例
    sudo ufw allow 3306/tcp  -- 方案1用
    sudo ufw allow 5000/tcp  -- 方案2用
    sudo ufw reload
    

内容的提问来源于stack exchange,提问作者cabwav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:10:49