背景:

前面的2篇文章MySQL ProxySQL读写分离使用初探MySQL ProxySQL读写分离实践大致介绍了ProxySQL的使用说明,从文章的测试的例子中看到ProxySQL使用SQLITE来进行配置的持久化,以及ProxySQL是一个CPU密集型的中间价,如果CPU比较空闲,可以像MySQL一样安装多个实例的ProxySQL,充分利用资源。下面介绍下如何备份持久化的ProxySQL配置和多实例ProxySQL的创建。

多实例建立:

假设默认的实例已经装好了(6032、6033),现在需要新增一个新实例(ProxySQL2):7032,7033

1,添加配置文件:

cp /etc/proxysql.cnf /etc/proxysql2.cnf

2,修改配置文件:修改3行

datadir="/var/lib/proxysql2"
...
...
mysql_ifaces="127.0.0.1:7032;/tmp/proxysql_admin2.sock"
...
...
interfaces="0.0.0.0:7033;/tmp/proxysql2.sock"
...

3,添加启动文件:

cp /etc/init.d/proxysql /etc/init.d/proxysql2

4,修改启动文件:

OLDDATADIR="/var/run/proxysql2"
DATADIR="/var/lib/proxysql2"
OPTS="-c /etc/proxysql2.cnf -D $DATADIR" 修改成新的启动
sudo -u proxysql /usr/bin/proxysql2 $OPTS 修改2行:
for i in `pgrep proxysql` ; do
替换为:
for i in `pidof proxysql2` ; do
最后修改一些输出:
把echo输出的proxysql改成proxysql2

5,复制执行文件(懒的修改脚本了,直接复制新起一个执行文件...):

cp /usr/bin/proxysql /usr/bin/proxysql2

这里需要注意的是:需要修改默认实例的启动文件(/etc/init.d/proxysql)

修改2行:
for i in `pgrep proxysql` ; do
替换为:
for i in `pidof proxysql` ; do

即把pgrep改成pidof,这是因为通过pgrep找到了所有的proxysql实例的进程号,会引起误操作,单实例ProxySQL可以不需要考虑。

6,修改权限:

chown -R proxysql.proxysql proxysql2.cnf
chown -R proxysql.proxysql proxysql2/

7,开启实例:

root@dbproxy:/var/lib# /etc/init.d/proxysql2 start
Starting ProxySQL2: DONE!
root@dbproxy:/var/lib# ps -ef| grep proxy
proxysql May27 ? :: /usr/bin/proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql
proxysql May27 ? :: /usr/bin/proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql
proxysql : ? :: /usr/bin/proxysql2 -c /etc/proxysql2.cnf -D /var/lib/proxysql2
proxysql : ? :: /usr/bin/proxysql2 -c /etc/proxysql2.cnf -D /var/lib/proxysql2

查看端口信息:

root@dbproxy2:/var/lib# netstat -nltp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 127.0.0.1: 0.0.0.0:* LISTEN /proxysql
tcp 0.0.0.0: 0.0.0.0:* LISTEN /proxysql
tcp 0.0.0.0: 0.0.0.0:* LISTEN /proxysql
tcp 0.0.0.0: 0.0.0.0:* LISTEN /proxysql
tcp 0.0.0.0: 0.0.0.0:* LISTEN /proxysql
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /proxysql2
tcp 0.0.0.0: 0.0.0.0:* LISTEN /proxysql2
tcp 0.0.0.0: 0.0.0.0:* LISTEN /proxysql2
tcp 0.0.0.0: 0.0.0.0:* LISTEN /proxysql2
tcp 0.0.0.0: 0.0.0.0:* LISTEN /proxysql2
tcp6 ::: :::* LISTEN /sshd

8:完成

root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 stop
Shutting down ProxySQL2: DONE!
root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 start
Starting ProxySQL2: DONE!
root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 status
ProxySQL2 is running ().
root@dbproxy2:/var/lib/proxysql2# mysql -uadmin -padmin -h127.0.0. -P7032
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.5. (ProxySQL Admin Module) Copyright (c) - Percona LLC and/or its affiliates
Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. admin@127.0.0.1 : (none) ::>select * from mysql_servers;
Empty set (0.00 sec) admin@127.0.0.1 : (none) ::>

到此,多实例已经建立成功,接着说明下如何对持久化的配置进行备份。

持久化配置备份

上面已经提到,ProxySQL的持久化是通过SQLITE实现的,对于备份就是对SQLITE的备份,关于如何使用SQLITE可以查看官方文档SQLite教程。这里大致的说明下sqlite以 SQL 文本格式转储数据。

1:先到指定的数据db目录

root@dbproxy:/var/lib/proxysql# ls -lh
-rw------- proxysql proxysql 33K May : proxysql.db
-rw------- proxysql proxysql 142K May : proxysql.log
-rw-r--r-- proxysql proxysql May : proxysql.pid

2:备份,执行.dump

root@dbproxy:/var/lib/proxysql# sqlite3 proxysql.db .dump > /home/dxy/proxysql.sql 

3,还原,若还原到另一个ProxySQL(上面安装的实例proxysql2)中,先保证目标proxysql.db文件不存在(需要关闭ProxySQL,删除数据目录里的所有文件)再执行:

root@dbproxy:~# /etc/init.d/proxysql2 stop
Shutting down ProxySQL2: DONE! root@dbproxy:/var/lib/proxysql2# ls -lh
total

在目标实例目录中执行:

root@dbproxy:/var/lib/proxysql2# sqlite3 proxysql.db < /home/dxy/proxysql.sql
root@dbproxy:/var/lib/proxysql2# ls -lh
total 32K
-rw-r--r-- root root 32K May : proxysql.db

开启实例:

root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 start
Starting ProxySQL: DONE!
root@dbproxy:/var/lib/proxysql2# ls -lh
total 60K
-rw-r--r-- root root 32K May : proxysql.db
-rw------- proxysql proxysql 21K May : proxysql.log
-rw-r--r-- proxysql proxysql May : proxysql.pid #修改权限
root@dbproxy:/var/lib/proxysql2# chown -R proxysql.proxysql proxysql.db

说明:如果备份的实例和还原的实例使用的端口全部一致,则直接开启ProxySQL就可以用了。但本文的测试备份的实例的端口是6032和6033,还原的目标实例端口是7032和7033,即使还原了也不能使用,所以需要修改db文件,用sqlite连接修改:

#连接
root@dbproxy:/var/lib/proxysql2# sqlite3 proxysql.db #修改显示
sqlite> .header on
sqlite> .mode column #查看需要更新的变量
sqlite> select * from global_variables;
...
admin-mysql_ifaces 127.0.0.1:
...
mysql-interfaces 0.0.0.0:;/ #更新
sqlite> update global_variables set variable_value='127.0.0.1:7032' where variable_name = 'admin-mysql_ifaces';
sqlite> update global_variables set variable_value='0.0.0.0:7033;/' where variable_name = 'mysql-interfaces';

上面操作完成之后,再开启ProxySQL验证:

root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 start
Starting ProxySQL2: DONE! oot@dbproxy2:/var/lib/proxysql2# mysql -uadmin -padmin -h127.0.0. -P7032
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.5. (ProxySQL Admin Module) Copyright (c) - Percona LLC and/or its affiliates
Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. admin@127.0.0.1 : (none) ::>select * from mysql_users;
+-----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
| username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections |
+-----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
| abc | *1AF30A6370D8959926FC3BD6158C9C551D0DBA28 | | | | | | | | | | |
| bcd | *F8258EA2FA1D7FE2B55DA522BFCC87B93CC63ADF | | | | | | | | | | |
+-----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
rows in set (0.00 sec) admin@127.0.0.1 : (none) ::>select * from mysql_servers;
+--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+-----------+
| hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+-----------+
| | 192.168.20.123 | | ONLINE | | | | | | | ReadWrite |
| | 192.168.20.12 | | ONLINE | | | | | | | ReadOnly |
| | 192.168.20.123 | | ONLINE | | | | | | | ReadWrite |
+--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+-----------+
rows in set (0.00 sec)

从上面的结果看到,持久化备份和还原成功。注意:因为sqlite不支持远程备份,需要在本地备份好之后,再传到备份中心进行保存。

总结:

到此,关于ProxySQL的介绍告已段落,ProxySQL作者的更新还是比较勤快的,若后续有新功能和特性等,再进行补充说明,关于ProxySQL的文档请见:https://github.com/sysown/ProxySQL

ProxySQL的相关维护说明的更多相关文章

  1. 自建YUM源以及相关维护

    yum相关概念我这里就不做详细的讲解了,就是一个软件包管理工具.在企业中,很多时候进行编译了自己的RPM包,在搭建YUM的时候,希望将自定义的RPM加入到YUM源中,从而出现了下列方法. 一.配置私有 ...

  2. MySQL ProxySQL相关维护说明

    背景: 前面的2篇文章MySQL ProxySQL读写分离使用初探和MySQL ProxySQL读写分离实践大致介绍了ProxySQL的使用说明,从文章的测试的例子中看到ProxySQL使用SQLIT ...

  3. MGR架构 ~ 节点的维护相关问题

    一简介:MGR节点的相关维护二 两种情况   1 MGR读节点异常停止,然后重新启动加入节点进行数据同步   2 MGR读节点新加入集群成员,启动复制进行数据同步三 通用过程  1 新加入节点通过通道 ...

  4. MySQL ProxySQL读写分离使用初探

    目的 在美团点评DBProxy读写分离使用说明文章中已经说明了使用目的,本文介绍ProxySQL的使用方法以及和DBProxy的性能差异.具体的介绍可以看官网的相关说明,并且这个中间件也是percon ...

  5. 我的第一个python web开发框架(19)——产品发布相关事项

    好不容易小白将系统开发完成,对于发布到服务器端并没有什么经验,于是在下班后又找到老菜. 小白:老大,不好意思又要麻烦你了,项目已经弄完,但要发布上线我还一头雾水,有空帮我讲解一下吗? 老菜:嗯,系统上 ...

  6. ELK批量删除索引 及 相关操作命令 - 运维小结

    线上部署了ELK+Redis日志分析平台环境, 随着各类日志数据源源不断的收集, 发现过了一段时间之后, ELK查看会原来越慢, 重启elasticsearch服务器节点之前同步时间也会很长,  这是 ...

  7. GDB教程详解

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC ...

  8. CEPH浅析”系列之三——CEPH的设计思想

    Ceph针对的目标应用场景 理解Ceph的设计思想,首先还是要了解Sage设计Ceph时所针对的目标应用场景,换言之,"做这东西的目的是啥?" 事实上,Ceph最初针对的目标应用场 ...

  9. GDB中文手册

    用GDB调试程序GDB概述 2使用GDB 5GDB中运行UNIX的shell程序 8在GDB中运行程序 8调试已运行的程序 两种方法: 9暂停 / 恢复程序运行 9一.设置断点(BreakPoint) ...

随机推荐

  1. 【caffe-windows】 caffe-master 之 训练自己数据集(图片转换成lmdb or leveldb)

    前期准备: 文件夹train:此文件夹中按类别分好子文件夹,各子文件夹里存放相应图片 文件夹test:同train,有多少类就有多少个子文件夹 trainlabels.txt : 存的是训练集的标签  ...

  2. websocket技术分享

    开发环境: spring3+tomcat7+spring-websocket4 运行环境: windows.Linux 一.背景: 产品将要发布的消息或其他需要让客户提前知道的消息,在客户端和服务端建 ...

  3. AngularJS的过滤器$filter

    过滤器(filter)主要用于数据的格式上,通过某个规则,把值处理后返回结果.例如获得数据集,可排序后再返回. ng内置的共有九种过滤器: currency 货币 使用currency可以将数字格式化 ...

  4. 浅谈 angular新旧版本问题

    一直在学习angularJs,之前用的版本比较老,前些天更新了一下angularJs的版本,然后发现了一些问题,希望和大家分享一下. 在老的版本里控制器直接用函数定义就可以 比如: 在angularJ ...

  5. xmlplus 组件设计系列之四 - 列表

    列表组件是极其常用的一类组件,是许多视图组件系统的必须包含的.列表可以做的很简单,只显示简洁的内容.列表也可以做的很复杂,用于展示非常丰富的内容. 组成元素 列表离不开列表项以及包含列表项的容器.下面 ...

  6. javaEE-string家族三大流氓

    最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...

  7. IIS发布mvc程序遇到的HTTP错误 403.14-Forbidden解决办法

    在IIS上发布MVC应用程序后,在浏览器查看时会报如下图的错误: 这时,我们首先检查一下“处理程序映射”,看一下里面是否有“ExtensionlessUrlHandler-Integrated-4.0 ...

  8. 表单提交音乐文件(php)

    利用点空闲时间来写个博客,最近做的项目中需要表单提交音频的,图片的,各种类型,把它存到数据库里,这里先来说一下音乐文件的表单提交吧,后几天再来更新输入数据库的,先看一下效果 点击浏览 就会出来预览,点 ...

  9. linux 内核的spinlock

    spinlock设计成了三层,第一层是接口,第二层raw实现层,第三层是CPU平台层.在第二层raw实现层提供了两个分支,分别是单CPU和多CPU(核).第三层是不同CPU的锁操作实现.raw层除了调 ...

  10. jQuery的hover方法搭配css的hover选择器,实现选中元素突出显示

    问题简述: 今天做帮一个师姐做网页遇到一个这样的要求: 鼠标不移动进表格,表格透明度不变. 鼠标移动进表格,hover到的单元格透明度不变,没hover到的单元格透明度改变. 先贴我已经实现好的效果, ...