博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql复制实现,读写分离讲解以及安装失败
阅读量:6658 次
发布时间:2019-06-25

本文共 4472 字,大约阅读时间需要 14 分钟。

注意:这是安装失败版,所以mysql-proxy安装的过程就没必要看了。

:已经讲过了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协议首先进行握手。当进入到查询/返回结果的阶段再认证新连接就太晚了。我们必须保证拥有足够的打开的连接才能保持运作正常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-- 读写分离
  
--
  
-- 发送所有的非事务性
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[i]
      
-- 选择一个拥有空闲连接的从数据库
      
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

1
2
3
4
5
6
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来控制。

从源码安装:

依赖:

1
2
3
4
5
6
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.

-------------

1
2
3
4
5
6
7
8
9
10
11
12
13
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

1
2
3
4
5
6
7
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
1
for 
in 
`
find 
. -name 
'*.pc'
`; 
do 
cp 
$a 
/usr/lib64/pkgconfig/
done

设置环境变量

1
2
3
4
5
6
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

本文转自 煮酒品茶 51CTO博客,原文链接:http://blog.51cto.com/cwtea/1246156,如需转载请自行联系原作者
你可能感兴趣的文章
远程代码的调试--移动端代码调试(火狐工具)
查看>>
我的友情链接
查看>>
猎头爆料2013各大互联网公司年终奖及薪资架构
查看>>
VCS双机由于ID冲突导致启动失败
查看>>
数据库中状态表的设计
查看>>
shell 循环
查看>>
I Have A Dream !
查看>>
运维学python之爬虫基础篇(一)开篇
查看>>
IIS优化-解决IIS访问速度慢问题
查看>>
Ubuntu安装rpm文件
查看>>
ASA远程×××
查看>>
常用各种形状的鼠标
查看>>
Java Top 100热门问答(Stackoverflow)
查看>>
Centos中ftp源代的码安装与测试
查看>>
习惯可以改,前提是主动找目标
查看>>
SQL Server 2017 AlwaysOn on Linux 配置和维护(1)
查看>>
EditPlus配置C#运行环境
查看>>
登录与注册
查看>>
我的友情链接
查看>>
JavaScrip array相关操作总结
查看>>