proxysql-old, MySQL的高性能代理

作者:无名 - GitHub -

  • 源代码名称:proxysql-old
  • 源代码网址:http://www.github.com/renecannao/proxysql-old
  • proxysql-old源代码文档
  • proxysql-old源代码下载
  • git url:
    git://www.github.com/renecannao/proxysql-old.git
  • git clone代码到本地:
    git clone http://www.github.com/renecannao/proxysql-old
  • subversion代码到本地:
    $ svn co --depth empty http://www.github.com/renecannao/proxysql-old

    checked out revision 1.

    $ cd repo

    $ svn up trunk

  • 这里项目已经移动

    请在 https://github.com/sysown/proxysql join。

    简介

    proxysql是高性能代理,目前仅适用于mysql和 fork ( 像percona服务器和 mariadb )。 proxysql的未来版本将支持多种数据库后端。

    它的开发是由于缺乏提供高性能的开源代理而驱动的。 可以在 http://www.proxysql.com 找到基准。

    安装

    依赖项

    除了标准库之外,需要的软件包,库和 header 文件包括:

    • 控件
    • gcc
    • glibc开发
    • glibc标头
    • openssl开发
    • openssl静态
    • glib2-devel
    • zlib开发
    • libffi开发

    proxysql还依赖于静态链接的几个库。 要下载并编译这些库,请运行以下命令:

    mkdir proxysql

    cd proxysql

    wget https://downloads.mariadb.org/interstitial/mariadb-native-client/source/mariadb-native-client.tar.gz

    tar -zxf mariadb-native-client.tar.gz

    cd mariadb-native-client

    mv zlib/example.c zlib/example1.c

    cmake.

    make -i

    cd..

    wget http://0pointer.de/lennart/projects/libdaemon/libdaemon-0.14.tar.gz

    tar -zxf libdaemon-0.14.tar.gz

    cd libdaemon-0.14

    ./configure amp;amp; make

    cd..

    wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2

    tar -jxf jemalloc-3.6.0.tar.bz2

    cd jemalloc-3.6.0

    ./configure --enable-xmalloc --enable-prof amp;amp; make

    cd..

    wget http://ftp.gnome.org/pub/gnome/sources/glib/2.40/glib-2.40.0.tar.xz

    tar -xjf glib-2.40.0.tar.xz

    cd glib-2.40.0

    ./configure --enable-static

    make

    cd..

    编译

    从上一节编译这些库之后,下载并编译运行以下内容的proxysql:

    wget https://github.com/renecannao/proxysql/archive/master.zip

    unzip master.zip

    cd proxysql-master/src

    make

    请注意,还没有提供任何配置。 你必须检查是否存在丢失的依赖项。

    安装

    make install 还不可用。

    你可以手动安装运行以下命令的proxysql:

    cp proxysql/usr/bin

    mkdir/var/run/proxysql

    交互式配置

    在编译之后,运行 。/proxysql_interactive_config。pl,它将指导你创建第一个配置文件。 完成后,在/etc/proxysql.cnf 中复制配置文件。

    用法

    用法如下:

    $./proxysql --help

    usage:

    proxysql [option...] - high performance advanced proxy for mysql

    help options:

    -h, --help show help options

    application options:

    --admin-port administration port

    --mysql-port mysql proxy port

    -c, --config configuration file

    proxysql侦听 3个不同的tcp端口: 其中的2是通过 命令行 参数配置的:

    • --mysql-port 指定了mysql客户端应该连接到的端口
    • --admin-port 指定管理端口

    无法通过 命令行 配置 3rd 端口是监控端口。 注意,这个 module 还没有完全实现。

    其他 option(s):

    • --config 指定配置文件

    配置文件是必需的。 如果没有在 命令行 上指定,则默认为当前目录中的proxysql.cnf ( 如果存在) 或者/etc/proxysql.cnf。 目前,配置文件没有强输入验证,错误的解析可能导致proxysql在启动时崩溃。 如果解析文件的解析成功,proxysql将守护进程

    proxysql配置

    proxysql使用两种配置源:

    • key-value 格式的配置文件
    • 内置数据库,存储更高级的配置并使用表来定义它们之间的多个属性和关系。 目前,这是作为sql数据库实现

    配置文件

    配置文件是 key-value 文件,如config文件( 请参阅 https://developer.gnome.org/glib/stable/glib-key-value-file-parser.html 参考)。ini。

    目前有 7组可用:

    • [global]: 一般配置
    • [admin]: 与管理和监视接口相关的配置选项
    • [http]: 与http服务器相关的配置选项。 功能尚不可用
    • [mysql]: 与mysql连接处理相关的配置选项
    • [fundadb]: 用于缓存的内部存储器配置选项
    • [debug]: 与调试相关的配置选项
    • [mysql users]: 指定用户及其密码,这些用户和密码用于连接到mysql服务器
    • stack_size

      指定proxysql中创建的每个线程所使用的堆栈大小,以字节为单位。 默认值为 524288 ( 512kb ),最小为 65536 ( 64kb ),最大为 33554432 ( 32mb )。

      最新版本的proxysql使用线程池而不是每个连接的一个线程,因此栈大小的内存占用很少。

    • net_buffer_size

      每个到proxysql的连接都创建了一个称为mysql数据流。 每个mysql数据流都有 2个用于接收和发送的缓冲区。 net_buffer_size 定义了每个缓冲区的大小。 从proxysql到mysql服务器的每个连接都需要一个mysql数据流。 如果连接的n+1服务器没有建立连接,那么每个客户端连接都可以有不同数量的mysql数据流,如果没有连接到mysql服务器,那么它就可以从一个数据流中得到。

      默认值为 8192 ( 8kb ),最小为 1024 ( 1kb ),最大为 16777216 ( 16mb )。 如果大数据集的情况下,增加这里变量可以提高性能,以增加内存使用率为代价。

    • 待办事项

      定义 listen() 调用的backlog参数。 默认值为 2000,最小值为 50

    • core_dump_file_size

      定义核心转储文件的最大大小,用于调试崩溃。 默认值为 0 ( 无核心转储)。

    • datadir

      定义链接。不是绝对文件路径是 relative 到链接。 默认值为 /var/run/proxysql。

    • error_log

      错误日志的路径。默认值为 proxysql.log。

    • 调试

      启用或者禁用调试消息,如果proxysql是通过支持调试编译的。 布尔参数( 0/1 ),其中 0是默认的( 已经禁用)。

    • debug_log

      调试日志的路径。默认值为 debug.log。

    • pid_file

      pid文件默认值为 proxysql.pid

    • restart_on_error

      当proxysql执行时,它将在 2个进程中分支: 一个天使进程和代理本身。 如果 restart_on_error 设置为 1,则当该进程意外终止时,进程进程将重新启动代理

    • restart_delay

      如果代理进程意外死亡并且天使进程被配置为重启它,那么这个进程将在重启前暂停2 秒钟的restart_delay。 默认值为 5,最小值为 0,最大值为 600 ( 10分钟)。

    • proxy_admin_pathdb

      它定义了存储高级配置的数据库的路径。 默认值为 proxysql.db

    • proxy_admin_bind

      它定义了管理接口将绑定到的ip地址。 默认值为 0.0.0.0

    • proxy_admin_port

      它定义运行时配置和统计信息的管理端口。 默认值为 6032

    • proxy_admin_user

      它定义了用户连接到管理界面的方式。 默认为管理。

    • proxy_admin_password

      它定义了连接到管理接口的密码。 默认为管理。

    • proxy_admin_refresh_status_interval

      proxysql不会不断更新管理界面中的状态变量/表。 这些更新仅在读取时更新,并且在每次 proxy_admin_refresh_status_interval 秒 seconds。 默认值为 600 ( 10分钟),最小值为 0,最大值为 3600 ( 1小时)。

    • proxy_monitor_bind

      它定义了监视器接口将绑定到的ip地址。 默认值为 0.0.0.0

    • proxy_monitor_port

      它为运行时统计定义监视端口。 默认值为 6031.这里 module 还没有完全实现

    • proxy_monitor_user

      它定义了用户连接到监视接口。 默认为监视器。 这里 module 还没有完全实现

    • proxy_monitor_password

      它定义了连接监控接口的密码。 默认为监视器。 这里 module 还没有完全实现

    • proxy_monitor_refresh_status_interval

      proxysql不经常更新监视界面中的状态变量/表。 这些更新仅在读取时更新,并且在每次 proxy_monitor_refresh_status_interval 秒 seconds。 默认值为 10,最小值为 0,最大值为 3600 ( 1小时)。 这里 module 还没有完全实现

    • sync_to_disk_on_flush_command

      当sync_to_disk_on_flush_command=1在内存配置中自动保存在磁盘每次刷新命令后。 布尔参数( 0/1 ),其中 1是默认的( 已经启用)。

    • sync_to_disk_on_shutdown

      当sync_to_disk_on_shutdown=1在管理界面中执行关闭命令时,内存配置中的自动保存在磁盘上。 布尔参数( 0/1 ),其中 1是默认的( 已经启用)。

    这里 module 还没有实现。

    • mysql_threads

      早期版本的proxysql使用 1个线程,而最近版本使用一个线程池来处理所有连接。 对于某些工作负载和优化的线程数,性能提高 20%。 这也可以极大地减少proxysql使用的内存量。 需要进一步优化。默认值为 number-of-cpu-cores 2,最小值为 2,最大值为 128.

    • mysql_default_schema

      每个连接需要默认模式( 数据库)。 如果客户端没有指定模式而连接,则应用 mysql_default_schema。 它默认为 information_schema。

      如果使用的是一个数据库,请指定默认模式( 数据库) 可以保存每个新连接的请求。

    • proxy_mysql_bind

      它定义了mysql接口将绑定到的ip地址。 默认值为 0.0.0.0

    • proxy_mysql_port

      指定mysql客户端应该连接到的端口。 默认值为 6033。

    • mysql_socket

      proxysql还可以通过 mysql_socket 中指定的unix域套接字接受连接。 仅当客户端和proxysql在同一服务器上运行时,这里套接字才可用。 基准表明,通过在内部查询缓存( 就是,非常快) 中提供所有查询的工作负载,unix域套接字提供 50%倍的吞吐量。 默认值为 /tmp/proxysql.sock

    • mysql_hostgroups

      proxysql将mysql后端分为 hostgroups。 mysql_hostgroups 定义hostgroups的最大数量。 默认值为 8,最小值为 2 ( 对经典读/写拆分足够),最大值为 64.

    • mysql_poll_timeout

      每个到proxysql的连接都由一个线程处理,该线程在打开的所有文件描述符上调用 poll()。 poll() 被调用时超时,超时为1 毫秒,毫秒。 默认值为 10000 ( 10秒),最小值为 100 ( 0.1秒)。 同样的超时也在管理接口和监视接口中应用。

    • mysql_auto_reconnect_enabled

      如果由于杀死或者超时而删除到mysql服务器的连接,它将自动重新连接。 这里功能非常不稳定,不应启用。 默认值为 0 ( 已经禁用)。

    • mysql_query_cache_enabled

      启用可以用于缓存select语句的内部查询缓存。 布尔参数( 0/1 ),默认值为 1 ( 已经启用)。

    • mysql_query_cache_partitions

      在几个分区中划分内部查询缓存以减少冲突。 默认值为 16,最小值为 1,最大值为 128.

    • mysql_query_cache_size

      如果启用,它定义内部查询缓存的大小。 默认值为 1048576 ( 1mb ),因此它的最小值为。 没有最大定义。

    • mysql_query_cache_precheck

      选项被启用,即使没有配置,也会对每个查询检查内部查询缓存。 如果查询缓存命中率较高,启用这里选项可以提高性能,因为它阻止了查询的解析。 布尔参数( 0/1 ),默认值为 1 ( 已经启用)。

    • mysql_max_query_size

      从客户端接收的查询可以是任意长度。 但是,为了优化内存利用率并提高性能,只需要对小于1 个mysql_max_query_size的查询进行分析并处理。 任何超过 mysql_max_query_size的查询都被转发到一个不被处理的mysql服务器。 这也意味着对于大型查询,查询缓存被禁用。 默认值为 1048576 ( 1mb ),最大长度为 16777210 ( 少于 16 mb的字节数)。

    • mysql_max_resultset_size

      服务器向proxysql发送resultset时,在将resultset转发到客户端之前将它的内部存储。 mysql_max_resultset_size 定义被缓冲的resultset的最大大小: 一旦resultset通过这个阈值它就停止缓冲并触发一个快速转发算法。 间接地,它还定义可以缓存的resultset的最大大小。 将来将引入一个单独的选项。 默认值为 1048576 ( 1mb )。

    • mysql_query_cache_default_timeout

      每个缓存的resultset都有一个生存时间。 mysql_query_cache_default_timeout定义了预定义缓存规则的默认时间,当管理员没有显式配置查询规则时,将使用该默认时间来执行。 默认值为 1秒。

    • mysql_server_version

      当客户端连接到proxysql时,它将自身引入到mysql版本 mysql_server_version。 默认值为" 5.1.30"( 5.1的第一个ga版本)。

    • 英镑 mysql_usage_user 和英镑 mysql_usage_password

      如果在启动时( 并且在未来的版本中也会定期出现) 连接到所有配置为验证连接和状态的mysql服务器( 如果仅在第一个自动配置期间确定服务器是主服务器还是从服务器),则该选项将连接到所有mysql服务器: 不要依赖于高级设置。 定义用户名和密码,并定义proxysql用来连接mysql服务器的用户名和密码。 就像 name 所暗示的,只需要使用特权。 默认值为 mysql_usage_user=proxy and mysql_usage_password=proxy。

    • mysql_servers

      定义一个以 hostname:port 格式作为后端的mysql服务器列表,以';'分隔。 示例:mysql_servers= 192.168.1.2: 3306 ;192.168.1.3: 3306 ;192.168.1.4: 3306. 无默认值。

      英镑注释:这里列表仅用于构建中的数据库,但还没有出现。 如果已经存在内置数据库,则忽略这里选项。

    • mysql_connection_pool_enabled

      proxysql将自己的连接池实现到mysql后端。 布尔参数( 0/1 ),其中 1是默认的( 已经启用)。

    • mysql_share_connections

      启用连接池后,还可以在客户端之间共享连接。 布尔参数( 0/1 ),其中 0是默认的( 已经禁用)。

      禁用这里功能并将连接分配给客户端时,这里连接将仅由特定的客户端连接使用,并且不会共享。 即:与mysql服务器之间的连接不在客户端连接之间共享。 启用这里功能后,多个客户端可以使用相同的连接到单个后端。 这个特性是实验。

    • mysql_wait_timeout

      如果连接池启用了( mysql_connection_pool_enabled=1 ),则未使用的连接( 未指派给任何客户端) 将在 mysql_wait_timeout 秒后自动下降。 默认值为 28800 ( 8小时),最小值为 1秒,最大值为 604800 ( 1周)。 这里选项必须比mysql变量 wait_timeout 小。

    • mysql_parse_trx_cmds

      如果不相关,proxysql可以过滤不必要的事务命令。 例如,如果连接发送开始或者提交两次没有任何命令在之间,第二个命令被筛选。 布尔参数( 0/1 ),其中 0是默认的( 已经禁用)。 这个特征是绝对的,不稳定的。

    • mysql_maintenance_timeout

      禁用后端服务器时,仅立即终止空闲连接。 所有其他活动连接都有 mysql_maintenance_timeout 毫秒在终止前正常关闭。 默认值为 10000 ( 10秒),最小值为 1000 ( 1秒),最大值为 60000 ( 1分钟)。

    • mysql_poll_timeout_maintenance

      禁用后端服务器时,poll() 超时为 mysql_poll_timeout_maintenance而不是 mysql_poll_timeout。 这里变量也以毫秒为单位。 默认值为 100 ( 0.1秒),最小值为 100 ( 0.1秒),最大值为 1000 ( 1秒)。

    • mysql_query_statistics_enabled

      proxysql在启用时收集查询统计信息。 这里选项可能会影响性能。 布尔参数( 0/1 ),其中 0是默认的( 已经禁用)。

    • mysql_query_statistics_interval

      这里选项指定( 以秒为单位) proxysql转储查询统计信息的频率。 默认值为 10 ( 秒),最小值为 5,最大值为 600 ( 10分钟)。

    本节包含用户和 relative 密码的列表,格式为 user=password。 没有密码的用户的格式为 user=。 例如:

    root=secretpass

    webapp=$ecr3t

    guest=

    test=password

    本节允许与负责清除内部查询缓存的线程相关的advenced调调。 通常不需要调整它。

    • fundadb_hash_purge_time

      清除哈希 table的总时间,毫秒。 默认值为 10000 ( 10秒),miminum为 100 ( 0.1秒),最大值为 600000 ( 10分钟)

    • fundadb_hash_purge_loop

      散列 table的清除是以小块时间执行的,由 fundadb_hash_purge_loop 定义。 默认值为 100 ( 0.1秒),最小值为 100 ( 0.1秒) 和最大值为 60000 ( 1 分钟)

    • fundadb_hash_expire_default

      fundadb哈希默认值在秒内过期。 这与内部查询中的每个条目总是具有显式超时无关。

    • fundadb_hash_purge_threshold_pct_min

      触发正常清除的内存使用的最小百分比。 如果内存使用情况为 below,则不执行清除操作。 默认值为 50 ( % ),最小值为 0,最大值为 90.

    • fundadb_hash_purge_threshold_pct_max

      触发正常清除的内存使用的最大百分比。 如果内存使用是 上面,则执行激进清除。 默认值为 90 ( % ),最小值为 50,最大值为 100.

    快速入门教程

    下载和编译

    有关如何下载和编译proxysql的示例,请参见 上面

    创建小型复制环境

    为了尝试 proxysql,我们可以使用一个独立的rtc实例,或者一个小型的。 要快速创建一个小型复制环境,你可以使用mysql沙箱:

    rene@voyager:~$ make_replication_sandbox mysql_binaries/mysql-5.5.34-linux2.6-i686.tar.gz

    installing and starting master

    installing slave 1

    installing slave 2

    starting slave 1

    .... sandbox server started

    starting slave 2

    .... sandbox server started

    initializing slave 1

    initializing slave 2

    replication directory installed in $home/sandboxes/rsandbox_mysql-5_5_34

    安装集群后,验证哪些端口正在侦听不同的mysqld进程:

    rene@voyager:~$ cd sandboxes/rsandbox_mysql-5_5_34

    rene@voyager:~/sandboxes/rsandbox_mysql-5_5_34$ cat default_connection.json

    {

    "master":

    {

    "host":"127.0.0.1",

    "port":"23389",

    "socket":"/tmp/mysql_sandbox23389.sock",

    "username":"msandbox@127.%",

    "password":"msandbox"

    }

    ,

    "node1":

    {

    "host":"127.0.0.1",

    "port":"23390",

    "socket":"/tmp/mysql_sandbox23390.sock",

    "username":"msandbox@127.%",

    "password":"msandbox"

    }

    ,

    "node2":

    {

    "host":"127.0.0.1",

    "port":"23391",

    "socket":"/tmp/mysql_sandbox23391.sock",

    "username":"msandbox@127.%",

    "password":"msandbox"

    }

    }

    mysqld进程正在监听端口 23389 ( 母版) 和 23390和 23391 ( 从机)。

    配置

    proxysql没有配置文件配置文件。 使用下面的示例创建一个名为 proxysql.cnf的新名称:

    [global]

    datadir=/home/rene/proxysql/proxysql-master/src

    [mysql]

    mysql_usage_user=proxy

    mysql_usage_password=proxy

    mysql_servers=127.0.0.1:23389;127.0.0.1:23390;127.0.0.1:23391

    mysql_default_schema=information_schema

    mysql_connection_pool_enabled=1

    mysql_max_resultset_size=1048576

    mysql_max_query_size=1048576

    mysql_query_cache_enabled=1

    mysql_query_cache_partitions=16

    mysql_query_cache_default_timeout=30

    [mysql users]

    msandbox=msandbox

    test=password

    注意即使未使用,[global] 部分也是必需的。

    在mysql上创建用户

    我们将proxysql配置为使用 3个用户:

    • 代理:这里用户只需要使用特权,它用于验证服务器是否处于活动状态以及read_only的值
    • msandbox和测试:这些是应用程序可以用来通过代理连接mysqld的两个普通用户

    用户msandbox已经存在,因此只有用户代理和测试需要创建。 例如:

    rene@voyager:~$ mysql -h 127.0.0.1 -u root -pmsandbox -p23389 -e"grant usage on *.* to 'proxy'@'127.0.0.1' identified by 'proxy'";

    rene@voyager:~$ mysql -h 127.0.0.1 -u root -pmsandbox -p23389 -e"grant all privileges on *.* to 'test'@'127.0.0.1' identified by 'password'";

    使用配置从属服务器

    第一次执行proxysql时,proxysql只将主节点与从节点区分开来,只检查全局变量。 这意味着你必须使用read_only=on或者proxysql配置 slave,同时也将把dml发送给它们。 注意,这使得proxysql适合使用诸如ndb和galera这样的集群解决方案的多主环境。

    验证read_only在所有服务器上的状态:

    rene@voyager:~$ for p in 23389 23390 23391 ; do mysql -h 127.0.0.1 -u root -pmsandbox -p$p -b -n -e"show variables like 'read_only'" ; done

    read_only off

    read_only off

    read_only off

    更改从属服务器上的read_only:

    rene@voyager:~$ for p in 23390 23391 ; do mysql -h 127.0.0.1 -u root -pmsandbox -p$p -b -n -e"set global read_only=on" ; done

    再次验证read_only在所有服务器上的状态:

    rene@voyager:~$ for p in 23389 23390 23391 ; do mysql -h 127.0.0.1 -u root -pmsandbox -p$p -b -n -e"show variables like 'read_only'" ; done

    read_only off

    read_only on

    read_only on

    启动"

    proxysql现在可以执行了:

    rene@voyager:~/proxysql/proxysql-master/src$./proxysql

    注意,proxysql将 fork 运行为 2进程,一个天使进程和代理本身:

    rene@voyager:~/proxysql/proxysql-master/src$ ps aux | grep proxysql

    rene 31007 0.0 0.0 32072 904 s 08:03 0:00./proxysql

    rene 31008 0.0 0.0 235964 2336 sl 08:03 0:00./proxysql

    连接至

    你现在可以连接到运行任何mysql客户机的proxysql。 例如:

    rene@voyager:~$ mysql -u msandbox -pmsandbox -h 127.0.0.1 -p6033

    welcome to the mysql monitor. commands end with ; or g.

    your mysql connection id is 3060194112

    server version: 5.1.30 mysql community server (gpl)

    copyright (c) 2000, 2013, 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.

    mysqlgt;

    敏锐的观察者可以立即理解我们没有直接连接到 mysql,而是在proxysql中。 一个较小的观察者可能会从下一个输出中理解它:

    mysqlgt; s

    --------------

    mysql ver 14.14 distrib 5.5.34, for debian-linux-gnu (i686) using readline 6.2

    connection id: 3060194112

    current database: information_schema

    current user: msandbox@localhost

    ssl: not in use

    current pager: stdout

    using outfile: ''

    using delimiter: ;

    server version: 5.1.30 mysql community server (gpl)

    protocol version: 10

    connection: 127.0.0.1 via tcp/ip

    server characterset: latin1

    db characterset: utf8

    client characterset: latin1

    conn. characterset: latin1

    tcp port: 6033

    uptime: 51 min 56 sec

    threads: 4 questions: 342 slow queries: 0 opens: 70 flush tables: 1 open tables: 63 queries per second avg: 0.109

    --------------

    mysqlgt;

    你注意到了? 如果没有,请注意该行:

    server version: 5.1.30 mysql community server (gpl)

    我们安装了 mysql 5.5.34,但是客户端说 5.1.30. 这是因为在认证阶段proxysql将自身引入为mysql版本 5.1.30. 这是通过参数 mysql_server_version 配置的。 注意:proxysql不使用后端的真正版本,因为它可以使用不同版本运行后端。

    另外,mysql表示当前数据库是 information_schema,而我们在连接期间没有指定任何内容。

    我们现在连接哪个服务器? 由于读/写拆分,所以不能总是回答这个问题。 我们所知道的是:

    • 没有更新的select语句被发送到 slaves ( 而且,如果 mysql_use_masters_for_reads=1,默认情况下为 master ) ;
    • 用于更新的select语句被发送到主服务器;
    • 任何其他语句只发送到主主机;
    • 缓存不带更新的语句缓存。

    让我们尝试了解我们连接的服务器是在哪个服务器上运行的:

    mysqlgt; select @@port;

    +--------+

    | @@port |

    +--------+

    | 23391 |

    +--------+

    1 row in set (0.00 sec)

    我们使用端口 23391连接到服务器上。 这里信息仅是 true的第一次运行时。 事实上,如果我们从另一个连接运行相同的查询,我们将得到相同的结果,因为这个查询被缓存。 另外,如果我们断开客户端连接并再次连接,上面 查询将在缓存失效后返回相同的结果。 为什么proxysql实现连接池,如果到代理的客户端连接关闭后端连接将被下一个客户端连接重用。

    要验证缓存的效果,可以运行以下命令:

    mysqlgt; select now();

    +---------------------+

    | now() |

    +---------------------+

    | 2013-11-20 17:55:25 |

    +---------------------+

    1 row in set (0.00 sec)

    mysqlgt; select @@port;

    +--------+

    | @@port |

    +--------+

    | 23391 |

    +--------+

    1 row in set (0.00 sec)

    mysqlgt; select now();

    +---------------------+

    | now() |

    +---------------------+

    | 2013-11-20 17:55:25 |

    +---------------------+

    1 row in set (0.00 sec)

    "选择现在( )的resultset不随时间变化。 也许这不是你想要的。

    测试//分离

    下面是如何测试 r/w 拆分的示例。

    在母版上写入:

    mysqlgt; show databases;

    +--------------------+

    | database |

    +--------------------+

    | information_schema |

    | mysql |

    | performance_schema |

    | test |

    +--------------------+

    4 rows in set (0.02 sec)

    mysqlgt; use test

    database changed

    mysqlgt; create table tbl1 (id int);

    query ok, 0 rows affected (0.25 sec)

    mysqlgt; insert into tbl1 values (1);

    query ok, 1 row affected (0.03 sec)

    从从站读取:

    mysqlgt; select * from tbl1;

    +------+

    | id |

    +------+

    | 1 |

    +------+

    1 row in set (0.00 sec)

    以下查询检索 @@port,,以便我们可以验证在从节点上执行它:

    mysqlgt; select @@port, t.* from tbl1 t;

    +--------+------+

    | @@port | id |

    +--------+------+

    | 23391 | 1 |

    +--------+------+

    1 row in set (0.00 sec)

    要强制从母版读取,必须指定更新:

    mysqlgt; select @@port, t.* from tbl1 t for update;

    +--------+------+

    | @@port | id |

    +--------+------+

    | 23389 | 1 |

    +--------+------+

    1 row in set (0.01 sec)

    默认查询规则



    文章标签:higperf性能proxy

    IT人知识库 原文地址:http://www.itpeo.net/389612/4632588.html





    mdf, 面向 python的数据流编程工具包

    源代码名称:mdf源代码网址:http://www.github.com/manahl/mdfmdf源代码文档mdf源代 ...

    ACRExtensions, Amazon云阅读器扩展

    源代码名称:acrextensions源代码网址:http://www.github.com/binarycrafts/ ...

    STCollapseTableView, UITableView子类自动折叠和/或者扩展你的节

    源代码名称:stcollapsetableview源代码网址:http://www.github.com/isoftom ...

    ngWebDriver, Java的AngularJS和 WebDriver

    源代码名称:ngwebdriver源代码网址:http://www.github.com/paul-hammant/ng ...

    lua_sandbox, 用于动态数据分析的通用Lua沙箱

    源代码名称:lua_sandbox源代码网址:http://www.github.com/mozilla-service ...

    socket.io-poco, 使用poco库编写的跨平台 C++ socket.io 客户端

    源代码名称:socket.io-poco源代码网址:http://www.github.com/himynameschr ...

    python-logstash, Logstash的python 日志处理程序

    源代码名称:python-logstash源代码网址:http://www.github.com/vklochan/py ...

    episcina, 连接的简单非侵入性资源池

    源代码名称:episcina源代码网址:http://www.github.com/erlware/episcinaep ...

    waspmoteapi, 测试和稳定的Waspmote API库

    源代码名称:waspmoteapi源代码网址:http://www.github.com/libelium/waspmo ...

    java-bells, 在 Libjitsi Ice4J和Smack上实现基于Java的chord的实现

    源代码名称:java-bells源代码网址:http://www.github.com/bejayoharen/java ...

    dploy, 在 node.js 中,构建了一个 ftp/sftp部署工具

    源代码名称:dploy源代码网址:http://www.github.com/lucasmotta/dploydploy ...

    rfedfre

    Google-Actions-Java-SDK, 针对Android工程师和所有Java爱好者的非官方谷歌操作

    源代码名称:google-actions-java-sdk源代码网址:http://www.github.com/fro ...

    react-ui, 在 Bootstrap 4.0上,用于响应的组件集合,以

    源代码名称:react-ui源代码网址:http://www.github.com/lobos/react-uireac ...

    rfedfre

    ripr, 使用二进制忍者和Unicorn引擎将二进制代码封装为 python 类

    源代码名称:ripr源代码网址:http://www.github.com/pbiernat/riprripr源代码文档 ...

    technomachine, 加工+ 声Pi技术机

    源代码名称:technomachine源代码网址:http://www.github.com/mehackit/tech ...

    webpack-MultiplePage, 基于webpack的前端工程化方案(自动入口配置及后端模板)

    源代码名称:webpack-multiplepage源代码网址:http://www.github.com/vhtml/ ...

    c-jwt-cracker, 在C 中,编写JWT强力cracker

    源代码名称:c-jwt-cracker源代码网址:http://www.github.com/brendan-rius/ ...

    gcmnetworkmanager-android-example, 在 I/O 2015上,介绍了GCMNetworkManager的一个示例

    源代码名称:gcmnetworkmanager-android-example源代码网址:http://www.gith ...

    sgxfun, SGX 命令行 工具和纸张

    源代码名称:sgxfun源代码网址:http://www.github.com/kudelskisecurity/sgx ...

    CloudFlareDDNS, 使用CloudFlare创建你自己的DDNS服务

    源代码名称:cloudflareddns源代码网址:http://www.github.com/scotthelme/c ...