1、简介 当今MySQL使用相当广泛,随着用户的增多以及数据量的增大,高并发随之而来。然而我们有很多办法可以缓解数据库的压力。分布式数据库、负载均衡、读写分离、增加缓存服务器等等。这里我们将采用读写分离技术进展缓解数据库的压力。 其中实现读写分离的技术有很多方法,这里我们将采用mysqlproxy这个中间软件来实现。这个软件中含有一个读写分离的lua文件,这也是我们使用mysqlproxy实现读写分离必用的文件,它需要lua解析器进行解析。因此我们还需要安装一个lua解析器2、基本环境 三台linux虚拟主机 Linux版本CentOS6。6、MySQL5。5 mysqlproxy0。8。5 lua5。1。4 ip:192。168。95。11(写)、192。168。95。12(读)、192。168。95。13(mysqlproxy)3、配置主从复制 mysql主从复制与主主复制 粗略介绍一下数据库的主从复制的配置: 第一步: 在192。168。95。11中创建一个192。168。95。12主机中可以登录的MySQL用户 用户:mysql12 密码:mysql12mysqlGRANTREPLICATIONSLAVEON。TO‘mysql12’’192。168。95。12’IDENTIFIEDBY‘mysql12’;mysqlFLUSHPRIVILEGES; 第二步: 查看192。168。95。11MySQL服务器二进制文件名与位置mysqlSHOWMASTERSTATUS; 第三步: 告知二进制文件名与位置 在192。168。95。12中执行:mysqlchangemastertomasterhost192。168。95。11,masterusermysql12,masterpasswordmysql12,masterlogfilemysqlbin。000124,masterlogpos586; 第四步: 在192。168。95。12中 mysqlSLAVESTART;开启复制 mysqlSHOWSLAVESTATUSG查看主从复制是否配置成功 主从复制配置成功! (注意:上面RelicateDoDB:aa表示主从复制只针对数据库aa【这是我之前设置的就没改了】,这里就不讲这个了,要想去了解学医这个的话可以参考文章http:www。cnblogs。comphpstudy20156p6485819。htmllabel7)4、MySQL读写分离配置 百度云下载:链接:https:pan。baidu。coms1FBW76EwfOfNb0fW878ZQ密码:?4。1、安装lua 官网下载:http:www。lua。orgdownload。html Lua是一个小巧的脚本语言。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。 一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。 1)、安装lua需要依赖很多软件包。 可以通过rpmqagrepname检查以下软件是否安装: gcc、gccc、autoconf、automake、zlib、libxml、ncursesdevel、libmcrypt、libtool、flex、pkgconfig、libevent、glib 若缺少相关的软件包,可通过yumyinstall方式在线安装,或直接从系统安装光盘中找到并通过rpmivh方式安装。(我的话一般是直接在系统光盘软件库中找到直接rpm安装的,有些找不到,则先在网上下载然后在ftp传给linux再进行安装) 2)、依赖软件安装完毕后则进行编译安装lua MySQLProxy的读写分离主要是通过rwsplitting。lua脚本实现的,因此需要安装lua。 官网下载:http:www。lua。orgdownload。html(下载源码包)wgethttp:www。lua。orgftplua5。1。4。tar。gztarzxvflua5。1。4。tar。gzcdlua5。1。4makelinuxmakeinstallexportLUACFLAGSIusrlocalincludeLUALIBSLusrlocallibllualdlLDFLAGSlm(我安装的时候是直接在光盘软件库中找到,直接rpm安装)4。2、安装mysqlproxy 1)、首先查看linux版本确认是32位还是64为系统 查看linux内核版本 catetcissue 查看linux版本 catprocversion 2)、按系统位数下载(上面百度云链接64位的文件) 3)、安装tarzxvfmysqlproxy0。8。5linuxrhel5x8664bit。tar。gzmkdirusrlocalmysqlproxycp。mysqlproxy0。8。5linuxrhel5x8664bitusrlocalmysqlproxycdusrlocalmysqlproxy 安装成功5、MySQL读写分离测试1)、修改rwsplitting。lua文件 修改默认连接,进行快速测试,不修改的话要达到连接数为4时才启用读写分离 cpusrlocalmysqlproxysharedocmysqlproxyrwsplitting。lua。 virwsplitting。lua 2)、修改完成后,启动mysqlproxycdusrlocalmysqlbin。mysqlproxyproxyreadonlybackendaddresses192。168。95。12:3306proxybackendaddresses192。168。95。11:3306proxyluascriptusrlocalmysqlproxyrwsplitting。lua 参数: proxyreadonlybackendaddresses只读服务器地址(ip) proxybackendaddresses服务器地址(主服务器) proxyluascriptlua脚本路劲 表示后台执行 3)、创建用于读写分离的数据库连接用户 用户名:proxy1 密码:321mysqlgrantallon。toproxy1192。168。95。13identifiedby321;mysqlcreatetabletab1(idintautoincrement,namevarchar(32)notnull,primarykey(id)); 【因为已经开启了主从复制所以,11、12主机mysql中都创建了这个用户】4)、测试登陆账号proxy1192。168。95。13进行添加数据 可以使用任意ip客户端登陆这个账号 在192。168。95。13登陆: 。mysqluproxy1P4040h192。168。95。13p 在两个mysql中查看结果:一致 结果表明:账号使用 (ps:id是自增长,之前高主主复制的时候更改了配置文件,还没更改回来,就将就用着先吧)5)、关闭12mysql的从复制 6)、证明写分离 使用proxy1192。168。95。13账号打开多个客户端进行插入数据 打开三个mysql客户端分别插入2条数据:mysqlinsertintotab1(name)values(stopslave11111);。mysqlinsertintotab1(name)values(stopslave6666’); 查看: 分别登陆11mysql与12mysql查看aa。tab1中的数据 主数据库: 从数据库: 结果中显示插入的数据存在与主数据库,而从数据库没有,所以证明写能够分离。7)、证明读分离 使用proxy1192。168。95。13账号登陆mysql,查看aa。tab1中的数据mysqlselectfromtab1; 结果中显示只有从数据库的数据,结合上面的测试,可以证明读分离。6、建议 为了方便启动与管理mysqlproxy可以创建mysqlproxy服务管理脚本 下面这个管理脚本仅适合以上我给出的安装路径位置 【此管理脚本需要按照自己的安装路径做出相应的修改方可使用】1!binsh234mysqlproxyThisscriptstartsandstopsthemysqlproxydaemon56chkconfig:78307processname:mysqlproxy8description:mysqlproxyisaproxydaemontomysql910Sourcefunctionlibrary。11。etcrc。dinit。dfunctions1213PROXYPATHusrlocalbin14PROXYPATHusrlocalmysqlproxybin1516progmysqlproxy1718Sourcenetworkingconfiguration。19。etcsysconfignetwork2021Checkthatnetworkingisup。22〔{NETWORKING}no〕exit02324Setdefaultmysqlproxyconfiguration。25PROXYOPTIONSdaemon2627PROXYOPTIONSproxyreadonlybackendaddresses192。168。95。12:3306proxybackendaddresses192。168。95。11:3306proxyluascriptusrlocalmysqlproxyrwsplitting。lua2829PROXYPIDusrlocalmysqlproxyrunmysqlproxy。pid3031Sourcemysqlproxyconfiguration。32if〔fetcsysconfigmysqlproxy〕;then33。etcsysconfigmysqlproxy34fi3536PATHPATH:usrbin:usrlocalbin:PROXYPATH37Bydefaultitsallgood38RETVAL03940Seehowwewerecalled。41case1in42start)43Startdaemon。44echon34;Startingprog:45NICELEVELPROXYPATHmysqlproxyPROXYOPTIONSdaemonpidfilePROXYPIDuserrootlogleveldebuglogfileusrlocalmysqlproxylogmysqlproxy。log46RETVAL?47echo48if〔RETVAL0〕;then49touchvarlocksubsysmysqlproxy〕50echook51fi52;;53stop)54Stopdaemons。55echon34;Stoppingprog:56killprocprog57RETVAL?58echo59if〔RETVAL0〕;then60rmfvarlocksubsysmysqlproxy61rmfPROXYPID62fi63;;64restart)650stop66sleep3670start68;;69condrestart)70〔evarlocksubsysmysqlproxy〕0restart71;;72status)73statusmysqlproxy74RETVAL?75;;76)77echoUsage:0{startstoprestartstatuscondrestart}78RETVAL179;;80esac81exitRETVAL我将mysqlproxy服务管理脚本放在了usrlocalmysqlproxyinit。d文件夹里给执行权限,建立相应目录chmodxusrlocalmysqlproxyinit。dmysqlproxymkdirusrlocalmysqlproxyrunmkdirusrlocalmysqlproxylogcdusrlocalmysqlproxyinit。d启动mysqlproxy。mysqlproxystart停止mysqlproxy。mysqlproxystop重启mysqlproxy。mysqlproxyrestart 一些相关参数: PROXYPATHusrlocalmysqlproxybin定义mysqlproxy服务二进制文件路径 proxyreadonlybackendaddresses192。168。95。12:3306定义后端只读从服务器地址 proxybackendaddresses192。168。95。11:3306定义后端主服务器地址 proxyluascriptusrlocalmysqlproxyrwsplitting。lua定义lua读写分离脚本路径 PROXYPIDusrlocalmysqlproxyrunmysqlproxy。pid定义mysqlproxyPID文件路径 daemon定义以守护进程模式启动 keepalive使进程在异常关闭后能够自动恢复【上面的管理脚本没有加上此参数】 userroot以root用户身份启动服务 logleveldebug定义log日志级别,由高到低分别有(errorwarninginfomessagedebug) logfileusrlocalmysqlproxylogmysqlproxy。log定义log日志文件路径 (以上是自己的一些见解与总结,若有不足或者错误的地方请各位指出) 如果本文对你有帮助,别忘记给我个3连,点赞,转发,评论, 咱们下期见。 原文出处:https:www。cnblogs。comphpstudy20156p6687480。html