设为首页 收藏本站
查看: 430|回复: 0

[经验分享] Mysql复制实现,读写分离讲解以及安装失败

[复制链接]
YunVN网友  发表于 2018-10-4 06:27:07 |阅读模式
  煮酒品茶-mysql-proxy
  注意:这是安装失败版,所以mysql-proxy安装的过程就没必要看了。
  http://player.youku.com/player.php/sid/XNTgxNDY3MzMy/v.swf
  :已经讲过了mysql主从同步
  Atlas
  官方文档:http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy.html
  mysql-proxy-0.8.1 写主机也提供读
  mysql-proxy-0.8.2 写主机单纯写
  用MySQL-Proxy实现读写分离
  http://www.infoq.com/cn/news/2007/10/mysqlproxyrwsplitting
  为了实现读写分离我们需要连接池。我们仅在已打开了到一个后端的一条经过认证的连接的情况下,才切换到该后端。MySQL协议首先进行握手。当进入到查询/返回结果的阶段再认证新连接就太晚了。我们必须保证拥有足够的打开的连接才能保持运作正常。
-- 读写分离  
--
  
-- 发送所有的非事务性SELECT到一个从数据库
  
if is_in_transaction == 0 and
  
packet:byte() == proxy.COM_QUERY and
  
packet:sub(2, 7) == "SELECT" then
  
local max_conns = -1
  
local max_conns_ndx = 0
  
for i = 1, #proxy.servers do
  
local s = proxy.servers
  
-- 选择一个拥有空闲连接的从数据库
  
if s.type == proxy.BACKEND_TYPE_RO and
  
s.idling_connections > 0 then
  
if max_conns == -1 or
  
s.connected_clients < max_conns then
  
max_conns = s.connected_clients
  
max_conns_ndx = i
  
end
  
end
  
end
  
-- 我们找到了一个拥有空闲连接的从数据库
  
if max_conns_ndx > 0 then
  
proxy.connection.backend_ndx = max_conns_ndx
  
end
  
else
  
-- 发送到主数据库
  
end
  
return proxy.PROXY_SEND_QUERY
  一、什么是MySQL Proxy?
  MySQL Proxy 是一个通过网络利用MySQL 的网络协议,并且提供一个或多个MySQL服务器与一个或多个MySQL客户端相互沟通的应用程序。在大多数基本配置情况下, MySQLProxy 只是传递从客户端到MySQL 服务器的查询以及MySQL 服务器到客户端的应答。
  之所以能做到这一点,是因为MySQL Proxy 使用MySQL 的网络协议,它兼容任何MySQL的客户端(包括命令行客户端,任何使用MySQL 客户端库所开发的客户端,任何MySQL 的连接器,支持MySQL 的网络协议),都可以连接到代理服务器,并且无需修改。除了基本的传递, MySQL Proxy 也有能力监测和改变客户与服务器之间的会话。MySQL Proxy 使用Lua这种脚本式语言编写相应的脚本,并根据脚本的定义来拦截相应的查询请求。
  通过从客户端拦截相应的查询请求,MySQL Proxy可以在查询队列发送到服务器之前插入一些查询请求,也可以服务器返回的应答中将那些对应的应答删除。这个功能使得您可以对每个查询进行跟踪并获取报告。例如,监测其执行时间或其他调试信息,并分别记录结果,同时还能正确的将应答返回给客户端。综上所述,MySQL Proxy 可以让您执行额外的监控,过滤或操纵的查询,而你不需要在客户端做任何修改,因为这一切对于客户端和用户来说是透明的,他们会认为自己连接的是真正的MySQL 服务器。
  client --> mysql-proxy -->db
  client -->db
  mysql:命令选项以及配置文件语法
  http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy-configuration.html
  MySQL Proxy Scripting:
  http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy-scripting.html
15.7.4.3. Capturing a Connection with connect_server()  
15.7.4.4. Examining the Handshake with read_handshake()
  
15.7.4.5. Examining the Authentication Credentials with read_auth()
  
15.7.4.6. Accessing Authentication Information with read_auth_result()
  
15.7.4.7. Manipulating Queries with read_query()
  
15.7.4.8. Manipulating Results with read_query_result()
  Mysql Proxy 使用:
  http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy-using.html
  管理接口:
  http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy-using-admin.html
  FAQ:
  http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy-faq.ht
  FAQ:
  1、在负载平衡mysql-proxy,我怎么能分开读不能写?
  执行读取或写入到不同的后端服务器的查询有没有自动分离。但是,您可以到mysql代理指定的一个或多个的“后端”MySQL服务器是只读的。
  2、Mysql版本在5.0以上
  3、守护进程--dearm选项
  4、可以单独服务器上运行,也可以运行在dbserver上面
  5、没有特别的定制的话,整个连接会发送到相同的服务器,保持整个连接状态完好。
  6、Lua是快速,对于大多数应用应该足够小的开销。原始数据包的开销是400微秒左右。
  7、可以改变脚本和代理将重新加载它,当客户端连接。
  8、mysql proxy 不处理SSL连接
  9、最大连接数由 max_connections来控制。
  从源码安装:
  依赖:
libevent 1.x or higher (1.3b or later is preferred).  
lua 5.1.x or higher.
  
glib2 2.6.0 or higher.
  
pkg-config.
  
libtool 1.5 or higher.
  
MySQL 5.0.x or higher developer files.
  -------------
shell>yum install -y gcc gcc-c++ make mysql mysql-server mysql-devel  
shell>yum install -y libevent-devel lua-devel pkg-config glib2 libtool
  
shell> tar zxf mysql-proxy-0.8.2.tar.gz
  
shell> cd mysql-proxy-0.8.2
  
shell> ./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql5.5.32/bin/mysql_config
  
shell> make
  
To test the build, use the check target to make:
  
shell> make check
  
The tests try to connect to localhost using the root user. To provide a password, set the MYSQL_PASSWORD environment variable:
  
shell> MYSQL_PASSWORD=root_pwd make check
  
You can install using the install target:
  
shell> make install
  
By default, mysql-proxy is installed into /usr/local/sbin/mysql-proxy. The Lua example scripts are installed into /usr/local/share.
  Glib:2.32.4
yum install -y libffi-devel gettext-devel  
xz -d glib-2.32.4.tar.xz
  
tar xvf glib-2.32.4.tar
  
cd glib-2.32.4
  
./configure
  
make
  
make install
for a in `find . -name '*.pc'`; do cp $a /usr/lib64/pkgconfig/; done  设置环境变量
export GLIB_CFLAGS="-I/usr/local/include/glib-2.0"  
export GLIB_LIBS="-L/usr/local/lib/glib-2.0"
  
export GMODULE_CFLAGS="-I/usr/local/include"
  
export GMODULE_LIBS="-L/usr/local/lib"
  
export GTHREAD_CFLAGS="-I/usr/local/include"
  
export GTHREAD_LIBS="-L/usr/local/lib"
  安装错误:
  make[3]: *** [libmysql_chassis_glibext_la-glib-ext.lo] Error 1



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-611581-1-1.html 上篇帖子: CentOS 6.5下编译安装MySQL 5.6.14 下篇帖子: xtrabackup热备和恢复mysql-10931853
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表