Openresty最佳案例 | 第6篇:OpenResty連線Mysql
centos 安裝mysl
Centos系統下安裝mysql,先下載mysql-community-release-el7-5.noarch.rpm,然後通過yum安裝,安裝過程一直確定【Y】即可。
cd /usr/downloads/
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server
安裝成功後,重啟mysql,並進入mysql資料庫,給root使用者設定一個密碼,密碼為“123”。
service mysqld restart
mysql -u root -p
set password for [email protected] = password('123');
openresty連線mysql
lua-resty-mysql - Lua MySQL client driver for ngx_lua based on the cosocket API
lua-resty-mysql模組是基於cosocket API 為ngx_lua提供的一個Lua MySQL客戶端。它保證了100%非阻塞。
vim /usr/example/lua/test_mysql.lua,新增以下的程式碼:
local function close_db(db) if not db then return end db:close() end local mysql = require("resty.mysql") local db, err = mysql:new() if not db then ngx.say("new mysql error : ", err) return end db:set_timeout(1000) local props = { host = "127.0.0.1", port = 3306, database = "mysql", user = "root", password = "123" } local res, err, errno, sqlstate = db:connect(props) if not res then ngx.say("connect to mysql error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db) end local drop_table_sql = "drop table if exists test" res, err, errno, sqlstate = db:query(drop_table_sql) if not res then ngx.say("drop table error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db) end local create_table_sql = "create table test(id int primary key auto_increment, ch varchar(100))" res, err, errno, sqlstate = db:query(create_table_sql) if not res then ngx.say("create table error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db) end local insert_sql = "insert into test (ch) values('hello')" res, err, errno, sqlstate = db:query(insert_sql) if not res then ngx.say("insert error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db) end res, err, errno, sqlstate = db:query(insert_sql) ngx.say("insert rows : ", res.affected_rows, " , id : ", res.insert_id, "<br/>") local update_sql = "update test set ch = 'hello2' where id =" .. res.insert_id res, err, errno, sqlstate = db:query(update_sql) if not res then ngx.say("update error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db) end ngx.say("update rows : ", res.affected_rows, "<br/>") local select_sql = "select id, ch from test" res, err, errno, sqlstate = db:query(select_sql) if not res then ngx.say("select error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db) end for i, row in ipairs(res) do for name, value in pairs(row) do ngx.say("select row ", i, " : ", name, " = ", value, "<br/>") end end ngx.say("<br/>") local ch_param = ngx.req.get_uri_args()["ch"] or '' local query_sql = "select id, ch from test where ch = " .. ngx.quote_sql_str(ch_param) res, err, errno, sqlstate = db:query(query_sql) if not res then ngx.say("select error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db) end for i, row in ipairs(res) do for name, value in pairs(row) do ngx.say("select row ", i, " : ", name, " = ", value, "<br/>") end end local delete_sql = "delete from test" res, err, errno, sqlstate = db:query(delete_sql) if not res then ngx.say("delete error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db) end ngx.say("delete rows : ", res.affected_rows, "<br/>") close_db(db)
在上面的程式碼中,展示了基本的創表、插入資料、修改資料、查詢資料、刪除資料的一些功能。
其中用到的lua-resty-mysql的一些API方法:
- syntax: db, err = mysql:new() 建立一個mysql資料庫連線物件
- syntax: ok, err = db:connect(options) 嘗試遠端連線mysql
- host mysql的主機名
- port 埠
- database 資料庫名
- user 使用者名稱
- password 密碼
- charset 編碼
- syntax: db:set_timeout(time) 設定資料庫連線超時時間
- syntax: ok, err = db:set_keepalive(max_idle_timeout, pool_size) 設定連線池
- syntax: ok, err = db:close() 關閉資料庫
- syntax: bytes, err = db:send_query(query) 傳送查詢
lua-resty-mysql的一些關鍵的API方法,見https://github.com/openresty/lua-resty-mysql#table-of-contents
vim /usr/example/example.conf 在配置檔案配置:
location /lua_mysql {
default_type 'text/html';
lua_code_cache on;
content_by_lua_file /usr/example/lua/test_mysql.lua;
}
瀏覽器訪問http://116.196.177.123/lua_mysql,瀏覽器顯示以下的內容:
insert rows : 1 , id : 2
update rows : 1
select row 1 : ch = hello
select row 1 : id = 1
select row 2 : ch = hello2
select row 2 : id = 2
delete rows : 2
掃碼關注公眾號有驚喜
(轉載本站文章請註明作者和出處 方誌朋的部落格)
相關推薦
Openresty最佳案例 | 第6篇:OpenResty連線Mysql
centos 安裝mysl Centos系統下安裝mysql,先下載mysql-community-release-el7-5.noarch.rpm,然後通過yum安裝,安裝過程一直確定【Y】即可。 cd /usr/downloads/ wget http:
Openresty最佳案例 | 第9篇:Openresty實現的閘道器許可權控制
簡介 採用openresty 開發出的api閘道器有很多,比如比較流行的kong、orange等。這些API 閘道器通過提供外掛的形式,提供了非常多的功能。這些元件化的功能往往能夠滿足大部分的需求,如果要想達到特定場景的需求,可能需要二次開發,比如RBAC許可
Openresty最佳案例 | 第7篇: 模組開發、OpenResty連線Redis
Lua模組開發 在實際的開發過程中,不可能把所有的lua程式碼寫在一個lua檔案中,通常的做法將特定功能的放在一個lua檔案中,即用lua模組開發。在lualib目錄下,預設有以下的lua模組。 lualib/ ├── cjson.so ├── ngx │
Openresty最佳案例 | 第1篇:Nginx介紹
Nginx 簡介 Nginx是一個高效能的Web 伺服器,同時是一個高效的反向代理伺服器,它還是一個IMAP/POP3/SMTP 代理伺服器。 由於Nginx採用的是事件驅動的架構,能夠處理併發百萬級別的tcp連線,高度的模組化設計和自由的BSD許可,使得Ng
讀書筆記 ---- 《深入理解Java虛擬機器》---- 第6篇:虛擬機器類載入機制
上一篇:類檔案結構:https://blog.csdn.net/pcwl1206/article/details/84197219 第6篇:虛擬機器類載入機制 1、概述 上一篇文章中講訴了Class檔案儲存格式的具體細節,在Class檔案中的描述的各種資訊,最終都要載入到虛擬機器中之後才
【搞定Java併發程式設計】第6篇:ThreadLocal詳解
上一篇:synchronized關鍵字:https://blog.csdn.net/pcwl1206/article/details/84849400 目 錄: 1、ThreadLocal是什麼? 2、ThreadLocal使用示例 3、ThreadLocal原始碼分析
Spring-Cloud系列第6篇:spring-cloud-bus
介紹 在之前的Spring Cloud Config的介紹中,我們還留了一個懸念:如何實現對配置資訊的實時更新。 通過/refresh介面和Git倉庫的Web Hook來實現Git倉庫中的內容修改觸發應用程式的屬性更新這是一個好的方法,但是我沒講,因
【搞定MySQL資料庫】第6篇:索引的概述
本文為本人學習極客時間《MySQL實戰45講》的學習筆記。 原文連結:https://time.geekbang.org/column/article/69236 &n
Maven系列第6篇:生命週期和外掛詳解,此篇看過之後在maven的理解上可以超越同級別90%的人!
maven系列目標:從入門開始開始掌握一個高階開發所需要的maven技能。 這是maven系列第6篇。 整個maven系列的內容前後是有依賴的,如果之前沒有接觸過maven,建議從第一篇看起,本文尾部有maven完整系列的連線。 前面我們使用maven過程中,用到了一些命令,如下: mvn clean mvn
第 6 篇:django rest framework 分頁介面
![](https://img2020.cnblogs.com/blog/759200/202004/759200-20200415161158343-1662112908.jpg) 作者:[HelloGitHub-追夢人物](https://www.zmrenwu.com) 如果沒有設定分頁,djang
恕我直言你可能真的不會java第6篇:Stream效能差?不要人云亦云
## 一、粉絲的反饋 ![](https://img2020.cnblogs.com/other/1815316/202006/1815316-20200624093741455-532502751.png) **問:stream比for迴圈慢5倍,用這個是為了啥?** 答:網際網路是一個新聞氾濫的時代,三
機器學習 第6篇:線性模型概述
在迴歸分析中,線性模型的一般預測公式是: 是預測值,讀作"y hat",是特徵的線性組合,把向量w稱作 coef_(係數),公式是: 把w0稱作intercept_(截距),這兩個屬性是線性模型的共有屬性。 一,線性迴歸 最基本的線性模型是線性迴歸,也稱作最小二乘法(OL
易筋SpringBoot 2.1 | 第六篇:JdbcTemplate訪問MySQL
寫作時間:2019-01-03 Spring Boot: 2.1 ,JDK: 1.8, IDE: IntelliJ IDEA, MySQL 8.0.13 說明 資料需要持久化儲存,無論是客戶端的SQLLITE,還是服務端的MySQL。這裡記錄最原始的訪問資料庫方式,JdbcTempl
Mysql高手系列 - 第22篇:深入理解mysql索引原理,連載中
Mysql系列的目標是:通過這個系列從入門到全面掌握一個高階開發所需要的全部技能。 歡迎大家加我微信itsoku一起交流java、演算法、資料庫相關技術。 這是Mysql系列第22篇。 背景 使用mysql最多的就是查詢,我們迫切的希望mysql能查詢的更快一些,我們經常用到的查詢有: 按照id查詢唯一一條
jdbc篇第6課:使用properties當做Dbc的配置檔案
這節課我們實現一個功能,我們把連線mysql要用到的資訊放在properties配置檔案裡,讓Dbc載入這個檔案讀取配置資訊給我們返回一個Connection物件 實現: package com.tool; import java.io.*; impo
HTML5學習第6篇—video:自己實現video的播放控制元件(新增樣式版)
本篇部落格接著上一篇文章,實現了一個帶樣式的video播放控制元件,程式碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">
mysql學習【第6篇】:資料庫之表與表之間的關係 資料庫之 表與表之間的關係
資料庫之 表與表之間的關係 表1 foreign key 表2 則表1的多條記錄對應表2的一條記錄,即多對一
Django學習【第6篇】:Django之ORM單表操作(增刪改查)
大小寫 則表達式 分享 cnblogs 可能 集合 數據庫 cut 對象 django之數據庫表的單表查詢 一、添加表記錄 對於單表有兩種方式 # 添加數據的兩種方式 # 方式一:實例化對象就是一條表記錄
Spring Cloud系列教程 | 第七篇:使用Spring Cloud Zuul實現過濾器或攔截器功能案例
推薦 Spring Cloud 視訊: 使用Spring Cloud Zuul實現過濾器或攔截器功能案例 Spring Cloud的API閘道器不但可以實現類似NGINX+Lua強大的路由分發,實現動靜頁面的分流,更重要可以實現對所有發往後端微服務請求的攔
深入理解iputils網路工具-第6篇 rarpd:逆地址解析程式
6.1 引言 通過逆地址解析協議RARP,客戶端可以通過硬體地址得到對應的IP地址,一般用於無盤系統中,用以獲得自身的IP地址。rarpd就是處理RARP請求的伺服器程式。 RARP分組的格式與ARP分組基本一致。它們之間主要的差別是RARP請求或應答的幀型別程式碼為0x8035