MySQL 远程连接缓慢

MySQL 远程连接缓慢

随着我的电子商务 (PrestaShop) 的流量不断增长,导航开始变得缓慢,在阅读了这里的许多帖子后,我决定将我的 Web 服务器与我的 DB 服务器分开。我确实设置了 MySQL 远程连接。两台服务器都在同一个数据中心,彼此之间的 ping 时间不到 1ms。

当我将数据库切换到新的远程服务器时,一切都变得非常慢,

我在 my.cnf 配置中执行了 skip-name-resolve,但没有任何明显的变化。网站上的任何操作都需要超过 10 秒才能加载

我错过了什么?是因为 PrestaShop 吗?那么我该如何提高服务器可用性?我是否应该只在同一个框中的 Web 和 DB 服务器之间进行负载平衡?

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#skip_name_resolve
skip-name-resolve
#bind-address            = 127.0.0.1
#
# * Fine Tuning
#
key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8

myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10
# * Query Cache Configuration
#
query_cache_limit       = 1M
query_cache_size        = 16M

#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1

log_error = /var/log/mysql/error.log

#slow_query_log_file = /var/log/mysql/mysql-slow.log
#slow_query_log      = 1
#long_query_time = 2
#log_queries_not_using_indexes

#server-id              = 1
#log_bin                        = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
#binlog_do_db           = include_database_name
#binlog_ignore_db       = include_database_name

# chroot = /var/lib/mysql/

# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

[mysqldump]
quick
quote-names
max_allowed_packet      = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
key_buffer              = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

我没有发现服务器之间有任何数据包丢失。

我怎样才能正确调查并找出导致这种缓慢的原因?

我的服务器都运行 Debian 8:
CPU:Intel 2x Xeon E5-2630v3 - 16c/32t - 2,4GHz /3,2GHz
RAM:128Go DDR4 ECC 1866 MHz
磁盘:SoftRaid 2x2To SSD

答案1

检查 MySQL 压缩协议 - 当有大量记录需要从外部服务器(尤其是 WAN)返回到网页时非常方便

https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-connections.html

当设置为 true(或 1)时,如果客户端和服务器都支持压缩,则此选项将启用对客户端和服务器之间发送的所有信息的压缩。默认值为无压缩(false 或 0)。如果您使用命令参数进行连接,则等效参数为 --compress (-C)。压缩仅适用于使用经典 MySQL 协议的 MySQL Shell 连接。您可以设置 defaultCompress MySQL Shell 配置选项以为每个全局会话启用压缩。MySQL Shell \status 命令显示是否为会话启用了压缩。

答案2

尝试使用如下命令从应用程序服务器向数据库服务器手动运行 MySQL 查询,mysql并确定运行需要的时间:

  • time mysql -u'username' -p'password' -e'show status'

另外,确保没有防火墙规则等对网络速率的限制。

答案3

首先检查设置,看看是否确定没有网络瓶颈。

如果第二台服务器是全新安装,那么可能没有人调整该服务器上的设置。

其次,如果您分离流量,您就可以获得良好的结果。

例如:

  • 直接连接到 DB 服务器接口的 Web 服务器接口

  • Web服务器的接口B,用于处理Web请求

答案4

由于信息不足,所以无法明确回答您的问题。但是,我宁愿调查新服务器上的 MySQL 配置,而不是将重点放在网络作为问题的根本原因上。通常,它是 in /etc/mysql/my.cnf(或类似)。比较旧安装和新安装的两个版本。也许您需要增加连接池或其他东西?

相关内容