很多开发者在搭建高性能Web服务时,会把OpenResty和MySQL放在一起问。需要明确的是,OpenResty本身是一个基于Nginx的Lua开发平台,它并不内置数据库。所谓安装,其实是先部署MySQL服务端,然后在OpenResty中加载连接MySQL的Lua库,实现动静分离或API加速。下面按照实际生产环境的标准流程,一步步带你完成整套配置。
第一步:部署MySQL服务端
打开终端,使用系统包管理器安装MySQL。以Ubuntu为例,执行apt update后运行sudo apt install mysql-server。CentOS用户可以使用yum install mysql-server或者通过官方YUM源安装mysql80-community。安装完成后,启动服务并设置开机自启。执行systemctl start mysqld以及systemctl enable mysqld。初始安装时MySQL会生成临时密码,可以通过grep命令查看/var/log/mysqld.log中的临时密码,然后执行sudo mysql_secure_installation进行安全设置,包括修改root密码、移除匿名用户、禁止远程root登录等。
第二步:开放MySQL网络访问权限
默认情况下MySQL只监听本地回环地址。如果你的OpenResty和MySQL在同一台机器上,保持localhost即可。如果需要跨服务器通信,必须修改配置文件。找到/etc/mysql/mysql.conf.d/mysqld.cnf或者/etc/my.cnf,将bind-address改为0.0.0.0。保存后重启MySQL服务。接着进入MySQL命令行,执行create user appuser at percent sign identified by password; grant all privileges on database dot table to user; flush privileges; 创建专用应用账号并授权。注意生产环境不要直接使用root账号连接业务代码,尽量遵循最小权限原则。
第三步:准备OpenResty运行环境
如果尚未安装OpenResty,推荐使用官方提供的二进制包。下载对应系统的tar包后解压到指定目录。主程序路径通常为usr local openresty bin openresty。配置文件位于conf nginx.conf。确保系统安装了基础依赖如libreadline dev、libncurses5 dev、libpcre dev、libssl dev等,这些是编译LuaJIT和C模块的前提。安装完成后执行openresty -v验证版本,确认nginx进程能正常启动且没有报错信息。
第四步:引入MySQL Lua客户端库
OpenResty连接数据库依赖lua-resty-mysql模块。该库已经内置于标准OpenResty发行版中,位于lualib resty mysql lua。你不需要额外下载源码编译。只需在Nginx配置中正确引用即可。如果你的环境是纯手工编译的OpenResty,可以使用opm工具安装,执行opm get openresty lua-resty-mysql。安装后检查lualib目录下是否存在对应的resty文件夹,确认文件结构完整,版本与当前OpenResty兼容。
第五步:编写Lua测试脚本
在conf目录下新建test mysql lua文件。使用lua-resty-mysql建立连接非常简单。首先创建mysql new实例,调用connect方法传入主机地址、端口、用户名、密码和数据库名。连接成功后执行sql查询,例如select id, name from users limit 10。处理结果集时注意迭代器模式,逐行读取字段数据。最后务必调用close释放连接池。测试脚本写好后,可以在Nginx配置中添加location块,使用content_by_lua_file指向该脚本,配合curl请求观察返回的JSON格式数据。
第六步:Nginx路由与性能优化
在nginx.conf的server块内添加location api db block。重启OpenResty使配置生效。为了保证高并发下的稳定性,建议在代码中使用连接池机制,复用底层TCP连接。同时配置合理的超时时间,避免慢查询拖垮整个节点。日志方面开启access_log并自定义格式,记录SQL执行耗时和错误码。定期监控MySQL的活跃连接数和锁等待状态,结合OpenResty的内存使用情况做横向扩展。
整套流程走通后,你就拥有了基于OpenResty的高性能数据库网关。实际项目中建议将Lua代码模块化,分离数据库操作逻辑与HTTP响应逻辑,配合LuaRocks管理第三方依赖。遇到连接拒绝或认证失败时,优先核对防火墙策略、MySQL账号权限和密码复杂度要求。按照上述步骤操作,基本可以覆盖绝大多数部署场景,后续可根据业务量级平滑升级架构。



