问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql 如何实现读写分离,用mysql-proxy 或者直接用php连接两个数据库...

发布网友 发布时间:2022-04-30 21:52

我来回答

2个回答

懂视网 时间:2022-05-01 02:34

场景描述:

数据库Master主服务器:192.168.203.138

数据库Slave从服务器:192.168.203.133

MySQL-Proxy调度服务器:192.168.203.134

 

以下操作,均是在192.168.203.134即MySQL-Proxy调度服务器上进行的。

 

3.1 MySQL的安装与配置

具体的安装过程与上文相同。

 

3.2 检查系统所需软件包

通过 rpm -qa | grep name 的方式验证以下软件包是否已全部安装。

gcc* gcc-c++* autoconf* automake* zlib*libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*

libevent* glib*

yum install epel* -y

 

若缺少相关的软件包,可通过yum -y install方式在线安装,或直接从系统安装光盘中找到并通过rpm -ivh方式安装。

 

3.3 编译安装lua

MySQL-Proxy的读写分离主要是通过rw-splitting.lua脚本实现的,因此需要安装lua。

 

lua可通过以下方式获得

从http://www.lua.org/download.html下载源码包

 

从rpm.pbone.net搜索相关的rpm包

download.fedora.redhat.com/pub/fedora/epel/5/i386/lua-5.1.4-4.el5.i386.rpm

download.fedora.redhat.com/pub/fedora/epel/5/x86_64/lua-5.1.4-4.el5.x86_64.rpm

上面的链接不能链接使用下面地址

 

wgethttp://110.96.193.10:82/1Q2W3E4R5T6Y7U8I9O0P1Z2X3C4V5B/down1.chinaunix.net/distfiles/lua-5.1.tar.gz

这里我们建议采用源码包进行安装

cd /opt/install

wget http://www.lua.org/ftp/lua-5.1.4.tar.gz

tar zvfx lua-5.1.4.tar.gz

cd lua-5.1.4

 

vi src/Makefile

在 CFLAGS= -O2 -Wall $(MYCFLAGS) 这一行记录里加上-fPIC,更改为 CFLAGS=-O2 -Wall -fPIC $(MYCFLAGS) 来避免编译过程中出现错误。

 

make linux

出现系列错误提示解决办法

make linux

在包含自 lua.h:16 的文件中,

从 lua.c:15:

luaconf.h:275:31: 错误:readline/readline.h:没有那个文件或目录

luaconf.h:276:30: 错误:readline/history.h:没有那个文件或目录

lua.c: In function‘pushline’:

lua.c:182: 警告:隐式声明函数‘readline’

lua.c:182: 警告:赋值时将整数赋给指针,未作类型转换

lua.c: In function‘loadline’:

lua.c:210: 警告:隐式声明函数‘add_history’

make[2]: *** [lua.o] 错误 1

make[2]: Leavingdirectory `/data0/software/lua-5.1.4/src’

make[1]: *** [linux] 错误 2

make[1]: Leavingdirectory `/data0/software/lua-5.1.4/src’

make: *** [linux] 错误 2

yum install libtermcap-devel ncurses-devellibevent-devel readline-devel

make install

 

cp etc/lua.pc /usr/lib/pkgconfig/

exportPKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig

 

3.4 安装配置MySQL-Proxy

MySQL-Proxy可通过以下网址获得:

http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/

上面地址不能获取地址的话使用下面地址

wgethttp://mirrors.sohu.com/mysql/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

 

推荐采用已经编译好的二进制版本,因为采用源码包进行编译时,最新版的MySQL-Proxy对automake,glib以及libevent的版本都有很高的要求,而这些软件包都是系统的基础套件,不建议强行进行更新。

并且这些已经编译好的二进制版本在解压后都在统一的目录内,因此建议选择以下版本:

32位RHEL5平台:

http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz

64位RHEL5平台:

http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

 

测试平台为RHEL5 32位,因此选择32位的软件包

wgethttp://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

 

tar xzvf mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

mv mysql-proxy-0.8.4-linux-rhel5-x86-64bit/opt/mysql-proxy

 

创建mysql-proxy服务管理脚本

mkdir /opt/mysql-proxy/init.d/

 

vim mysql-proxy

 

01     #!/bin/sh

02     #

03     #mysql-proxy This script starts and stops the mysql-proxy daemon

04     #

05     #chkconfig: - 78 30

06     #processname: mysql-proxy

07     #description: mysql-proxy is a proxy daemon to mysql

08    

09     #Source function library.

10     ./etc/rc.d/init.d/functions

11    

12     #PROXY_PATH=/usr/local/bin

13     PROXY_PATH=/opt/mysql-proxy/bin

14    

15     prog="mysql-proxy"

16    

17     #Source networking configuration.

18     ./etc/sysconfig/network

19    

20     #Check that networking is up.

21     [${NETWORKING} = "no" ] && exit 0

22    

23     #Set default mysql-proxy configuration.

24     #PROXY_OPTIONS="--daemon"

25     PROXY_OPTIONS="--proxy-read-only-backend-addresses=192.168.203.133:3306--proxy-backend-addresses=192.168.203.138:3306--proxy-lua-script=/opt/mysql-proxy/scripts/rw-splitting.lua"

26     PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid

27    

28     #Source mysql-proxy configuration.

29     if[ -f /etc/sysconfig/mysql-proxy ]; then

30             . /etc/sysconfig/mysql-proxy

31     fi

32    

33     PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH

34    

35     #By default it‘s all good

36     RETVAL=0

37    

38     #See how we were called.

39     case"$1" in

40       start)

41             # Start daemon.

42             echo -n $"Starting $prog: "

43             $NICELEVEL $PROXY_PATH/mysql-proxy$PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=mysql --log-level=warning--log-file=/opt/mysql-proxy/log/mysql-proxy.log

44             RETVAL=$?

45             echo

46             if [ $RETVAL = 0 ]; then

47                     touch/var/lock/subsys/mysql-proxy

48             fi

49            ;;

50       stop)

51             # Stop daemons.

52             echo -n $"Stopping $prog: "

53             killproc $prog

54             RETVAL=$?

55             echo

56             if [ $RETVAL = 0 ]; then

57                     rm -f/var/lock/subsys/mysql-proxy

58                     rm -f $PROXY_PID

59             fi

60            ;;

61       restart)

62             $0 stop

63             sleep 3

64             $0 start

65            ;;

66       condrestart)

67            [ -e /var/lock/subsys/mysql-proxy ]&& $0 restart

68           ;;

69       status)

70             status mysql-proxy

71             RETVAL=$?

72            ;;

73       *)

74             echo "Usage: $0{start|stop|restart|status|condrestart}"

75             RETVAL=1

76            ;;

77     esac

78    

79     exit$RETVAL

脚本参数详解:

==============================================

PROXY_PATH=/opt/mysql-proxy/bin //定义mysql-proxy服务二进制文件路径

 

PROXY_OPTIONS="--admin-username=root //定义内部管理服务器账号

--admin-password=password //定义内部管理服务器密码

--proxy-read-only-backend-addresses=192.168.10.131:3306 //定义后端只读从服务器地址

--proxy-backend-addresses=192.168.10.130:3306 //定义后端主服务器地址

--admin-lua-script=/opt/mysql-proxy/lib/mysql-proxy/lua/admin.lua //定义lua管理脚本路径

--proxy-lua-script=/opt/mysql-proxy/scripts/rw-splitting.lua" //定义lua读写分离脚本路径

 

PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid//定义mysql-proxy PID文件路径

 

$NICELEVEL $PROXY_PATH/mysql-proxy$PROXY_OPTIONS

--daemon //定义以守护进程模式启动

--keepalive //使进程在异常关闭后能够自动恢复

--pid-file=$PROXY_PID //定义mysql-proxyPID文件路径

--user=mysql //以mysql用户身份启动服务

--log-level=warning //定义log日志级别,由高到低分别有(error|warning|info|message|debug)

--log-file=/opt/mysql-proxy/log/mysql-proxy.log//定义log日志文件路径

==============================================

 

cp mysql-proxy /opt/mysql-proxy/init.d/

chmod +x/opt/mysql-proxy/init.d/mysql-proxy

 

mkdir /opt/mysql-proxy/run

mkdir /opt/mysql-proxy/log

 

mkdir /opt/mysql-proxy/scripts

 

配置并使用rw-splitting.lua读写分离脚本

最新的脚本我们可以从最新的mysql-proxy源码包中获取

cd /opt/install

 

wgethttp://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz

 

tar xzvf mysql-proxy-0.8.4.tar.gz

cd mysql-proxy-0.8.4

cp lib/rw-splitting.lua/opt/mysql-proxy/scripts

 

修改读写分离脚本rw-splitting.lua

修改默认连接,进行快速测试,不修改的话要达到连接数为4时才启用读写分离

vim /opt/mysql-proxy/scripts/rw-splitting.lua

=============================

-- connection pool

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 1, //默认为4

max_idle_connections = 1, //默认为8

is_debug = false

}

end

=============================

 

修改完成后,启动mysql-proxy

/opt/mysql-proxy/init.d/mysql-proxy start


本文出自 “学习linux” 博客,请务必保留此出处http://10265013.blog.51cto.com/10255013/1762207

读写分离mysql-proxy

标签:mysql-proxy 读写分离

热心网友 时间:2022-04-30 23:42

Mysql主从配置,实现读写分离
原理:主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。
具体实现:
1、在主从服务器上都装上MySQL数据库,windows系统鄙人安装的是mysql_5.5.25.msi版本,Ubuntu安装的是mysql-5.6.22-linux-glibc2.5-i686.tar
windows安装mysql就不谈了,一般地球人都应该会。鄙人稍微说一下Ubuntu的MySQL安装,我建议不要在线下载安装,还是离线安装的好。大家可以参考 http://www.linuxidc.com/Linux/2013-01/78716.htm 这位不知道大哥还是姐妹,写的挺好按照这个就能装上。在安装的时候可能会出现几种现象,大家可以参考解决一下:
(1)如果您不是使用root用户登录,建议 su - root 切换到Root用户安装,那就不用老是 sudo 了。
(2)存放解压的mysql 文件夹,文件夹名字最好改成mysql
(3)在./support-files/mysql.server start 启动MySQL的时候,可能会出现一个警告,中文意思是启动服务运行读文件时,忽略了my.cnf文件,那是因为my.cnf的文件权限有问题,mysql会认为该文件有危险不会执行。但是mysql还会启动成功,但如果下面配置从服务器参数修改my.cnf文件的时候,你会发现文件改过了,但是重启服务时,修改过后的配置没有执行,而且您 list一下mysql的文件夹下会发现很多.my.cnf.swp等中间文件。这都是因为MySQL启动时没有读取my.cnf的原因。这时只要将my.cnf的文件权限改成my_new.cnf的权限一样就Ok,命令:chmod 644 my.cnf就Ok
(4)Ubuntu中修改文档内容没有Vim,最好把Vim 装上,apt-get install vim,不然估计会抓狂。
这时候我相信MySQL应该安装上去了。
2、配置Master主服务器
(1)在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
有哪些让孩子长高的法宝推荐? 9月末去锦州世博园好么 血府逐瘀片的功效 ...看上一个长款牛仔衬衫,但是我的尺码没有了 请大家帮我配个电脑 。cpu 主板 内存 硬盘 显卡 显示器 电源 机箱 .当... 少儿太空科普知识有哪些? 菲翔Viaggio怠速时发动机嗬哒嗬哒响 菲翔发动机异响? 菲翔Viaggio发动机异响 聚丙烯网状纤维介绍 php+mysql实现读写分离,该怎么解决 php mysql 怎么实现读写分离 内网与外网的区分! 数学日记是什么意思?急急急急急急急急急急急急急急急急急急急急!!!!!!!!!好的追加!!!!万急 一篇300到400字的数学周记 四年级数学周记 四年级的数学周记 怎样写“数学周记” 什么是数学周记??? 南京怎么坐机场大巴去禄口机场 南京禄口机场t1和t2距离多远? 龙蟠sonic9000是不是真的全合成还是合成型 从南京禄口机场到南京火车站的详细路线,谢谢! 国产机油龙蟠9000测评是什么? 明清时期资本主义的发展历程 为什么说“资本主义到世间,从头到脚,每个毛孔 英国主要资本主义的社会发展简史 西方资本主义发展历史多久了 概述19世纪晚期到20世纪初期资本主义发展史这一阶段的时代特征并分析其原因。 英国资本主义发展史 php mysql读写分离的原理好处,什么情况下需要读写分离,怎样做到读写... php+mysql 为什么要将数据库的读写分离 如何用PHP脚本修改mySQL数据库? PHP脚本要放到哪里,如何执行? 菜鸟问题... MySQL 不能写入 !PHP脚本写好了却怎么都写不进去! php MySQL 很多用户频繁读写操作怎么优化 mysql数据库读写分离的文档发给我学习学习linux/freebsd/unix 环境的都... php无法读写mysql php + mysql 读写记录的问题 mysql数据库中有一张Student表,请编写php程序,从该表中读出所有记录,并... php+mysql 怎样可以实现 即使不打开php页面,每隔30秒,mysql都可以自动删... 易人社显示该亲友已存在还认证吗? 乌龙茶是什么茶系? 苹果手机怎么认证易人社系统? 利息是0.015元利率怎么算? 请问90000元的本金,0.015%的利率,月利率是多少钱?年利率是多少钱? 100000元,月利息0.015,两个月,应该是多少利息 信用卡月利率是多少,我信贷是9厘的利息! 用彩铅如何给桃花上色 漫画手法画的桃花图、 如何实现数据库的同步读写