MySQL ProxySQL相关维护说明
背景:
前面的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。
MySQL ProxySQL相关维护说明的更多相关文章
- ProxySQL的相关维护说明
背景: 前面的2篇文章MySQL ProxySQL读写分离使用初探和MySQL ProxySQL读写分离实践大致介绍了ProxySQL的使用说明,从文章的测试的例子中看到ProxySQL使用SQLIT ...
- Mysql优化相关总结
Mysql优化相关总结 2016-05-31 数据库集中营 优化顺序: 选择适当的引擎和表结构和数据类型 建立索引,优化sql. 增加缓存,redis.memcache. 主从.主主,读写分离. my ...
- MySQL ProxySQL读写分离实践
目的 在上一篇文章MySQL ProxySQL读写分离使用初探里初步介绍了ProxySQL的使用,本文继续介绍它的一些特点和DBProxy的性能差异.深入一些去了解ProxySQL,通过测试来说明Pr ...
- mysql数据库相关流程图/原理图
mysql数据库相关流程图/原理图 1.mysql主从复制原理图 mysql主从复制原理是大厂后端的高频面试题,了解mysql主从复制原理非常有必要. 主从复制原理,简言之,就三步曲,如下: 主数据库 ...
- RDS MySQL 全文检索相关问题的处理
RDS MySQL 全文检索相关问题 1. RDS MySQL 对全文检索的支持 2. RDS MySQL 全文检索相关参数 3. RDS MySQL 全文检索中文支持 3.1 MyISAM 引擎表 ...
- MySQL 权限相关
# ============================= mysql 权限相关 =====================================================gran ...
- MySQL复制相关参数详解
MySQL复制相关参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.复制相关系统变量 1>.server_id 是必须设置在master和每个slave上的唯一标 ...
- 自建YUM源以及相关维护
yum相关概念我这里就不做详细的讲解了,就是一个软件包管理工具.在企业中,很多时候进行编译了自己的RPM包,在搭建YUM的时候,希望将自定义的RPM加入到YUM源中,从而出现了下列方法. 一.配置私有 ...
- MySQL库相关操作
========MySQL库相关操作====== 一.系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信 ...
随机推荐
- vue 图片预览插件
https://github.com/daidaitu1314/vue2-preview //cnpm cnpm install vue2-preview -save //引入 import VueP ...
- 纯javascript实现可拖住/大小的div
好久没写了,不得不说人懒了好多.. 也不打算实现什么太厉害的功能,因为不喜欢网上那些一大堆代码的,看的头晕,于是自己写了一个 旨在越简单越好(当然也走点形式- -其实是自己菜),所以一些宽度和高度都写 ...
- Java和js操作json
Js中 Json字符串转json对象 //将json格式的字符串转为json对象 var t = JSON.parse('{"name":123}'); alert(t.name) ...
- Python-数据类型1
在Python中常见的数据类型有:整数(int).字符串(str).小数/浮点数(float).列表.元组.字典和布尔类型等,下面会进行一一介绍. 整数和小数,不用多介绍相信大家都有所了解,字符串是用 ...
- [译文]Domain Driven Design Reference(五)—— 为战略设计的上下文映射
本书是Eric Evans对他自己写的<领域驱动设计-软件核心复杂性应对之道>的一本字典式的参考书,可用于快速查找<领域驱动设计>中的诸多概念及其简明解释. 其它本系列其它文章 ...
- PuppeteerSharp+AngleSharp的爬虫实战之汽车之家数据抓取
参考了DotNetSpider示例, 感觉DotNetSpider太重了,它是一个比较完整的爬虫框架. 对比了以下各种无头浏览器,最终采用PuppeteerSharp+AngleSharp写一个爬虫示 ...
- 通过net time同步电脑时间
net use \\192.168.1.112\ipc$ admin /user:admin #第一个admin是密码,第二个admin是用户名: net time \\192.168.1.112 / ...
- 【二代示波器教程】第15章 FreeRTOS操作系统版本二代示波器实现
第15章 FreeRTOS操作系统版本二代示波器实现 本章教程为大家讲解FreeRTOS操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务 ...
- [Swift]LeetCode256.粉刷房子 $ Paint House
There are a row of n houses, each house can be painted with one of the three colors: red, blue or gr ...
- iFace安全专家揭秘:存放在区块链钱包中的比特币,其实已经早就不属于你……
自MoreToken钱包跑路之后,2019年3月以来陆续多个钱包.交易所跑路,造成了大量用户账户被盗,仅MoreToken钱包用户损失总价值就达12.2亿人民币,用户损失惨重.为什么这么多钱包.交易所 ...