ProxySQL read-write separation from configuration to use
The purpose of use has been explained in Meituan-Dianping’s DBProxy read-write separation usage instructions article. This article introduces how to use ProxySQL and the performance difference with DBProxy. For a detailed introduction, please see the relevant instructions on the official website, and this middleware is also a middleware recommended by percona. Its features are not much different from other middleware that separates reading and writing. The details will be introduced in the article. This article briefly introduces some instructions during use. You can also check the official wiki for help.
Environment:
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04Codename: trusty
Download
percona site:
https://www.percona.com/downloads/proxysql/
github/Official website:
https://github .com/sysown/proxysql/releases
##Let’s first take a look at our environment:
MHA has been set up:master:172.16.16.35:3306slave:172.16.16.35:3307slave:172.16.16.34:3307
[root@localhost bin]# cat /etc/masterha/app1.cnf [server default] manager_log=/var/log/mha/app1/manager.log manager_workdir=/var/log/mha/app1.log master_binlog_dir=/home/mysql/db3306/log/master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change password=123456ping_interval=1remote_workdir=/tmp repl_password=123456repl_user=root report_script=/usr/local/bin/send_report shutdown_script=""ssh_user=root user=root [server1] hostname=172.16.16.35port=3306[server2] candidate_master=1check_repl_delay=0hostname=172.16.16.34port=3306[server3] hostname=172.16.16.35port=3307
[root@localhost bin]# sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm[root@localhost bin]# yum install proxysql
Installed: proxysql.x86_64 0:1.3.7-1.1.el6 Complete!
[root@localhost bin]# find / -name proxysql/var/lib/proxysql/var/run/proxysql/etc/rc.d/init.d/proxysql/usr/bin/proxysql
[root@localhost bin]# cat /etc/proxysql-admin.cnf # proxysql admin interface credentials. export PROXYSQL_USERNAME="admin"export PROXYSQL_PASSWORD="admin"export PROXYSQL_HOSTNAME="localhost"export PROXYSQL_PORT="6032" # PXC admin credentials for connecting to pxc-cluster-node. export CLUSTER_USERNAME="admin"export CLUSTER_PASSWORD="admin"export CLUSTER_HOSTNAME="localhost"export CLUSTER_PORT="3306" # proxysql monitoring user. proxysql admin script will create this user in pxc to monitor pxc-nodes. export MONITOR_USERNAME="monitor"export MONITOR_PASSWORD="monit0r" # Application user to connect to pxc-node through proxysql export CLUSTER_APP_USERNAME="proxysql_user"export CLUSTER_APP_PASSWORD="passw0rd" # ProxySQL read/write hostgroup export WRITE_HOSTGROUP_ID="10"export READ_HOSTGROUP_ID="11" # ProxySQL read/write configuration mode. export MODE="singlewrite"
[root@localhost bin]# proxysql-admin --config-file=/etc/proxysql-admin.cnf --enable This script will assist with configuring ProxySQL (currently only Percona XtraDB cluster in combination with ProxySQL is supported) ProxySQL read/write configuration mode is singlewrite ProxySQL is not running; please start the proxysql service
[root@localhost bin]# service proxy proxy proxysql proxysql-admin proxysql_galera_checker proxysql_node_monitor [root@localhost bin]# service proxysql start Starting ProxySQL: DONE![root@localhost bin]# mysql -uadmin -padmin -h127.0.0.1 -P6032 mysql: [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 1Server version: 5.7.14 (ProxySQL Admin Module) Copyright (c) 2000, 2016, 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. mysql>
[root@localhost bin]# find / -name proxysql.cnf/etc/proxysql.cnf
[root@localhost bin]# mysql -uadmin -padmin -h127.0.0.1 -P6032 mysql: [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 2Server version: 5.7.14 (ProxySQL Admin Module) Copyright (c) 2000, 2016, 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. mysql> show databases;+-----+---------+-------------------------------+ | seq | name | file | +-----+---------+-------------------------------+ | 0 | main | | | 2 | disk | /var/lib/proxysql/proxysql.db | | 3 | stats | | | 4 | monitor | | +-----+---------+-------------------------------+4 rows in set (0.00 sec) mysql> use admin Database changed mysql> show tables;+--------------------------------------+ | tables | +--------------------------------------+ | global_variables | | mysql_collations | | mysql_query_rules | | mysql_replication_hostgroups | | mysql_servers | | mysql_users | | runtime_global_variables | | runtime_mysql_query_rules | | runtime_mysql_replication_hostgroups | | runtime_mysql_servers | | runtime_mysql_users | | runtime_scheduler | | scheduler | +--------------------------------------+13 rows in set (0.00 sec)
mysql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(100,'172.16.16.35',3306,1,1000,10,'test'); Query OK, 1 row affected (0.00 sec) mysql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(101,'172.16.16.34',3306,1,1000,10,'test'); Query OK, 1 row affected (0.00 sec) mysql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(101,'172.16.16.35',3307,1,1000,10,'test'); Query OK, 1 row affected (0.00 sec) mysql> select * from mysql_servers;+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | +--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ | 100 | 172.16.16.35 | 3306 | ONLINE | 1 | 0 | 1000 | 10 | 0 | 0 | test | | 101 | 172.16.16.34 | 3306 | ONLINE | 1 | 0 | 1000 | 10 | 0 | 0 | test | | 101 | 172.16.16.35 | 3307 | ONLINE | 1 | 0 | 1000 | 10 | 0 | 0 | test | +--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+3 rows in set (0.00 sec)
mysql> insert into mysql_replication_hostgroups values(100,101,'masterha') ; Query OK, 1 row affected (0.00 sec) mysql> select * from mysql_replication_hostgroups;+------------------+------------------+----------+ | writer_hostgroup | reader_hostgroup | comment | +------------------+------------------+----------+ | 100 | 101 | masterha | +------------------+------------------+----------+1 row in set (0.00 sec)
mysql> GRANT SUPER, REPLICATION CLIENT ON *.* TO 'proxysql'@'172.16.16.%' IDENTIFIED BY 'proxysql'; Query OK, 0 rows affected, 1 warning (0.09 sec) mysql> flush privileges; Query OK, 0 rows affected (0.10 sec)
mysql> set mysql-monitor_username='proxysql'; Query OK, 1 row affected (0.00 sec) mysql> set mysql-monitor_password='proxysql'; Query OK, 1 row affected (0.00 sec) mysql> load mysql variables to runtime; Query OK, 0 rows affected (0.00 sec) mysql> save mysql variables to disk; Query OK, 74 rows affected (0.02 sec)
mysql> insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent) values('root','123456',1,100,1); Query OK, 1 row affected (0.00 sec) mysql> select * from mysql_users;+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ | username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ | root | 123456 | 1 | 0 | 100 | NULL | 0 | 1 | 0 | 1 | 1 | 10000 | +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+1 row in set (0.00 sec)
mysql> load mysql servers to runtime; Query OK, 0 rows affected (0.01 sec) mysql> save mysql servers to disk; Query OK, 0 rows affected (0.08 sec) mysql> load mysql users to runtime; Query OK, 0 rows affected (0.00 sec) mysql> save mysql users to disk; Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT.*FOR UPDATE$',100,1); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT',101,1); Query OK, 1 row affected (0.00 sec) mysql> LOAD MYSQL QUERY RULES TO RUNTIME; Query OK, 0 rows affected (0.00 sec) mysql> SAVE MYSQL QUERY RULES TO DISK; Query OK, 0 rows affected (0.04 sec)
[root@localhost ~]# mysql -uroot -p123456 -h172.16.16.34 -P6033 mysql: [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 22Server version: 5.7.14 (ProxySQL) Copyright (c) 2000, 2016, 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. mysql> select * from maxiangqian.test;+-----+------+ | id | name | +-----+------+ | 1 | qq | | 2 | qq | | 4 | aa | | 11 | a | | 111 | a | +-----+------+5 rows in set (0.04 sec)
mysql> select * from stats_mysql_query_digest;
You can see that it has been completed Reading and writing are separated.
mysql> select @@server_id;+-------------+ | @@server_id | +-------------+ | 353307 | +-------------+1 row in set (0.01 sec)
mysql> select * from maxiangqian.test for update;+-----+------+ | id | name | +-----+------+ | 1 | qq | | 2 | qq | | 4 | aa | | 11 | a | | 111 | a | +-----+------+5 rows in set (0.00 sec)
mysql> select * from stats_mysql_query_digest;
The above is the detailed content of ProxySQL read-write separation from configuration to use. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



How to use PHP to implement data caching and read-write functions. Caching is an important way to improve system performance. Through caching, frequently used data can be stored in memory to increase the reading speed of data. In PHP, we can use various methods to implement data caching and reading and writing functions. This article will introduce two common methods: using file caching and using memory caching. 1. Use file caching. File caching stores data in files for subsequent reading. The following is a sample code that uses file caching to read and write data:

How to use the module system in Java 9 to separate and isolate code As the scale of software continues to expand, the complexity of the code continues to increase. In order to better organize and manage code, Java9 introduced the module system. The emergence of the module system solves the problem of traditional package dependencies, making the separation and isolation of code easier and more flexible. This article will introduce how to use the module system in Java 9 to achieve code separation and isolation. 1. Definition of module In Java9, we can use the module keyword to define

Title: Suggestions on front-end technology selection in Golang front-end and back-end separation development As the complexity and demands of web applications continue to increase, the front-end and back-end separation development model is becoming more and more popular. In this development model, the backend is responsible for processing business logic, and the frontend is responsible for displaying pages and interacting with users. The two communicate through APIs. For development teams using Golang as a back-end language, choosing the right front-end technology is crucial. This article will discuss the recommended front-end technologies to choose in the separate development of front-end and back-end in Golang, and

Concept fio, also known as FlexibleIOTester, is an application written by JensAxboe. Jens is the maintainer of blockIOsubsystem in LinuxKernel. FIO is a tool used to test network file system and disk performance. It is often used to verify machine models and compare file system performance. It automatically sends fio commands to a list of cluster machines and collects IOPS for small files and throughput data for large files. rw=[mode]rwmixwrite=30 In mixed read and write mode, writing accounts for 30% moderead sequential read write sequential write readwrite sequential mixed read and write randwrite random write r

File System APIThe internal principles of Java file operations are closely related to the file system API of the operating system. In Java, file operations are provided by the java.nio.file module in the java.NIO package. This module provides an encapsulation of the file system API, allowing Java developers to use a unified API to perform file operations on different operating systems. File Object When a Java program needs to access a file, it first needs to create a java.nio.file.Path object. The Path object represents a path in the file system, which can be an absolute path or a relative path. Once the Path object is created, you can use it to get various properties of the file, such as the name

Decrypting the reading and writing methods of processing DBF files in Java DBF (dBaseFile) is a common database file format that is usually used to store tabular data. In Java programs, processing the reading and writing of DBF files is a relatively common requirement. This article will introduce how to use Java to decrypt this process and provide specific code examples. 1. Reading DBF files In Java, reading DBF files usually requires the use of third-party libraries, such as the dbfread library. First, you need to configure the project

PHP developers often face database operations during the website development process. As a very popular database management system, MySQL's read-write separation is one of the important means to improve website performance. In PHP development, implementing MySQL read-write separation can greatly improve the website's concurrent access capabilities and user experience. This article will introduce in detail the implementation method of MySQL read-write separation, and provide specific PHP code examples to help PHP developers better understand and apply the read-write separation function. What is MySQL read

How to improve the access speed of Java website through static resource separation? With the rapid development of the Internet, more and more people use websites to obtain information and communicate. For a Java website, access speed is crucial, it directly affects the user experience and the success of the website. Among them, the loading speed of static resources is one of the important factors affecting the website access speed. This article will introduce how to improve the access speed of Java websites through static resource separation. What are static resources? First, we need to clarify what static resources are.
