0

我希望在本地使用 Docker 设置 proxysql 和 mysql,这样我就可以使用类似的东西流式传输所有传出日志(包括任何失败的日志)

docker logs -f proxysql

这样我就可以调试查询等。我取得了很好的进展。我的 docker compose 文件看起来像这样

services:
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: password
    ports:
      - 33060:33060
      - 3306:3306
  proxysql:
    build:
       context: ./proxysql
    image: ubuntu
    container_name: proxysql
    command: tail -F anything
    ports:
      - 6032:6032
    depends_on:
      - db

我的 sqlproxy Dockerfile看起来像这样

FROM ubuntu:18.04

RUN \
  apt-get -y update && \
  apt-get -y install mysql-client wget gdebi && \ 
  wget https://github.com/sysown/proxysql/releases/download/v2.0.2/proxysql_2.0.2-ubuntu18_amd64.deb && \
  gdebi -n proxysql_2.0.2-ubuntu18_amd64.deb

所以我可以通过 ssh 进入 proxysql 容器,并且可以验证我可以从 proxysql 容器内部连接到 db 容器。

通过运行此命令。注意 db 是 mysql 容器的名称

mysql -uroot -hdb -ppassword

我可以通过运行以下命令来启动 proxysql

proxysql -f

就在我的问题之外。


1)如何从本地机器通过代理连接到数据库?我的想法是这样的吗?

mysql -uadmin -padmin -h127.0.0.1 -P6032

2)如何在proxysql容器上配置sqlproxy?我查看了默认/etc/proxysql.cnf文件,这让我有点困惑?我在这里复制了配置,我认为值应该是什么?

admin_variables=
{
    admin_credentials="admin:admin"
    mysql_ifaces="0.0.0.0:6032"
}

mysql_variables=
{
    threads=4
    max_connections=2048
    default_query_delay=0
    default_query_timeout=36000000
    have_compress=true
    poll_timeout=2000
#   interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
    interfaces="0.0.0.0:6033"
    default_schema="information_schema"
    stacksize=1048576
    server_version="5.5.30"
    connect_timeout_server=3000
# make sure to configure monitor username and password
# https://github.com/sysown/proxysql/wiki/Global-variables#mysql-monitor_username-mysql-monitor_password
    monitor_username="monitor"
    monitor_password="monitor"
    monitor_history=600000
    monitor_connect_interval=60000
    monitor_ping_interval=10000
    monitor_read_only_interval=1500
    monitor_read_only_timeout=500
    ping_interval_server_msec=120000
    ping_timeout_server=500
    commands_stats=true
    sessions_sort=true
    connect_retries_on_failure=10
}


# defines all the MySQL servers
mysql_servers =
(
    {
        address = "db" # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
        port = 3306           # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
#       hostgroup = 0           # no default, required
#       status = "ONLINE"     # default: ONLINE
#       weight = 1            # default: 1
#       compression = 0       # default: 0
#   max_replication_lag = 10  # default 0 . If greater than 0 and replication lag passes such threshold, the server is shunned
    }
)


# defines all the MySQL users
mysql_users:
(
    {
        username = "root" # no default , required
        password = "password" # default: ''
        default_hostgroup = 0 # default: 0
        active = 1            # default: 1
    }
)


#defines MySQL Query Rules
mysql_query_rules:
(
)

scheduler=
(
#  {
#    id=1
#    active=0
#    interval_ms=10000
#    filename="/var/lib/proxysql/proxysql_galera_checker.sh"
#    arg1="0"
#    arg2="0"
#    arg3="0"
#    arg4="1"
#    arg5="/var/lib/proxysql/proxysql_galera_checker.log"
#  }
)


mysql_replication_hostgroups=
(
#        {
#                writer_hostgroup=30
#                reader_hostgroup=40
#                comment="test repl 1"
#       },
#       {
#                writer_hostgroup=50
#                reader_hostgroup=60
#                comment="test repl 2"
#        }
)
4

1 回答 1

0

这里有人创建了一个容器-> https://github.com/Plopix/docker-mysqlproxyprofiler。该容器的作用是将您的所有请求代理到现有数据库容器,并使用来自https://github.com/patrickallaert/MySQL-Proxy-scripts-for-devs的 .lua 脚本记录所有查询的调试。希望这可以帮助。

于 2019-05-13T11:11:14.780 回答