大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 数据库 -> MySQL -> Linux应用集成MySQL数据库访问技巧

Linux应用集成MySQL数据库访问技巧

时间: 2021-08-13 作者:daque

正文刻画了mysql,一种运用第三方数据库开拓电子交易和其它搀杂、动静网站的灵验东西。mysql 是一种赶快、多线程和全功效的 sql效劳器。除去刻画mysql体例的基础体制构造除外,正文还供给了以tcl和c++编写的大略示例,扶助您开拓扶助数据库的web运用。一个必需保存或考察洪量消息的运用步调不妨从运用第三方数据库产物中收获颇丰。在对消息的考察必需在步调的多个范例长进行时更是如许。鉴于web的运用(囊括电子交易)即是它的杰出例证。

干什么运用独力数据库?

web效劳器必需使其处置剧本有方法来保存相关供其此后考察的状况消息。纵然有大概运用比拟原始少许的本领--比方转储到文本文献或开拓自治的迷你数据库--但惟有老练的数据库运用本领供给更为搀杂的web运用所需的一切效劳。由于有少许免费赢得的软硬件包可用来该手段,以是编写定制的一定于运用的数据库引擎并无太大长处。 其余,运用第三方数据库还使web开拓者不用加入到开拓和保护数据库的工作中。

mysql数据库

经过运用剧本谈话和编写翻译型体例谈话(比方 c),将数据库集成到linux运用就大概十分简单。可免费赢得的mysql(在gnu public license下刊行)数据库供给了一系列搀杂的sql功效,并容易集成到运用中。mysql是赶快、多线程的,并扶助ansi和odbc sql规范。加上第三方软硬件,mysql就扶助用来工作处理当用的工作安定的表。

注:什么是工作处置?

工作是须要以亚原子办法实行的对数据库所做的一系列变动。它们要么必需十足实行,要么一个都不实行。 比方,在web上出卖产物时一切必定的数据库变动构成一个工作。数据库须要同声减去存户帐户余额和产物仓库储存,要不波折而且一个操纵都不实行。不管效劳器出于何种因为爆发解体都不该当引发难务被局部实行。比方帐单多算、产物没有托付,大概仓库储存虚假等都有大概是局部实行的工作的截止。扶助工作处置的数据库不妨将一组数据库代码封装在一个工作中,在工作实行功夫的任何波折会让数据库回滚到工作发端之前的状况。这是经过保护一切数据库操纵的日记,以及其原始状况表的副从来实行的,在波折后下一次从新启用效劳器时承诺回滚操纵。 这种功夫和空间上的开支是工作安所有据库体例所必定的一种折衷。简单mysql效劳器遏制着一系列数据库,它们都不妨经过效劳器以一致办法来考察。 每个数据库本质上都是一组大肆数目的表,观念与其它sql数据库的用户一致。每个表都由带典型的数据列构成。 数据不妨是平头、实数值、字符串或其它典型,囊括原始二进制流。 表中的每一条龙都是保存在数据库中的一个记载。

mysql被安排和构形成存户机/效劳器。 效劳器mysqld不妨在能从因特网考察到的任何呆板上运转(最佳与web效劳器在同一台或最逼近的一台呆板上,以保证有理的相应功夫)。mysql存户机运用乞求来与mysql效劳器接洽,窜改或查问效劳器所具有的数据库。 在扶助数据库的web运用步调中,数据库存户机是web效劳器或由web效劳器爆发的cgi剧本。 那些存户机不妨用高档剧本谈话或初级体例谈话编写,只有生存这种谈话的数据库api即可。在linux中,大普遍剧本谈话是以c 实行的,由于生存mysql c api,以是要将mysql扶助增添就任何现有的剧本谈话或东西该当很简单。绝大局部剧本谈话仍旧实行了这一步。

[page_break]mysql api

mysql api可用来百般谈话,囊括简直一切编写网站后端所本质运用的谈话。 运用那些api,咱们不妨建立由web效劳器遏制的 mysql存户机。

api(用来数据库考察)以鉴于贯穿的形式处事。存户机必需做的第一件事是翻开与mysql效劳器的贯穿。 这囊括符合地运用效劳器看法的用户名和口令来对贯穿举行身份认证。创造了贯穿后,效劳器采用要运用的特定命据库。 决定了初始化后,存户机运用步调(就咱们来说是效劳器方cgi剧本)就能自在地与数据库以两种办法中的一种举行交互:不妨运转惯例sql吩咐,囊括增添和简略表,以及向它们增添记载;也不妨对归来截止的数据库运转查问。 查问天生一组与查问配合的记载,而后,存户机不妨逐个考察记载,直到察看完一切记载,大概存户机废除暂挂的记载检索。一旦剧本实行了对数据库的操纵后,与效劳器的贯穿就被封闭。

要建立集成数据库考察的网站,须要编写cgi脚从来按照数据库状况天生动静截止。web效劳器启用cgi剧本,而后将符合方法化的html输入到它们的规范输入流中。web效劳器捕获到html后将它发送回存户机,犹如乞求是对静态html页面举行的那么。 在天生 html 的进程中,剧本不妨窜改数据库,也不妨查问并将截止兼并到它们的输入中。

动作大略证明上述进程的一个示例,底下的代码(以c和tcl编写)查问一个包括某公司供出卖的产物清单的数据库。 这绝没有运用两种谈话mysql api的一切个性,但供给了赶快、简略扩充的示例,不妨对数据库实质实行任何sql吩咐。 在该例中,剧本表露了低于特订价格的一切产物。 在试验中,用户大概在web欣赏器中输出该价钱,而后将它发给效劳器。 咱们省去了从情况变量中举行读取来决定 html 表单值的详细,由于它与不扶助数据库的 cgi 剧本中实行的情景没有什么分辨。 为明显起见,咱们假如事前树立了一定少许参数(比方要查问的价钱)。

以次代码是运用免费赢得的tcl generic database interface以tcl实行的。如许一种接口的长处在乎tcl是证明型的,不妨对代码举行赶快开拓和赶快窜改。tcl示例

#this code prints out all products in the database# that are below a specified price (assumed to have been determined# beforehand, and stored in the variable targetprice)# the output is in html table format, appropriate for cgi output

#load the sql shared object library. the tcl interpreter could also#have been compiled with the library, making this line unnecessaryload /home/aroetter/tcl-sql/sql.so

#these are well defined beforehand, or they could#be passed into the scriptset dbname "clientwebsite";set tblname "products";set dbhost "backend.company.com"set dbuser "mysqluser"set dbpasswd "abigsecret"

set targetprice 200;

#connect to the databaseset handle [sql connect $dbhost $dbuser $dbpasswd]sql selectdb $handle $dbname ;# get test database

#run a query using the specified sql codesql query $handle "select * from $tblname where price <= $targetprice"

#print out html table headerputs "<table border=4>"puts "<th>product id <th width=200>description <th>price (\$)"#output table rows - each fetchrow retrieves one result#from the sql querywhile {[set row [sql fetchrow $handle]] != ""} {    set prodid [lindex $row 0]    set descrip [lindex $row 1]    set price [lindex $row 2]    puts "<tr><td>$prodid <td align=center>$descrip <td>$price"}

puts "</table>"

#empty the query result buffer - should already be empty in this casesql endquery $handle#close the db connection - in practice this same connection#is used for multiple queriessql disconnect $handle

[page_break]底下的代码是运用正式mysql c++ api mysql++以c++编写的等价剧本。该本子的上风在乎它是编写翻译型的,所以比证明谈话更快。常常用在一定站点的数据库代码该当以c或c++编写,而后由剧本或径直由web效劳器考察,以矫正完全运转功夫。

c++示例

#include #include #include

const char *dbname = "clientwebsite";const char *dbtable = "products";const char *dbhost = "backend.company.com";const char *dbuser = "mysqluser";const char *dbpasswd = "abigsecret":

int main() {  try {    //open the database connection and query    connection con(dbname, dbhost, dbuser, dbpasswd);    query query = con.query();

    //write valid sql code to the query object    query << "select * from " << dbtable;

    //run the query and store the results    result res = query.store();

    //write out the html table header    cout << "<table border=4>\n";    cout << "<th>product id <th width=200>description"  << "<th>price ($)" << endl;

    result::iterator curresult;  row row;

    //iterate over each result and put it into an html table    for (curresult = res.begin(); curresult != res.end(); curresult++) {      row = *curresult;      cout << "<tr><td align=center>" << row[0]          << "<td>" << row[1]          << "<td>" << row[2] << endl;

    }    cout << "</table>" << endl;

  } catch (badquery er) {    // handle a bad query (usually caused by a sql syntax error)    cerr << "error: " << er.error <<  endl;    return -1;

  } catch (badconversion er) { //handle conversion errors out of the database as well    cerr << "error: can't convert \"" << er.data << "\" to a \""  << er.type_name << "\"." << endl;    return -1;  }  return 0;} 安定性

在web上创造以web扶助的运用有少许开拓者须要商量的题目。一切相关web效劳器上cgi步调的题目,比方web效劳器处置承诺权和剧本方的输出查看,也仍旧须要商量。

除此除外,保护数据库体例的安定性也很有需要。这波及养护数据库效劳器的承诺权体例,以及使从数据库存户机到效劳器的贯穿安定。

mysql供给了深刻的安定性体例,有人刻画它是“高档但不规范”。mysql承诺按照用户名、存户机长机和要考察的数据库对存户机举行考察。要创造安定的体例,让一切用户运用强口令,不要给她们任何她们不是一致须要的考察权。这囊括外表上无害的特权,比方不妨让用户察看一切正在运转的过程(囊括变动其余用户口令的那些)的处置特权。最佳的方法是以无特权的unix用户运转效劳器过程自己,如许即使一个数据库被揭发,也不至于击垮所有体例。 这与以用户nobody而非root用户运转httpd一致。 刻画体例考察的表是动作独立的mysql数据库保存的,不妨由mysql root用户革新。 请提防,mysql效劳器按照mysql用户名赋予特权,那些用户名与unix用户名各别。然而,有一个mysql root用户名,它对数据库有十足权力。 一旦效劳器决定了贯穿存户机是谁,以及它们在试验贯穿什么之后,就按照给定的一组权力来遏制考察权。要提防考察表中长机名被dns电子捉弄,不妨输出一切长机的ip地方,或乞求效劳器将ip地方领会回原始长机名来使其余人截获dns乞求和回复更艰巨。

除去效劳器考察表除外,与效劳器的通讯也必需很安定。从存户机登录到效劳器上时,口令不以纯文本办法发送;然而一切后续 sql 吩咐将以纯文本办法发送。为到达更高的安定性,运用ssh来树立端口转发。它将效劳器和存户机之间的一切通讯举行加密,提防有人在传输中查看它。来自存户机的数据发送给存户机当地呆板中当地ssh效劳器所侦听的端口上。它由当地ssh效劳器运用,加密后发送给长途ssh效劳器,由它举行解密并转发到mysql效劳器端口。

在本质中,最安定的本领是在 web 效劳器地方的呆板上运转数据库效劳器,并让由web效劳器爆发的cgi剧本经过unix(当地)套接字与mysql效劳器举行通讯。该树立不妨让数据库处置员禁止使用一切与mysql效劳器的长途贯穿。即使web和数据库效劳器必需坐落各别的呆板上,加密它们之间的一切通讯,大概将两台呆板经过其本人专用的、物理上分隔的搜集贯穿。只创造一个由web效劳器运用的用户帐户(除 root 用户外)以登录到数据库效劳器。

由数据库启动的网站是少许功效宏大的东西,不妨让开拓者创造供给革新消息的动静站点,并让由存户机倡导的变动在多个对话之间连接。后端数据库的运用对于处置电子交易和其它运用的用户来说必不行少。经过运用可免费赢得的软硬件,有大概创造由数据库启动的站点,安定地将数据库连通性集成到站点现有的cgi体制构造中。

参考材料

您不妨参见正文在developerworks寰球站点上的英文原文.

相关最新消息和作品,请考察mysql网页。

在mysql++上搜索c++与mysql的正式接口。

tcl gdbi( generic database interface)是用在正文中tcl示例中的tcl mysql api。

精细领会用来加密 mysql 存户机和效劳器之间一切通讯的secure shell (ssh)。它用在不确凿搜集(比方大众因特网大肆局部)长进行的通讯中。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.