невозможно установить размер max_allowed_packet в 2G - PullRequest
0 голосов
/ 27 февраля 2020

Моя база данных mariadb10.2 не позволяет мне устанавливать размер max_allowed_packet равным 2G. Он установлен в файле my.cnf, но сохраняет его, когда я его вижу, он все еще находится на 1G. Мне нужно 2G для mysqldump для работы. Это работало правильно, пока не произошла неожиданная перезагрузка.

my.cnf file[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
ssl = true
ssl-cert = /opt/certs/mysql/client-cert.pem
ssl-key = /opt/certs/mysql/client-key.pem

[isamchk]
key_buffer_size = 16M

[mysqld]
basedir = /usr
bind-address = *
datadir = /mnt/mariadb/data/db
expire_logs_days = 10
innodb_buffer_pool_size = 4G
innodb_file_per_table = 1
innodb_log_buffer_size = 8M
innodb_log_file_size = 2G
innodb_stats_on_metadata = 0
key_buffer_size = 16M
log-error = /var/log/mariadb/mariadb.log
log_warnings = 4
max_allowed_packet = 2G
max_binlog_size = 100M
max_connections = 151
myisam_recover = BACKUP
pid-file = /var/run/mariadb/mariadb.pid
plugin-load = auth_pam.so;auth_socket.so
port = 3306
query_cache_limit = 1M
query_cache_size = 16M
skip-external-locking
socket = /var/lib/mysql/mysql.sock
sql-mode = STRICT_ALL_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
ssl = true
ssl-ca = /opt/certs/mysql/ca.pem
ssl-cert = /opt/certs/mysql/server-cert.pem
ssl-key = /opt/certs/mysql/server-key.pem
thread_cache_size = 8
thread_stack = 256K
tmpdir = /tmp
user = mysql

[mysqld_safe]
log-error = /var/log/mariadb/mariadb.log
nice = 0
socket = /var/lib/mysql/mysql.sock

[mysqldump]
max_allowed_packet = 2G
quick
quote-names

вывод при попытке установить временно

MariaDB [(нет)]> set global max_allowed_packet = 2147483684; ОШИБКА 1231 (42000): для переменной 'max_allowed_packet' не может быть установлено значение '2147483684'

мои резервные копии исчерпаны из cron с помощью загруженного сценария automysqlbackup. все вары управляются марионеткой, которую я временно отключил, чтобы попытаться снова получить эту работу.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вы должны найти другой способ создания резервных копий, потому что для max_allowed_packet не может быть установлено это значение.

В do c указано, что максимальное значение составляет 1 ГБ.

Вы уверены, что вам нужно такое большое значение? Значение должно быть таким же большим, как ваш самый большой BLOB-объект, а не размер вашей базы данных. С такими большими каплями сложно справиться.

0 голосов
/ 07 марта 2020

(Я рассмотрю ваш вопрос со многих сторон. Возможно, вы не поймете, сколько у вас действительно проблем.)

Уточнение . Таким образом, у вас есть строки больше, чем максимально допустимый для max_allowed_packet, и, следовательно, для mysqldump?

SELECT . Вы можете даже SELECT эти строки? Если нет, вы находитесь в еще большем рассоле.

Резервное копирование . Обратитесь к https://dba.stackexchange.com/questions/20/how-can-i-optimize-a-mysqldump-of-a-large-database/2853#2853 для других способов сделать резервную копию. Или https://dba.stackexchange.com/questions/161708/mysql-database-backup/161886#161886

OOM . Сколько у вас оперативной памяти? Я надеюсь, что это по крайней мере 8 ГБ. В противном случае вы угрожаете уничтожить ОЗУ.

Другая настройка . Если вы можете установить ограничение на количество пакетов, имейте в виду, что innodb_log_file_size должно быть как минимум в 10 раз больше этого размера. (В настоящее время это только 2G.)

Pushback . Вот аргумент, который нужно дать разработчикам ... Если 'vid' ('video'?) Будет предоставлено конечным пользователям через веб-сервер, то все будет проще (и разрешит ограничение в 1 ГБ), сохранив ссылка на видео файл . Затем используйте <img ...> (или что-то еще), которое будет достигнуто непосредственно для файла. Это будет обходить базу данных, делая вещи быстрее и проще.

Chunking . Однажды я был вынужден хранить огромные вещи - даже больше, чем 4 ГБ. Мое решение состояло в том, чтобы разделить большие данные на блоки размером 50 КБ (произвольно) и получить 2 таблицы - одну с метаинформацией, одну с таким количеством строк, сколько необходимо для хранения всех фрагментов. Грязный код, грязная база данных, глупый дизайн. О, и я столкнулся с некоторыми другими ограничениями. Apache имеет максимальный размер файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...