Mysql复制实现,读写分离讲解以及安装失败

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

注意:这是安装失败版,所以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,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8.0生产环境二进制标准安装
MySQL8.0生产环境二进制标准安装
|
2月前
|
安全 关系型数据库 MySQL
Linux(CentOS6)安装MySQL5.6
Linux(CentOS 6)系统上安装MySQL 5.6版本的详细步骤,包括准备数据存放目录、创建用户、下载安装包、初始化数据库、配置服务脚本、设置环境变量等操作。
148 1
|
17天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
58 13
MySQL的安装&数据库的简单操作
|
9天前
|
关系型数据库 MySQL Linux
Linux 安装 mysql 【使用 tar.gz | tar.xz安装包-离线安装】
在Linux系统中使用tar.xz压缩包安装MySQL数据库的详细步骤。包括下载MySQL压缩包,解压到指定目录,创建mysql用户和组,设置目录权限,初始化MySQL,配置my.cnf文件,启动服务,以及修改root用户密码。此外,还提供了如何设置Windows远程登录MySQL服务器的方法。
Linux 安装 mysql 【使用 tar.gz | tar.xz安装包-离线安装】
|
20小时前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
7天前
|
数据采集 中间件 关系型数据库
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
20 2
|
9天前
|
关系型数据库 MySQL Linux
Linux 安装 mysql【使用yum源进行安装】
这篇文章介绍了在Linux系统中使用yum源安装MySQL数据库的步骤,包括配置yum源、安装MySQL服务、启动服务以及修改root用户的默认密码。
Linux 安装 mysql【使用yum源进行安装】
|
2月前
|
弹性计算 关系型数据库 MySQL
centos7 mysql安装及配置
本文详细介绍了在阿里云服务器ECS上通过yum源安装MySQL 8.0.12的过程,包括更新yum源、下载并安装MySQL源、解决安装过程中可能遇到的问题等步骤。此外,还介绍了如何启动MySQL服务、设置开机自启、配置登录密码、添加远程登录用户以及处理远程连接异常等问题。适合初学者参考,帮助快速搭建MySQL环境。
159 8
centos7 mysql安装及配置
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
23天前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
下一篇
无影云桌面