DBProxy快速入门教程

目录

1. DBProxy简介 1

2. DBProxy主要功能 2

3. DBProxy安装 2

3.1. 安装依赖项 8

3.1.1. 安装wget工具 8

3.1.2. 安装git工具 8

3.1.3. 安装epel企业版Linux额外包 9

3.1.4. 安装Percona 5.5数据库 9

3.1.5. 安装MySQL 5.6数据库 10

3.1.6. 安装jemalloc内存分配器 15

3.1.7. 安装libevent 高性能事件通知库 15

3.1.8. 安装openssl 开源SSL加密库 16

3.1.9. 安装lua脚本语言 16

3.1.10. 安装Bison 解析器生成器 17

3.1.11. 安装libffi外部函数接口 17

3.1.12. 安装mysql-devel等工具 18

3.1.13. 安装libgnomeui-devel GUI应用程序 18

3.1.14. 安装glib程序工具包 19

3.2. 安装DBProxy源码 21

4. DBProxy部署 24

4.1. 部署结构介绍 24

4.2. 配置文件的配置 25

4.3. 启动DBProxy 26

5. 连接DBProxy 28

5.1. DBProxy的端口介绍 28

5.2. 连接admin端口 28

5.3. 连接proxy端口 29

6. 常见问题 32

7. 参考文档 33

  1. DBProxy简介

DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层。它在奇虎360公司开源的Atlas基础上,修改了部分bug,并且添加了很多特性。目前DBProxy在美团点评广泛应用,包括美团支付、酒店旅游、外卖、团购等产品线,公司内部对DBProxy的开发全面转到github上,开源和内部使用保持一致。目前只支持MySQL(Percona)5.5和5.6。

  1. DBProxy主要功能

  1. 读写分离
  2. 从库负载均衡
  3. IP过滤
  4. 分表
  5. DBA可平滑上下线DB
  6. 自动摘除宕机的DB
  7. 监控信息完备
  8. SQL过滤
  9. 从库流量配置
  1. DBProxy安装

  1. 虚拟机版本:VMware® Workstation 15 Pro 15.5.1 build-15018445

  1. 操作系统版本:CentOS-7-x86_64-DVD-1908.iso

进入网络脚本目录:

cd /etc/sysconfig/network-scripts/

编辑网络配置文件:

vi ifcfg-ens33

将ONBOOT=no改为yes

执行重启网络服务命令:

service network restart

执行查看IP地址命令:

ip addr

  1. 使用Xshell连接CentOS服务器

输入名称、主机等:

输入用户名、密码:

单击接受并保存:

连接成功:

  1. 安装依赖项

    1. 安装wget工具

yum install -y wget

  1. 安装git工具

yum install -y git

  1. 安装epel企业版Linux额外包

yum install -y epel-release

  1. 安装Percona 5.5数据库

yum install -y Percona-Server-devel-55.x86_64 Percona-Server-client-55.x86_64 Percona-Server-shared-55

注意:

没有可用的软件包Percona-Server-devel-55.x86_64。

没有可用的软件包Percona-Server-client-55.x86_64。

没有可用的软件包Percona-Server-shared-55。

即使手动下载安装,也不能正常运行。

  1. 安装MySQL 5.6数据库

使用以下方法,重新安装MySQL 5.6,替换Percona 5.5。

在根目录执行下载命令,添加MySQL Yum存储库:

rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-9.noarch.rpm

在MySQL Yum存储库(https://repo.mysql.com/yum/)中,不同版本的MySQL Community Server托管在不同的子存储库中。默认情况下,默认启用最新GA系列(当前为MySQL 8.0)的子存储库,而所有其他系列(例如,MySQL 5.6系列)的子存储库均被禁用。使用此命令可查看MySQL Yum存储库中的所有子存储库,并查看已启用或禁用了哪些子存储库(对于启用dnf的系统,请使用dnf替换 命令中的 yum):

yum repolist all | grep mysql

通过手动编辑文件来选择MySQL版本:

vi /etc/yum.repos.d/mysql-community.repo

查找要配置的子存储库的条目,然后编辑enabled选项。指定 enabled=0禁用子存储库或 enabled=1启用子存储库。

通过运行以下命令并检查其输出来验证是否已启用和禁用正确的子存储库:

yum repolist all | grep mysql

安装MySQL:

yum install -y mysql-community-server

启动MySQL服务:

service mysqld start

登录MySQL:

mysql

登录mysql,初始登录不需要密码:

mysql -uroot -p

切换数据库至mysql:

use mysql;

修改允许外部远程访问:

UPDATE user SET Host = '%' WHERE User= 'root' LIMIT 1;

flush privileges;

修改密码:

update user SET password = PASSWORD('123456') WHERE user = 'root';

flush privileges;

在Linux里面开放防火墙对应端口:

firewall-cmd --permanent --zone=public --add-port=3306/tcp

firewall-cmd --permanent --zone=public --add-port=3308/tcp

firewall-cmd --permanent --zone=public --add-port=3309/tcp

firewall-cmd --reload

  1. 使用Navicat Premium连接MySQL服务器

输入连接名、主机名、用户名、密码等:

连接成功:

  1. 安装jemalloc内存分配器

yum install -y jemalloc jemalloc-devel

  1. 安装libevent 高性能事件通知库

yum install -y libevent libevent-devel

  1. 安装openssl 开源SSL加密库

yum install -y openssl openssl-devel

  1. 安装lua脚本语言

yum install -y lua lua-devel

  1. 安装Bison 解析器生成器

yum install -y bison flex libtool.x86_64

  1. 安装libffi外部函数接口

yum install -y libffi libffi-devel

  1. 安装mysql-devel等工具

yum install -y mysql-devel gcc gcc-devel python-devel

  1. 安装libgnomeui-devel GUI应用程序

yum install -y libgnomeui-devel

  1. 安装glib程序工具包

在根目录执行下载命令:

wget https://src.fedoraproject.org/repo/pkgs/mingw-glib2/glib-2.42.0.tar.xz/71af99768063ac24033ac738e2832740/glib-2.42.0.tar.xz

执行解压命令:

tar xvJf glib-2.42.0.tar.xz

进入解压目录命令:

cd glib-2.42.0

执行安装命令:

autoreconf -ivf

执行脚本配置命令:

./configure --prefix=/usr/local/glib-2.42.0

执行编译命令:

make && make install

  1. 安装DBProxy源码

在根目录执行下载命令:

git clone https://gitee.com/mirrors/dbproxy.git

进入解压目录命令:

cd dbproxy

执行安装命令:

sh autogen.sh

注意:

不使用默认的glib,使用上面新编译的版本,变更glib编译选项,替换原始的bootstrap.sh的内容。

执行编辑bootstrap文件命令:

vi bootstrap.sh

bootstrap文件内容:

#!/bin/sh

base=$(cd "$(dirname "$0")"; pwd)

cd $base

./configure --prefix=/usr/local/mysql-proxy CFLAGS="-g -O0" \

GLIB_CFLAGS="-I/usr/local/glib-2.42.0/include/glib-2.0 -I/usr/local/glib-2.42.0/lib/glib-2.0/include" \

GLIB_LIBS="-L/usr/local/glib-2.42/lib -lglib-2.0" \

GMODULE_CFLAGS="-pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include" \

GMODULE_LIBS="-L/usr/local/glib-2.42.0/lib -Wl,--export-dynamic -lgmodule-2.0 -pthread -lrt" \

GTHREAD_CFLAGS="-pthread -I/usr/local/glib-2.42.0/include/glib-2.0 -I/usr/local/glib-2.42.0/lib/glib-2.0/include" \

GTHREAD_LIBS="-L/usr/local/glib-2.42.0/lib -lgthread-2.0 -pthread -lrt"

执行生产编译工具命令:

sh bootstrap.sh

执行编译命令:

make && make install

注意:目前DBProxy默认安装路径为:/usr/local/mysql-proxy。

  1. DBProxy部署

    1. 部署结构介绍

DBProxy 可以配置一主多从结构,即必须配置一个主库,0个或多个从库,主库可进行读写操作,从库只可进行读操作。上游组件/应用的流量可以通过DBProxy中设置的规则,将流量路由到合适的数据库中。DBProxy部署示意图如下所示:

DBProxy是代理节点,安装依赖项、DBProxy源码、MySQL数据库。

Master是主节点,只安装MySQL数据库。

slave1是从节点1,只安装MySQL数据库。

slave2是主节点2,只安装MySQL数据库。

  1. 配置文件的配置

成功安装DBProxy之后,需要在安装目录下创建配置文件所在的文件夹,例如取名conf。

进入解压目录命令:

cd dbproxy

拷贝配置文件及其目录

创建配置文件所在文件夹命令:

mkdir /usr/local/mysql-proxy/conf

拷贝示例配置文件命令:

cp script/source.cnf.samples /usr/local/mysql-proxy/conf/source.cnf

查看结果:

cat /usr/local/mysql-proxy/conf/source.cnf

下面列出了配置文件的一个子集,详细配置信息请参考用户手册。以部署一主一从为例,主库:1.1.1.1:3306 从库:1.1.1.2:3306;DBProxy的admin和后端MySQL的用户名和密码均为guest,uqmOY9A=是guest加密之后的结果。

[mysql-proxy]

#管理接口的用户名

admin-username=guest

#管理接口的密码

admin-password=guest

#用户名与其对应的加密过的MySQL密码,密码需要进行加密!

pwds=guest:uqmOY9A=

#DBProxy监听的管理接口IP和端口

admin-address=0.0.0.0:3308

#DBProxy监听的工作接口IP和端口

proxy-address=0.0.0.0:3307

#DBProxy后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔 如果不配置则默认127.0.0.1:3306

proxy-backend-addresses=1.1.1.1:3306

#DBProxy后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔

proxy-read-only-backend-addresses=1.1.1.2:3306

#工作线程数,对DBProxy的性能有很大影响,可根据情况适当设置,默认为1

event-threads=8

#实例名称,用于同一台机器上多个DBProxy实例间的区分

instance=source

##日志存放的路径

log-path=/opt/tmp/dbproxy_log/

特别注意:

配置文件中配置的“pwds=guest:uqmOY9A=”项中的密码是加密后的密码,加密方法:

./dbproxy/script/encrypt [原始密码]

  1. 启动DBProxy

在安装目录下的/usr/local/mysql-proxy/bin/mysql-proxy进行启动,启动时需传入配置文件的路径。例如:默认安装的路径为:/usr/local/mysql-proxy,配置文件路径为:/usr/local/mysql-proxy/conf/source.cnf,且配置文件中配置了必须配置的参数,启动命令如下:

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/source.cnf

/usr/local/mysql-proxy/bin/mysql-proxyd source start

查看DBProxy进程命令:

ps -ef|grep proxy

查看DBProxy版本:

/usr/local/mysql-proxy/bin/mysql-proxy --version

  1. 连接DBProxy

    1. DBProxy的端口介绍

DBProxy 对外暴露两类端口:admin端口和proxy端口。admin端口是用来管理DBProxy的,管理员可以连接DBProxy的管理端口对DBProxy当前状态、参数进行查看和设置;proxy端口是用来与数据库进行交互的,应用端连接该端口,可与后台数据库进行交互。

    1. 连接admin端口
  1. 查看配置文件中admin端口配置(账号密码端口号)

#管理接口的用户名

admin-username=guest

#管理接口的密码

admin-password=guest

#DBProxy监听的管理接口IP和端口

admin-address=0.0.0.0:3309

  1. 连接(与连接mysql的命令一样)

mysql -uguest -pguest -P3309 -h127.0.0.1

  1. 管理DBProxy

登录DBProxy的admin端口后,可以使用所提供的命令对DBProxy进行管理,查看DBProxy所提供的命令可使用:

select * from help;

    1. 连接proxy端口
  1. 查看配置文件中proxy端口配置(账号密码端口号)

#用户名与其对应的加密过的MySQL密码,密码需要进行加密!

pwds=guest:uqmOY9A=

#DBProxy监听的工作接口IP和端口

proxy-address=0.0.0.0:3308

  1. 连接(与连接mysql的命令一样)

mysql -uroot -p123456 -P3308 -h127.0.0.1

  1. 发送sql语句:

连接proxy端口之后,便可以正常发送DBProxy兼容的sql语句了,例如:

use dbproxy_test;

select * from dbproxy_function_test;

备注:

使用以下命令创建数据库和表:

DROP DATABASE IF EXISTS `dbproxy_test`;

create database `dbproxy_test` default character set utf8mb4 collate utf8mb4_general_ci;

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

USE `dbproxy_test`;

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

-- Table structure for dbproxy_function_test

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

DROP TABLE IF EXISTS `dbproxy_function_test`;

CREATE TABLE `dbproxy_function_test` (

`function_id` varchar(32) NOT NULL,

`function_name` varchar(32) DEFAULT NULL,

`test_result` varchar(32) DEFAULT NULL,

PRIMARY KEY (`function_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

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

-- Records of dbproxy_function_test

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

INSERT INTO `dbproxy_function_test` VALUES ('1', 'test1', 'success');

INSERT INTO `dbproxy_function_test` VALUES ('2', 'test2', 'failure');

  1. 常见问题

  1. linux - yum安装提示“没有可用软件包”

当在Linux系统中使用yum安装软件时提示 “没有可用软件包”时,代表在linux系统yum源中已经没有对应的安装包了,这时,我们需要安装EPEL。

EPEL(Extra Packages for Enterprise Linux),企业版Linux额外包,RHEL分布非标准包的社区类库。安装如下:

yum没有找到对应依赖包,更新epel第三方软件库,运行命令:

yum install -y epel-release

更新完epel第三方软件库后,再次尝试使用yum命令安装对应的软件包。

  1. ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

关闭mysql:

service mysqld stop

屏蔽权限:

mysqld_safe --skip-grant-table

屏幕出现:

Starting demo from .....

新开起一个终端输入:

mysql -u root mysql

删除空密码

mysql> delete from user where USER='';

刷新系统权限相关表

mysql> flush privileges;

  1. ./configure 权限不够

先执行:chmod +x configure

再执行:./configure就正常了

  1. configure: error: mysql_config is not found, use $ ./configure --with-mysql=/path/to/mysql_config

安装:

yum install -y mysql-devel gcc gcc-devel python-devel

  1. configure: error: jemalloc is required

安装:

yum install -y jemalloc jemalloc-devel

  1. 参考文档

https://gitee.com/mirrors/dbproxy

https://github.com/Meituan-Dianping/DBProxy

DBProxy快速入门教程相关推荐

  1. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  2. ​HealthKit开发快速入门教程大学霸内部教程

    ​HealthKit开发快速入门教程大学霸内部教程 ​ ​ 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...

  3. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

  4. 指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程

    指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程 ​1.4.2  指示灯组 指示灯组的放大图如图1.5所示. 图1.5  指示灯组 各个指示灯对应的功能如下: q  RX:对应于0号端口 ...

  5. 游戏控制杆OUYA游戏开发快速入门教程

    游戏控制杆OUYA游戏开发快速入门教程 1.2.2  游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4  游戏控制杆各个角度的 ...

  6. Arduino Yun的主要部件介绍选自Arduino Yun快速入门教程

    Arduino Yun的主要部件介绍 1.4.1  主要部件 Yun的主要部件如图1.4所示. 图1.4  Arduino Yun的主要部件 在Yun小小的板子上集成了两颗处理器.一个是ATmega3 ...

  7. 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程

    认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多 ...

  8. OUYA游戏开发快速入门教程1.2OUYA的硬件规格

    OUYA游戏开发快速入门教程1.2OUYA的硬件规格 从官网上购买回来的OUYA产品,包含游戏主机.游戏控制杆.说明书.电源线.HDMI线.电源线和电池,如图1-2所示.本节就来简要介绍下,游戏主机和 ...

  9. Android 2D游戏引擎AndEngine快速入门教程

    Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引 ...

  10. OUYA游戏开发快速入门教程第1章了解OUYA及其设备

    OUYA游戏开发快速入门教程第1章了解OUYA及其设备 OUYA是基于Andorid系统的游戏主机.围绕OUYA游戏机,已经形成一个完整的生态圈.在国外,OUYA已经成为知名的游戏平台.本章会站在玩家 ...

最新文章

  1. 工作中涉及运维知识点的汇总
  2. Python Numpy中返回下标操作函数-节约时间的利器
  3. angular点击按钮弹出页面_Axure RP8:如何做出点击按钮切换页面效果?
  4. C#中使用WebClient下载指定url的网络照片
  5. DCMTK:DcmDate,DcmTime和DcmDateTime类的测试程序
  6. 紧急通知!最新版CleanMyMac X月底倒计时清仓冲量!
  7. 从1985年到2020年,编程语言排行有哪些变化?
  8. jQuery kxbdMarquee 无缝滚动
  9. 项目管理:项目经理要具备的技能
  10. HBase之HFile详解
  11. C#刀那儿特更清晰讲述什么是事件?
  12. linux查看及修改文件权限以及相关
  13. spark学习之sparksql语法优化
  14. launcher3的具体学习
  15. errors potentially fixable with the `--fix` option.
  16. JAVA IDEA 第一次怎么跑起来
  17. 分享个甲铁城手游的辅助脚本,能够自动刷副本刷资源
  18. 深度学习是什么?应用在哪些方向?
  19. 表格渲染 解决BootStrap3徽章没有背景颜色的问题(BootStrap4有)
  20. SphereEx 潘娟:玩开源,我们就要秀出别样 My Way 来构建活力生态 | 大话开源Vol.11

热门文章

  1. java crx,如何以编程方式创建chrome crx文件(最好在Java中)?
  2. python描述对象静态特性的数据为_下列各项中,能同时影响资产和负债发生变化的是( )。...
  3. tween.js简介
  4. php strpos注意问题坑,strpos函数的坑
  5. Bootstrap 3 如何设置图片居中对齐
  6. 中国十六烷基磷酸钾行业市场供需与战略研究报告
  7. Vue学习(学习打卡Day14)
  8. 微信视频号视频或直播预约二维码如何生成?
  9. 包络线公式如何用计算机求,包络线公式
  10. 图算法图神经网络归纳总结