DBProxy快速入门教程
目录
3.1.13. 安装libgnomeui-devel GUI应用程序 18
DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层。它在奇虎360公司开源的Atlas基础上,修改了部分bug,并且添加了很多特性。目前DBProxy在美团点评广泛应用,包括美团支付、酒店旅游、外卖、团购等产品线,公司内部对DBProxy的开发全面转到github上,开源和内部使用保持一致。目前只支持MySQL(Percona)5.5和5.6。
- 读写分离
- 从库负载均衡
- IP过滤
- 分表
- DBA可平滑上下线DB
- 自动摘除宕机的DB
- 监控信息完备
- SQL过滤
- 从库流量配置
- 虚拟机版本:VMware® Workstation 15 Pro 15.5.1 build-15018445
- 操作系统版本:CentOS-7-x86_64-DVD-1908.iso
进入网络脚本目录:
cd /etc/sysconfig/network-scripts/
编辑网络配置文件:
vi ifcfg-ens33
将ONBOOT=no改为yes
执行重启网络服务命令:
service network restart
执行查看IP地址命令:
ip addr
- 使用Xshell连接CentOS服务器
输入名称、主机等:
输入用户名、密码:
单击接受并保存:
连接成功:
yum install -y wget
yum install -y git
yum install -y epel-release
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。
即使手动下载安装,也不能正常运行。
使用以下方法,重新安装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
- 使用Navicat Premium连接MySQL服务器
输入连接名、主机名、用户名、密码等:
连接成功:
yum install -y jemalloc jemalloc-devel
yum install -y libevent libevent-devel
yum install -y openssl openssl-devel
yum install -y lua lua-devel
yum install -y bison flex libtool.x86_64
yum install -y libffi libffi-devel
yum install -y mysql-devel gcc gcc-devel python-devel
yum install -y libgnomeui-devel
在根目录执行下载命令:
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
在根目录执行下载命令:
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。
DBProxy 可以配置一主多从结构,即必须配置一个主库,0个或多个从库,主库可进行读写操作,从库只可进行读操作。上游组件/应用的流量可以通过DBProxy中设置的规则,将流量路由到合适的数据库中。DBProxy部署示意图如下所示:
DBProxy是代理节点,安装依赖项、DBProxy源码、MySQL数据库。
Master是主节点,只安装MySQL数据库。
slave1是从节点1,只安装MySQL数据库。
slave2是主节点2,只安装MySQL数据库。
成功安装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 [原始密码]
在安装目录下的/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
DBProxy 对外暴露两类端口:admin端口和proxy端口。admin端口是用来管理DBProxy的,管理员可以连接DBProxy的管理端口对DBProxy当前状态、参数进行查看和设置;proxy端口是用来与数据库进行交互的,应用端连接该端口,可与后台数据库进行交互。
#管理接口的用户名
admin-username=guest
#管理接口的密码
admin-password=guest
#DBProxy监听的管理接口IP和端口
admin-address=0.0.0.0:3309
- 连接(与连接mysql的命令一样)
mysql -uguest -pguest -P3309 -h127.0.0.1
- 管理DBProxy
登录DBProxy的admin端口后,可以使用所提供的命令对DBProxy进行管理,查看DBProxy所提供的命令可使用:
select * from help;
#用户名与其对应的加密过的MySQL密码,密码需要进行加密!
pwds=guest:uqmOY9A=
#DBProxy监听的工作接口IP和端口
proxy-address=0.0.0.0:3308
- 连接(与连接mysql的命令一样)
mysql -uroot -p123456 -P3308 -h127.0.0.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');
- linux - yum安装提示“没有可用软件包”
当在Linux系统中使用yum安装软件时提示 “没有可用软件包”时,代表在linux系统yum源中已经没有对应的安装包了,这时,我们需要安装EPEL。
EPEL(Extra Packages for Enterprise Linux),企业版Linux额外包,RHEL分布非标准包的社区类库。安装如下:
yum没有找到对应依赖包,更新epel第三方软件库,运行命令:
yum install -y epel-release
更新完epel第三方软件库后,再次尝试使用yum命令安装对应的软件包。
- 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;
- ./configure 权限不够
先执行:chmod +x configure
再执行:./configure就正常了
- 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
- configure: error: jemalloc is required
安装:
yum install -y jemalloc jemalloc-devel