Skip to content

ProxySQL changing charset variables #2289

@garutilorenzo

Description

@garutilorenzo

We have an unexpected behavior with ProxySQL.
It seems that ProxySQL in changing the charset on new connection/threads.

Some data about our environment:

OS: CentOS Linux release 7.3.1611 (Core)
Kernel: Linux blade10 3.10.0-693.11.1.el7.x86_64 SMP Mon Dec 4 23:52:40 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Python Version: Python 2.7.14
Python Mysql Library: MySQL-python (1.2.3rc1)
ProxySQL Version: ProxySQL version 2.0.6-73-gc746bf7, codename Truls
Mysql Version: 5.7.26: mysql Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using EditLine wrapper

ProxySQL variables:

mysql> show variables;
+-----------------------------------------------------+--------------------------------------------------------+
| Variable_name                                       | Value                                                  |
+-----------------------------------------------------+--------------------------------------------------------+
| admin-admin_credentials                             | admin:proxysql                                         |
| admin-checksum_mysql_query_rules                    | true                                                   |
| admin-checksum_mysql_servers                        | true                                                   |
| admin-checksum_mysql_users                          | true                                                   |
| admin-cluster_check_interval_ms                     | 1000                                                   |
| admin-cluster_check_status_frequency                | 10                                                     |
| admin-cluster_mysql_query_rules_diffs_before_sync   | 3                                                      |
| admin-cluster_mysql_query_rules_save_to_disk        | true                                                   |
| admin-cluster_mysql_servers_diffs_before_sync       | 3                                                      |
| admin-cluster_mysql_servers_save_to_disk            | true                                                   |
| admin-cluster_mysql_users_diffs_before_sync         | 3                                                      |
| admin-cluster_mysql_users_save_to_disk              | true                                                   |
| admin-cluster_password                              |                                                        |
| admin-cluster_proxysql_servers_diffs_before_sync    | 3                                                      |
| admin-cluster_proxysql_servers_save_to_disk         | true                                                   |
| admin-cluster_username                              |                                                        |
| admin-hash_passwords                                | true                                                   |
| admin-mysql_ifaces                                  | 0.0.0.0:6032                                           |
| admin-read_only                                     | false                                                  |
| admin-refresh_interval                              | 2000                                                   |
| admin-stats_credentials                             | stats:stats                                            |
| admin-stats_mysql_connection_pool                   | 60                                                     |
| admin-stats_mysql_connections                       | 60                                                     |
| admin-stats_mysql_query_cache                       | 60                                                     |
| admin-stats_system_cpu                              | 60                                                     |
| admin-stats_system_memory                           | 60                                                     |
| admin-telnet_admin_ifaces                           | (null)                                                 |
| admin-telnet_stats_ifaces                           | (null)                                                 |
| admin-vacuum_stats                                  | true                                                   |
| admin-version                                       | 2.0.6-73-gc746bf7                                      |
| admin-web_enabled                                   | false                                                  |
| admin-web_port                                      | 6080                                                   |
| mysql-add_ldap_user_comment                         |                                                        |
| mysql-auditlog_filename                             |                                                        |
| mysql-auditlog_filesize                             | 104857600                                              |
| mysql-auto_increment_delay_multiplex                | 5                                                      |
| mysql-autocommit_false_is_transaction               | false                                                  |
| mysql-autocommit_false_not_reusable                 | false                                                  |
| mysql-binlog_reader_connect_retry_msec              | 3000                                                   |
| mysql-client_found_rows                             | true                                                   |
| mysql-client_multi_statements                       | true                                                   |
| mysql-client_session_track_gtid                     | true                                                   |
| mysql-commands_stats                                | true                                                   |
| mysql-connect_retries_delay                         | 1                                                      |
| mysql-connect_retries_on_failure                    | 10                                                     |
| mysql-connect_timeout_server                        | 1000                                                   |
| mysql-connect_timeout_server_max                    | 10000                                                  |
| mysql-connection_delay_multiplex_ms                 | 0                                                      |
| mysql-connection_max_age_ms                         | 0                                                      |
| mysql-connpoll_reset_queue_length                   | 50                                                     |
| mysql-default_charset                               | utf8                                                   |
| mysql-default_max_latency_ms                        | 1000                                                   |
| mysql-default_query_delay                           | 0                                                      |
| mysql-default_query_timeout                         | 36000000                                               |
| mysql-default_reconnect                             | true                                                   |
| mysql-default_schema                                | information_schema                                     |
| mysql-default_sql_mode                              |                                                        |
| mysql-default_time_zone                             | SYSTEM                                                 |
| mysql-enforce_autocommit_on_reads                   | false                                                  |
| mysql-eventslog_default_log                         | 0                                                      |
| mysql-eventslog_filename                            |                                                        |
| mysql-eventslog_filesize                            | 104857600                                              |
| mysql-eventslog_format                              | 1                                                      |
| mysql-forward_autocommit                            | false                                                  |
| mysql-free_connections_pct                          | 10                                                     |
| mysql-have_compress                                 | true                                                   |
| mysql-have_ssl                                      | false                                                  |
| mysql-hostgroup_manager_verbose                     | 1                                                      |
| mysql-init_connect                                  |                                                        |
| mysql-interfaces                                    | 0.0.0.0:3306;0.0.0.0:3307;0.0.0.0:3308;/tmp/mysql.sock |
| mysql-keep_multiplexing_variables                   | tx_isolation,version                                   |
| mysql-kill_backend_connection_when_disconnect       | true                                                   |
| mysql-ldap_user_variable                            |                                                        |
| mysql-long_query_time                               | 1000                                                   |
| mysql-max_allowed_packet                            | 33554432                                               |
| mysql-max_connections                               | 2048                                                   |
| mysql-max_stmts_cache                               | 10000                                                  |
| mysql-max_stmts_per_connection                      | 20                                                     |
| mysql-max_transaction_time                          | 14400000                                               |
| mysql-min_num_servers_lantency_awareness            | 1000                                                   |
| mysql-mirror_max_concurrency                        | 16                                                     |
| mysql-mirror_max_queue_length                       | 32000                                                  |
| mysql-monitor_connect_interval                      | 60000                                                  |
| mysql-monitor_connect_timeout                       | 200                                                    |
| mysql-monitor_enabled                               | true                                                   |
| mysql-monitor_galera_healthcheck_interval           | 5000                                                   |
| mysql-monitor_galera_healthcheck_max_timeout_count  | 3                                                      |
| mysql-monitor_galera_healthcheck_timeout            | 800                                                    |
| mysql-monitor_groupreplication_healthcheck_interval | 5000                                                   |
| mysql-monitor_groupreplication_healthcheck_timeout  | 800                                                    |
| mysql-monitor_history                               | 600000                                                 |
| mysql-monitor_password                              | xxxxxxxx                                               |
| mysql-monitor_ping_interval                         | 2000                                                   |
| mysql-monitor_ping_max_failures                     | 1                                                      |
| mysql-monitor_ping_timeout                          | 750                                                    |
| mysql-monitor_query_interval                        | 60000                                                  |
| mysql-monitor_query_timeout                         | 100                                                    |
| mysql-monitor_read_only_interval                    | 1000                                                   |
| mysql-monitor_read_only_max_timeout_count           | 3                                                      |
| mysql-monitor_read_only_timeout                     | 800                                                    |
| mysql-monitor_replication_lag_interval              | 2000                                                   |
| mysql-monitor_replication_lag_timeout               | 1000                                                   |
| mysql-monitor_replication_lag_use_percona_heartbeat |                                                        |
| mysql-monitor_slave_lag_when_null                   | 60                                                     |
| mysql-monitor_threads_max                           | 128                                                    |
| mysql-monitor_threads_min                           | 8                                                      |
| mysql-monitor_threads_queue_maxsize                 | 128                                                    |
| mysql-monitor_username                              | xxxxxxxx                                               |
| mysql-monitor_wait_timeout                          | true                                                   |
| mysql-monitor_writer_is_also_reader                 | true                                                   |
| mysql-multiplexing                                  | true                                                   |
| mysql-ping_interval_server_msec                     | 2000                                                   |
| mysql-ping_timeout_server                           | 200                                                    |
| mysql-poll_timeout                                  | 2000                                                   |
| mysql-poll_timeout_on_failure                       | 100                                                    |
| mysql-query_cache_size_MB                           | 1024                                                   |
| mysql-query_cache_stores_empty_result               | true                                                   |
| mysql-query_digests                                 | true                                                   |
| mysql-query_digests_lowercase                       | false                                                  |
| mysql-query_digests_max_digest_length               | 2048                                                   |
| mysql-query_digests_max_query_length                | 65000                                                  |
| mysql-query_digests_normalize_digest_text           | false                                                  |
| mysql-query_digests_replace_null                    | false                                                  |
| mysql-query_digests_track_hostname                  | false                                                  |
| mysql-query_processor_iterations                    | 0                                                      |
| mysql-query_processor_regex                         | 1                                                      |
| mysql-query_retries_on_failure                      | 1                                                      |
| mysql-reset_connection_algorithm                    | 2                                                      |
| mysql-server_capabilities                           | 569867                                                 |
| mysql-server_version                                | 5.7.26                                                 |
| mysql-servers_stats                                 | true                                                   |
| mysql-session_idle_ms                               | 1000                                                   |
| mysql-session_idle_show_processlist                 | true                                                   |
| mysql-sessions_sort                                 | true                                                   |
| mysql-set_query_lock_on_hostgroup                   | 1                                                      |
| mysql-show_processlist_extended                     | 0                                                      |
| mysql-shun_on_failures                              | 1                                                      |
| mysql-shun_recovery_time_sec                        | 10                                                     |
| mysql-ssl_p2s_ca                                    |                                                        |
| mysql-ssl_p2s_cert                                  |                                                        |
| mysql-ssl_p2s_cipher                                |                                                        |
| mysql-ssl_p2s_key                                   |                                                        |
| mysql-stacksize                                     | 1048576                                                |
| mysql-stats_time_backend_query                      | false                                                  |
| mysql-stats_time_query_processor                    | false                                                  |
| mysql-threads                                       | 24                                                     |
| mysql-threshold_query_length                        | 524288                                                 |
| mysql-threshold_resultset_size                      | 4194304                                                |
| mysql-throttle_connections_per_sec_to_hostgroup     | 1000000                                                |
| mysql-throttle_max_bytes_per_second_to_client       | 0                                                      |
| mysql-throttle_ratio_server_to_client               | 0                                                      |
| mysql-verbose_query_error                           | false                                                  |
| mysql-wait_timeout                                  | 28800000                                               |
+-----------------------------------------------------+--------------------------------------------------------+

ProxySQL mysql servers:

+--------------+-----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+--------------+
| hostgroup_id | hostname        | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment      |
+--------------+-----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+--------------+
| 10           | master | 3306 | 0         | ONLINE | 1      | 0           | 100             | 0                   | 0       | 0              |              |
| 20           | master | 3306 | 0         | ONLINE | 1      | 0           | 100             | 1                   | 0       | 0              |              |
| 20           | slave1  | 3306 | 0         | ONLINE | 50     | 0           | 100             | 1                   | 0       | 0              |              |
| 20           | slave2 | 3306 | 0         | ONLINE | 50     | 0           | 100             | 1                   | 0       | 0              |              |
| 20           | slave3  | 3306 | 0         | ONLINE | 50     | 0           | 100             | 1                   | 0       | 0              |              |
| 30           | slave1  | 3306 | 0         | ONLINE | 1      | 0           | 100             | 3600                | 0       | 0              | slow replica |
| 30           | slave2 | 3306 | 0         | ONLINE | 1      | 0           | 100             | 3600                | 0       | 0              | slow replica |
| 30           | slave3  | 3306 | 0         | ONLINE | 1      | 0           | 100             | 3600                | 0       | 0              | slow replica |
+--------------+-----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+--------------+

ProxySQL query rules:

mysql> select * from mysql_query_rules;
+---------+--------+----------+------------+--------+-------------+------------+------------+--------+--------------+---------------+----------------------+--------------+---------+-----------------+-----------------------+-----------+--------------------+---------------+-----------+---------+---------+-------+-------------------+----------------+------------------+-----------+--------+-------------+-----------+---------------------+-----+-------+---------+
| rule_id | active | username | schemaname | flagIN | client_addr | proxy_addr | proxy_port | digest | match_digest | match_pattern | negate_match_pattern | re_modifiers | flagOUT | replace_pattern | destination_hostgroup | cache_ttl | cache_empty_result | cache_timeout | reconnect | timeout | retries | delay | next_query_flagIN | mirror_flagOUT | mirror_hostgroup | error_msg | OK_msg | sticky_conn | multiplex | gtid_from_hostgroup | log | apply | comment |
+---------+--------+----------+------------+--------+-------------+------------+------------+--------+--------------+---------------+----------------------+--------------+---------+-----------------+-----------------------+-----------+--------------------+---------------+-----------+---------+---------+-------+-------------------+----------------+------------------+-----------+--------+-------------+-----------+---------------------+-----+-------+---------+
| 50      | 1      | NULL     | NULL       | 0      | NULL        | NULL       | 3307       | NULL   | NULL         | NULL          | 0                    | CASELESS     | NULL    | NULL            | 30                    | 4000      | 1                  | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | NULL           | NULL             | NULL      | NULL   | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
| 100     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | 3308       | NULL   | NULL         | NULL          | 0                    | CASELESS     | NULL    | NULL            | 20                    | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | NULL           | NULL             | NULL      | NULL   | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
| 300     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | NULL         | .*            | 0                    | CASELESS     | NULL    | NULL            | 10                    | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | NULL           | NULL             | NULL      | NULL   | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
+---------+--------+----------+------------+--------+-------------+------------+------------+--------+--------------+---------------+----------------------+--------------+---------+-----------------+-----------------------+-----------+--------------------+---------------+-----------+---------+---------+-------+-------------------+----------------+------------------+-----------+--------+-------------+-----------+---------------------+-----+-------+---------+

MySQL (master) charset variables:

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

Our test results:

First run:

[user@host  ~]$ python /tmp/test.py 
({'Value': 'utf8', 'Variable_name': 'character_set_client'},
 {'Value': 'utf8', 'Variable_name': 'character_set_connection'},
 {'Value': 'latin1', 'Variable_name': 'character_set_database'},
 {'Value': 'binary', 'Variable_name': 'character_set_filesystem'},
 {'Value': 'utf8', 'Variable_name': 'character_set_results'},
 {'Value': 'latin1', 'Variable_name': 'character_set_server'},
 {'Value': 'utf8', 'Variable_name': 'character_set_system'},
 {'Value': '/usr/share/mysql/charsets/',
  'Variable_name': 'character_sets_dir'})

Second run:

[user@host ~]$ python /tmp/test.py
({'Value': 'latin1', 'Variable_name': 'character_set_client'},
 {'Value': 'latin1', 'Variable_name': 'character_set_connection'},
 {'Value': 'latin1', 'Variable_name': 'character_set_database'},
 {'Value': 'binary', 'Variable_name': 'character_set_filesystem'},
 {'Value': 'latin1', 'Variable_name': 'character_set_results'},
 {'Value': 'latin1', 'Variable_name': 'character_set_server'},
 {'Value': 'utf8', 'Variable_name': 'character_set_system'},
 {'Value': '/usr/share/mysql/charsets/',
  'Variable_name': 'character_sets_dir'})

Our test statement:

sql = """show variables like '%char%'"""

All queries we send are send to ProxySQL port 3306, host group id 10 (master)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions