简介

OpenResty 能够使用Lua语言快速构造出足以胜任10K+并发连接响应的超高性能web应用, 构建web应用不可避免地会访问数据库,本篇介绍openresty如何访问mysql。

本教程适用于CentOS 6.x版本。

在使用Openresty访问mysql之前,您需要先建立Openresty工作环境,可以参考在CentOS 6上搭建openresty环境,参考在Centos 6上建立lnmp建立mysql环境。

建立mysql表

在mysql数据库中建立openresty数据库和user表,其中已设置mysql访问密码为'root':

$sudo mysql -uroot -proot

mysql> CREATE DATABASE IF NOT EXISTS openresty DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

Query OK, 1 row affected (0.00 sec)

mysql> use openresty

Database changed

mysql> create table user ( id int(10) not null auto_increment, name varchar(80) not null default '', email varchar(80) not null default '', primary key(id)) DEFAULT CHARSET=UTF8;

Query OK, 0 rows affected (0.00 sec)

nginx的配置如下:

http {

init_by_lua '

mysql = require "resty.mysql"

cjson = require "cjson"

';

server {

listen 80;

server_name localhost;

location /insert {

content_by_lua_file conf/user.lua;

}

location /delete {

content_by_lua_file conf/user.lua;

}

location /query {

content_by_lua_file conf/user.lua;

}

}

}

lua脚本文件user.lua如下:

function connect_mysql()

local db, err = mysql:new()

if not db then

ngx.log(ngx.ERR, "failed to instantiate mysql: "..err)

return

end

db:set_timeout(1000) -- 1 sec

local ok, err, errno, sqlstate = db:connect{

host = '127.0.0.1',

port = 3306,

database = 'openresty',

user = 'root',

password = 'root',

max_packet_size = 1024 * 1024,

pool = "openrestypool" }

if not ok then

ngx.log(ngx.ERR, "failed to connect: ", err, errno, sqlstate)

return

end

return db

end

function keepalive(mydb)

if httpdnsdb~=nil then

local ok, err = mydb:set_keepalive(0, 1000)

if not ok then

ngx.log(ngx.ERR, "failed to set keepalive: ", err)

return

end

end

end

function myquery(querystring)

mydb=connect_mysql()

if not mydb then

ngx.say("mydb is nil.")

return;

end

local res, err, errno, sqlstate = mydb:query(querystring)

if err then

ngx.say('"error":'..err)

elseif res then

ngx.say(cjson.encode(res))

end

keepalive(mydb)

end

ngx.req.read_body()

args=ngx.req.get_uri_args()

if (ngx.var.uri == '/insert') then

ngx.req.set_header('Content-Type', 'text/html;charset=utf8');

local queryString="INSERT INTO user(name, email) VALUES('".. args.name .. "','" .. args.email .. "')"

myquery(queryString)

elseif (ngx.var.uri == '/delete') then

ngx.req.set_header('Content-Type', 'text/html;charset=utf8');

local queryString= "delete from user WHERE name='"..args.name.."'"

myquery(queryString)

elseif (ngx.var.uri == '/query') then

ngx.req.set_header('Content-Type', 'text/html;charset=utf8');

local queryString= "select * from user WHERE name='"..args.name.."'"

myquery(queryString)

end

启动nginx,并使用curl测试:

$ sudo /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf

$ curl "http://127.0.0.1/insert?name=abc&email=abc@163.com"

{"insert_id":7,"server_status":2,"warning_count":0,"affected_rows":1}

$ curl "http://127.0.0.1/query?name=abc"

[{"email":"abc@163.com","name":"abc","id":7}]

$ curl "http://127.0.0.1/delete?name=abc"

{"insert_id":0,"server_status":34,"warning_count":0,"affected_rows":1}

$ curl "http://127.0.0.1/query?name=abc"

{}

总结

使用美团云主机,可以很方便地使用yum源获取软件,建立属于自己的openresty和lua环境,访问mysql,快速实现自己10k+的超高性能WEB应用。

openresty连接mysql_在CentOS 6上使用openresty访问mysql相关推荐

  1. 如何在CentOS 7上安装和配置MySQL Cluster

    翻译&转载:https://www.howtoforge.com/tutorial/how-to-install-and-configure-mysql-cluster-on-centos-7 ...

  2. Centos系统上安装并配置mysql的教程?

    Centos下以rpm方式安装MySQL步骤如下: 一.mysql-5.7.12 rpm bundel包下载 本人喜欢把下载的文件放在/root/software路径下,便于统一管理 [root@lo ...

  3. 如何在windows上搭建mysql_如何在Windows上安装多个MySQL

    [IT168 技术文档]本文以免安装版的mysql(Without installer)为例,对如何在Windows上安装多个MySQL进行讲解. 免安装版的mysql(Without install ...

  4. 一个服务器启动2套mysql_一台服务器上启动两个mysql实例

    一台服务器上启动两个mysql实例 操作环境:centos6.8 有时由于服务器硬件资源紧张,而又需要新增mysql服务.这时我们可以采取在一台服务器上部署两个mysql实例,来解决. 1.创建新的m ...

  5. hhvm mysql_在Ubuntu系统上搭建Nginx+HHVM+MySQL开发环境的教程

    貌似最近这个HHVM特别火,其主要原因大概要归咎于大的运行效率吧,安装完之后使用探针测试,计算运行的时间都是0.0*的级别,据说在512M的内存下也可以跑的完美,大大大大大大地提高了网站运行效率.目前 ...

  6. mysql 1045 远程_启用远程mysql连接:错误1045(28000):拒绝用户访问

    启用远程mysql连接:错误1045(28000):拒绝用户访问 MySQL 5.1.31运行在WindowsXP上. 从本土化MySQL服务器(192.168.233.142)我可以root方式连接 ...

  7. 阿里云centos 7.6安装mysql_阿里云Centos7上安装MySQL教程

    1 基本安装过程 1.查看系统是否安装了mysql软件 # rpm -qa|grep -i mysql 2.将已经安装过的软件卸载掉.注意:这样的卸载是不彻底,不过这里够用了 # yum remove ...

  8. 如何在centos中找到安装mysql_如何在CentOS 7上安装MySQL

    随着CentOS 7 MySQL的发布,全球最受欢迎的开源关系数据库管理系统在CentOS的存储库中不再可用,而且MariaDB已成为默认的数据库系统. MariaDB是MySQL的向后兼容,二进制插 ...

  9. 如何在CentOS 7上使用uWSGI和Nginx来运行Django应用程序

    @(tigerfive)[tigerfive][linux学习笔记][uwsgi][django][nginx] 前言 先决条件和目标 安装和配置VirtualEnv和VirtualEnvWrappe ...

  10. 如何在 CentOS 7 上安装 Nginx

    本文首发:开发指南:如何在 CentOS 7 上安装 Nginx Nginx 读作 engine x, 是一个免费的.开源的.高性能的 HTTP 和反向代理服务,主要负责负载一些访问量比较大的站点. ...

最新文章

  1. FFTW、Eigen库在VisualStudio中的导入和使用
  2. k均值例子 数据挖掘_数据挖掘的技术有很多种,常用的数据挖掘技术就这13种...
  3. pkuseg-python的postag.zip在不能联网的服务器上的解决办法
  4. oracle语句优化积累
  5. linux下iptables详解
  6. docker快速搭建http服务器
  7. 高等数学:第八章 多元函数的微分法及其应用(6)微分法在几何上的应用
  8. Android动态申请Camera权限应用闪退问题
  9. 可穿戴产品中四大心率监测方法盘点
  10. 计算机网络-----TCP三次握手相关面试题扩展
  11. 地理坐标系_GCS汇总
  12. 找出矩阵中的最大正方形
  13. EasyNVR接入EasyNVS显示授权超时是什么原因?如何解决?
  14. SBW(线控转向系统转向盘子系统Matlab/Simulink模型搭建)
  15. 2020ciscn wp
  16. 基于STM32的触摸屏学习笔记
  17. ELK—x-pack插件
  18. java 中文域名解析idn_中文域名 原理剖析
  19. 使用HTML5拖拽实现表格列移动
  20. PLS系列001 数据预处理

热门文章

  1. 在VC中使用Windows管道技术编程
  2. 4.算法通关面试 --- 树和图
  3. 11.策略模式(Strategy Pattern)
  4. mysql字段加密存储过程_数据库:加密存储过程
  5. 中兴echat_中兴高达震撼发布12款新品 助力专网行业融合发展
  6. 编程语言 - 脚本编程 - JavaScript/Jquery/Ajax/XML/JSON/ActionScript3
  7. 2018年终总结以及未来展望
  8. 6. 集成学习(Ensemble Learning)算法比较
  9. Go基础系列:接口类型断言和type-switch
  10. hihoCoder#1743:K-偏差排列(矩阵快速幂+状压dp)