mysql代理中间件oneproxy系列之oneproxy基本操作和配置参数说明

oneproxy是一个支持读写分离、分库分表的分布式数据库中间件

支持的功能:

  • 连接池
  • 读写分离
  • 分库分表
  • 数据库防火墙

一、安装

1、下载地址:http://www.onexsoft.cn/?page_id=3391
  1. wget http://www.onexsoft.cn/software/oneproxy-rhel5-linux64-v5.8.5-ga.tar.gz
  2. tar -zxvf oneproxy-rhel5-linux64-v5.8.5-ga.tar.gz
  3. mv oneproxy /usr/local/
2、将oneproxy加入开机启动(这一步不是必须)
(1)首先修改oneproxy.service文件,设置oneproxy的安装路径(进入oneproxy安装目录,即/usr/local/oneproxy)
  1. ONEPROXY_HOME=/usr/local/oneproxy
(2)将oneproxy.service复制到/etc/init.d/oneproxy
  1. mv /usr/local/oneproxy/oneproxy.service /etc/init.d/oneproxy

现在可以通过service oneproxy start来启动

二、对oneproxy进行操作

实验介绍:

服务器IP 端口 作用 其他
192.168.0.100 3307 mysql代理服务器(oneproxy安装机器) 同时4041为oneproxy管理端口
192.168.0.101 3306 mysql数据库服务器  
1、oneproxy服务操作
第一种:通过启动脚本来操作(需要第二步的操作)
  • service oneproxy start:启动oneproxy
  • service oneproxy stop:停止oneproxy
  • service oneproxy restart:重启oneproxy
第二种:通过bin/oneproxy命令操作
  1. /usr/local/oneproxy/bin/oneproxy --default-file=/usr/local/oneproxy/conf/proxy.conf
  • --default-file用来指定oneproxy的配置文件

注:

  • oneproxy启动时会开启两个进程,其中一个是代理服务,端口默认为3307(可以通过配置文件修改);
  • 另一个进程为oneproxy的管理服务,端口默认为4041,因此在启动oneproxy的服务时,要检查这两个端口是否已经被使用
  1. netstat -tunpl

2、oneproxy客户端操作

因为oneproxy实现了mysql的协议,所以可以直接使用mysql客户端(前提是安装了mysql,不然mysql的客户端当然不能用了)

(1)在要连接的数据库服务器上创建一个可以连接本数据库的账号,并进账号进行授权

比如oneproxy要连接到后端的数据库为192.168.0.101这台机器上,则在192.168.0.101上进行操作

  • 创建账号proxyadmin,密码为oneproxy,连接的客户端可以是192.168.0.%
  1. create user proxyadmin@'192.168.0.%' identified by 'oneproxy';
  • 创建一个测试使用的数据库user_db和一张用户表m_user_info
  1. create database user_db;
  2. CREATE TABLE `m_user_info` (
  3. `uid` int(11) NOT NULL AUTO_INCREMENT,
  4. `account` char(30) NOT NULL DEFAULT '',
  5. `password` char(32) NOT NULL DEFAULT '',
  6. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  7. PRIMARY KEY (`uid`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 授权操作,先将user_db这个库授权给proxyadmin
  1. grant all privileges on user_db.* to proxyadmin@'192.168.0.%' identified by 'oneproxy';
  2. flush privileges;
(2)在安装oneproxy的机器上直接连接后端服务器192.168.0.101

注:主要作用是查看第一步添加的用户是否可以连接上后端数据库服务器

  1. mysql -h 192.168.0.101 -uproxyadmin -poneproxy

如果可以正常操作,说明用户创建成功,授权也成功

(3)进入oneproxy的管理终端,生成连接后端数据库的用户密码

注:

  • 需要在启动oneproxy的情况下运行,没有启动,可以通过启动脚本启动
  • 在后端数据库上已经存在一个连接后端数据库的用户,也设置了密码,但是需要在oneproxy配置文件中将该用户和密码,写入其中,但是oneproxy的用户密码是按照一定的加密算法来计算的,所以需要通过管理终端来生成密码

在oneproxy的安装的机器上执行:(它使用的也是mysql客户端,进入oneproxy管理终端)

  1. mysql -uadmin -pOneProxy -P4401 --protocol=TCP

默认管理用户为admin,密码为OneProxy,管理端口为4401

通过oneproxy管理端口的passwd命令来生成密码(之前使用的密码是oneproxy,根据自己的密码来生成)

  1. passwd oneproxy

  • passwd为命令

  • oneproxy为要生成的密码的明码

(4)修改配置文件conf/proxy.conf,配置连接

注:

  • proxy-auto-readonly=1这一行必须要注释掉,不然连接后不能在oneproxy终端上不能进行任何SQL操作
  • proxy-master-address.1指定后端数据库服务器,格式为:IP:PORT@组名,这个组名为mysql服务器组的一个标识,比如,有很多台是订单的数据库,可以命名为Orders
  • proxy-user-list为代理使用的用户,也是连接后端数据库的用户,格式为:用户名/密码@数据库名(这里的密码是通过oneproxy终端生成的密码)
  • 如果没有注释proxy-auto-readonly这一行,在执行SQL语句时会报Lost connection to MySQL server during query or no managed connection
(5)进入oneproxy管理终端,检查后端数据库连接是否正常
  1. mysql -uadmin -pOneProxy -P4401 --protocol=TCP
  2. list backend;

(6)进入mysql终端,连接oneproxy,即通过代理来连接后端数据库
  1. mysql -uproxyadmin -poneproxy -P3307 --protocol=TCP

注:3307为代理端口,如果不在oneproxy安装的机器上,需要添加-h指定连接的代理的IP

三、oneproxy配置文件说明

通过bin/oneproxy --help-all可以查看所有配置项

其选项基本上分为oneproxy模块参数(对应的功能)和应用参数

1、模块参数
参数 含义 格式 范例
proxy-address 代理服务器的地址 IP:PORT —proxy-address=:3307
proxy-slave-addresses 代理的从服务器地址 IP:PORT@severGroup  
proxy-slave-addresses.1 代理的第一个从服务器地址 IP:PORT@severGroup --proxy-slave-addresses.1=127.0.0.1:3306@default
proxy-master-addresses 代理的主服务器地址 IP:PORT@severGroup --proxy-master-addresses=127.0.0.1:3306@default
proxy-master-addresses.1 代理的第一台主服务器地址 IP:PORT@severGroup --proxy-master-addresses=127.0.0.1:3306@default
proxy-user-list 代理的用户列表 username/password@dbname --proxy-user-list=test/E8888373837383383@test
proxy-charset 代理编码设置 charset --proxy-charset=utf8_general_ci
mysql-version 代理的数据库的版本 version mysql-version=5.7.16
proxy-enable-firewall 是否启用防火墙   --proxy-enable-firewall
proxy-enable-ipfirewall 是否启用IP防火墙 --proxy-enable-ipfirewall
proxy-black-query 不允许执行的SQL语句    
proxy-firewall-tables 使用SQL防火墙的表    
proxy-firewall-ip 使用IP防火墙的IP    
proxy-group-policy 设置服务器组权限 groupname:policy --proxy-group-policy=server1:slave-read
proxy-auto-commit 在代理中禁用事务处理    
proxy-multi-inserts 是否允许在不同分区执行批量插入    
proxy-log-sqlerror 是否输出错误sql信息    
proxy-auto-readonly 代理是否启用只读    
admin-address 代理管理地址 IP:PORT --admin-address=127.0.0.1:8000
admin-username 代理管理用户名 username --admin-username=admin
admin-password 代理管理用户密码 password --admin-password=admintest
repadmin-username 用户复制管理的用户名 username  
repadmin-password 用户复制管理的用户密码 password  
proxy-stats-interval 执行统计信息的间隔时间 num
proxy-reset-interval 重置统计信息的间隔时间 num
poxy-max-sqlsize 最大显示的SQL语句大小 num  
2、应用参数
参数 说明 格式 范例
user 运行oneproxy的用户 username --user=oneproxy
pid-file pid文件存放地址 log/oneproxy.pid --pid-file=log/oneproxy.pid
lck-file 锁文件存放地址 log/oneproxy.lck --lck-file=log/oneproxy.lck
log-file 日志文件存放地址 log/oneproxy.log --log-file=log/oneproxy.log
log-level 日志记录级别 error/warning/info/message/debug --log-level=error
log-use-syslog 使用syslog记录日志 --log-use-syslog
keepavlie 后台运行 --keepalive
vip-address 虚拟IP地址 IP --vip-address=192.168.0.11
max-open-files 最大打开文件数(与ulimit一致) --max-open-files=65535
event-threads 事件线程数 num --event-threads=8
max-idle-time 连接池中最大连接空闲时间 num --max-idle-time=300