gpt4 book ai didi

mysql - 最近在生产中遇到 Rails-Mysql 连接问题

转载 作者:行者123 更新时间:2023-11-29 02:52:24 37 4
gpt4 key购买 nike

最近我在我的生产环境中遇到了奇怪的错误,使用 mysql2 gem 版本 0.3.20 运行带有 Mysql 5.6 的 Rails 3.2.22 应用程序

错误似乎是随机出现的,如果我尝试重现相同的情况、查询等,一切正常。在生产和开发环境中。

这些是我得到的错误:

A NoMethodError occurred in invoice_batches#show:

undefined method `each' for nil:NilClass
activerecord (3.2.22) lib/active_record/associations/preloader/association.rb:88:in `block in associated_records_by_owner'

.

A NoMethodError occurred in invoice_batches#show:

undefined method `fields' for nil:NilClass
activerecord (3.2.22) lib/active_record/connection_adapters/mysql2_adapter.rb:218:in `exec_query'

堆栈检查仅显示内部 Rails 代码,没有我自己的代码可供调试。

此外,这些本地 MySQL 错误不断弹出

An ActiveRecord::StatementInvalid occurred in invoice_batches#show:

Mysql2::Error: Lost connection to MySQL server during query: SELECT `users`.* FROM `users` WHERE `users`.`archived` = 0 AND `users`.`id` = 63 LIMIT 1
activerecord (3.2.22) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query'

An ActiveRecord::StatementInvalid occurred in templates#test_contract:

Mysql2::Error: Malformed packet: SELECT `permissions`.`pkey` FROM `permissions` WHERE `permissions`.`user_id` = 33 AND `permissions`.`client_id` = 7
activerecord (3.2.22) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query'

同样,我似乎无法在我的代码中重现或追溯原因。

知道这可能是什么吗?我最近将 Mysql2 gem 更新到最新版本 (0.3.20) 以及从 5.5 开始的 MySQL 服务器。到 5.6 Percona。这些错误以前发生过,现在仍在发生。通常紧接着。

我的 database.yml 包含以下生产内容:

production:
adapter: mysql2
encoding: utf8
reconnect: false
database: (...)
pool: 5
username: (...)
password: (...)
host: localhost
flags: <%= 65536 | 131072 %>

当我使用向导从 Mysql 5.5 升级到 5.6 Percona 时,我生成了一个全新的 my.cnf 配置文件。这是内容。我不得不手动添加整理行,因为在从以前的版本恢复转储后出现了一些错误。

# Generated by Percona Configuration Wizard (http://tools.percona.com/) version REL5-20120208
# Configuration name Mysql56-1 generated for (...) at 2015-12-13 22:03:44

[mysql]

# CLIENT #
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld]

# GENERAL #
user = mysql
default-storage-engine = InnoDB
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid

# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP

# SAFETY #
max-allowed-packet = 16M
max-connect-errors = 1000000
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
sysdate-is-now = 1
innodb = FORCE
innodb-strict-mode = 1
log_bin_trust_function_creators = 1

# DATA STORAGE #
datadir = /var/lib/mysql/

# BINARY LOGGING #
log-bin = /var/lib/mysql/mysql-bin
expire-logs-days = 14
sync-binlog = 1

# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 0
max-connections = 100
thread-cache-size = 16
open-files-limit = 65535
table-definition-cache = 1024
table-open-cache = 2048

# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 128M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = 2G

# LOGGING #
log-error = /var/log/mysql/mysql-error.log
log-queries-not-using-indexes = 1
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log

character-set-server = utf8
collation-server = utf8_general_ci

此服务器虚拟运行 Ubuntu 14.04、4 核和 6GB 内存。服务器在本地运行所有内容。 Apache、Passenger、Ruby 和 MySQL 在同一个虚拟机上。

这会不会是内存问题?对于具有 6GB RAM 的非专用数据库服务器,2G 是否过多?虽然 MySQL 似乎是唯一占用大量内存的进程,但似乎始终只有 ~500-1000MB 的可用内存。

最佳答案

您的问题可能与数据库连接共享有关。

请参阅 https://gist.github.com/josevalim/470808 上的长篇讨论.

他们多次提到 undefined method 'fields' for nil:NilClass 错误。

据我了解,当两个或多个线程共享连接时会出现此错误一个线程在其他线程完成所有查询之前回滚事务。

我不知道这个讨论是否与你的问题相关,但在我看来,您的问题与并发性有关,与内存分配无关。

关于mysql - 最近在生产中遇到 Rails-Mysql 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34312331/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com