01_ProxySQL安装
备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入
~
~
ProxySQL是被公认的功能强大的MySQL中间件之一,但官网视乎很低调;以至于没有清楚的说明它自己到底擅长什么....
于是,通过网上收集,大致列出ProxySQL主要功能:
- 读写分离
- 数据库集群、分片(要写级多路由规则,相对繁琐)
- 分库分表(要写级多路由规则,相对繁琐)
- 主从切换
- SQL审计
- 连接池、多路复用
- 负载均衡
- 查询重写
- 流量镜像
- 自动重连
- 自动下线
- 高可用
~
~
一、安装ProxySQL
github地址:https://github.com/sysown/proxysql
~
~
方式1:通过yum安装(centos 6)
1、添加yum源
# cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name= ProxySQL YUM repository
#proxysql2.0版地址
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/\$releasever
#proxysql1.4版本地址
#baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key
EOF
2、安装
# yum install proxysql OR yum install proxysql-version
~
~
方式2:源码安装(建议Centos 7.4及以上)
1 、解压源码包
# tar -zxvf proxysql-1.4.15.tar.gz
# cd proxysql-1.4.15
2、查看安装说明文档
# less INSTALL.md
3、根据INSTALL.md安装
# yum install automake bzip2 cmake make gcc-c++ gcc git openssl openssl-devel patch
备注:需要保证gcc-c++版本足够新,不然编译有错。
# yum install perl-DBD-MySQL ==>使用yum安装时用到了整个依赖包,这里也一起装了。
# make
# make install
4、加入环境变量
# vim /etc/profile
PROXYPATH=/usr/local/proxysql/usr/bin
export PATH=$PATH:$PROXYPATH
本人在Centos6.5和Centos 7.2上都没有安装成功!!最后使用了yum方式!这里按INSTALL.md编写的。
~
~
其他方式:
直接使用二进制包(percona版)
下载地址:
https://www.percona.com/downloads/proxysql/proxysql-1.4.12/binary/tarball/proxysql-1.4.12-Linux-centos6-x86_64.tar.gz
1、解压
# tar -zxvf proxysql-1.4.12-Linux-centos6-x86_64.tar.gz -C /usr/local/proxysql
# cd /usr/local/
# mv proxysql-1.4.12-Linux-x86_64 proxysql
# tree proxysql
proxysql
├── etc
│ ├── init.d
│ │ └── proxysql
│ ├── logrotate.d
│ │ └── proxysql-logrotate
│ ├── proxysql-admin.cnf
│ └── proxysql.cnf
├── tests
│ ├── async-slave-testsuite.bats
│ ├── desynced-host-testsuite.bats
│ ├── generic-test.bats
│ ├── host-priority-testsuite.bats
│ ├── loadbal-testsuite.bats
│ ├── proxysql-admin-testsuite.bats
│ ├── proxysql-admin-testsuite.sh
│ ├── test-common.bash
│ └── writer-is-reader-testsuite.bats
├── usr
│ └── bin
│ ├── proxysql
│ ├── proxysql-admin
│ ├── proxysql_galera_checker
│ ├── proxysql_node_monitor
│ └── proxysql-status
└── var
└── lib
└── proxysql
9 directories, 18 files
2、加入环境变量
# vim /etc/profile
PROXYPATH=/usr/local/proxysql/usr/bin
export PATH=$PATH:$PROXYPATH
~
~
二、安装结果验证
1、查看proxysql版本,验证命令
# proxysql --version
ProxySQL version 2.0.2-1-g533442f, codename Truls
备注:本次实验安装得是2.0.2版本
~
~
2、修改ProxySQL数据目录
说明:根据实际情况修改datadi路径,默认为/var/lib/proxysql。
1)修改proxysql.cnf
# cd /usr/local/proxysql/etc
# vim proxysql.cnf
datadir="/usr/local/proxysql/var/lib/proxysql"
2)修改proxysql-admin.cnf
# vim proxysql-admin.cnf
export PROXYSQL_DATADIR='/usr/local/proxysql/var/lib/proxysql'
备注:2.0版本中没有了这个配置文件。
~
~
3、启动/停止ProxySQL服务
启动
如果不使用/etc/init.d/proxysql服务脚本启动,则需要在启动前设置
ulimit -n 102400
ulimit -c 1073741824
即设置
vim /etc/security/limits.conf
proxysql soft nofile 102400
proxysql soft core 1073741824
# proxysql -c /usr/local/proxysql/etc/proxysql.cnf &
或
#service proxysql start
停止
# service proxysql stop
或
Admin> proxysql stop ; -->停止提供服务,但进程还在。
重启
# service proxysql restart
或
Admin> proxysql restart ;
~
~
4、登录ProxySQL
使用mysql客户端连接proxysql,默认端口6032 默认用户名,密码都是 admin
# mysql -u admin -padmin -h 127.0.0.1 -P 6032 --prompt 'Admin> '
注意:如果你使用的MySQL客户端版本为8.04及以后,连接时请添加参数项--default-auth=mysql_native_password
~
~
查看实例中的默认数据库:
Admin>SHOW DATABASES;
+-----+---------------+-------------------------------------+
| seq | name | file |
+-----+---------------+-------------------------------------+
| 0 | main | |
| 2 | disk | /var/lib/proxysql/proxysql.db |
| 3 | stats | |
| 4 | monitor | |
| 5 | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
5 rows in set (0.00 sec)
Admin>show tables;
+--------------------------------------------+
| tables |
+--------------------------------------------+
| global_variables |
| mysql_collations |
| mysql_galera_hostgroups |
| mysql_group_replication_hostgroups |
| mysql_query_rules |
| mysql_query_rules_fast_routing |
| mysql_replication_hostgroups |
| mysql_servers |
| mysql_users |
| proxysql_servers |
| runtime_checksums_values |
| runtime_global_variables |
| runtime_mysql_galera_hostgroups |
| runtime_mysql_group_replication_hostgroups |
| runtime_mysql_query_rules |
| runtime_mysql_query_rules_fast_routing |
| runtime_mysql_replication_hostgroups |
| runtime_mysql_servers |
| runtime_mysql_users |
| runtime_proxysql_servers |
| runtime_scheduler |
| scheduler |
+--------------------------------------------+
22 rows in set (0.00 sec)
~
~
三、通过admin interface(管理接口)配置ProxySQL
配置ProxySQL首选的方式就是通过admin interface,它可以在线动态修改配置,并且不需要重启ProxySQL服务。
其次才是通过修改配置文件来调整。
~
~
这里大概的过一下配置文件相关内容:
1、datadir配置项
datadir==>指定ProxySQL服务的数据存放路径(字符串);
~
~
2、admin_variables配置项
admin_variables==>对应global_variables表中那些控制着admin interface的相关功能的全局参数项,也就是配置ProxySQL自己的连接信息;
# cat /usr/local/proxysql/etc/proxysql.cnf
admin_variables=
{
admin_credentials="admin:admin"
mysql_ifaces="0.0.0.0:6032"
}
~
~
3、mysql_variables配置项
mysql_variables==>对应global_variables表中那些控制着传入MySQL流的相关功能的全局参数项,也就是配置ProxySQL访问后端MySQL的设置 ;
# cat /usr/local/proxysql/etc/proxysql.cnf
mysql_variables=
{
threads=4
max_connections=2048
default_query_delay=0
default_query_timeout=36000000
server_version="5.5.30"
connect_timeout_server=3000
.........
}
~
~
4、mysql_servers配置项
mysql_servers==>对应admin interface中mysql_servers表中的内容;它定义了后端MySQL服务的信息。
它需要以.cfg(配置文件)的格式来书写。
mysql_servers =
(
{
address="127.0.0.1"
port=3306
hostgroup=0
max_connections=200
}
)
~
~
5、mysql_users配置项
mysql_users==>对应admin interface中mysql_users表中的内容;它是控制哪些用户可用连入ProxySQL以及哪些用户可以访问
后端的MySQL服务。它需要以.cfg(配置文件)的格式来书写。
mysql_users:
(
{
username = "root"
password = "root"
default_hostgroup = 0
max_connections=1000
default_schema="information_schema"
active = 1
}
)
~
~
6、mysql_query_rules配置项
mysql_query_rules==>对应admin interface中mysql_query_rules表中的内容;用于定义对传入的MySQL流量进行分类和路由的规则。
建议根据查询来编写特定的规则,而不是下下面一样笼统的概括。
mysql_query_rules:
(
{
rule_id=1
active=1
match_pattern="^SELECT .* FOR UPDATE$"
destination_hostgroup=0
apply=1
},
{
rule_id=2
active=1
match_pattern="^SELECT"
destination_hostgroup=1
apply=1
}
)
~
~
完毕!