mysqldump работает очень медленно при использовании частного IP-адреса

Я столкнулся с очень странной проблемой с Mysql.

У меня два облачных сервера, и они находятся в одном регионе и в одной сети VPC, поэтому скорость внутреннего соединения довольно высока. Оба сервера работают под управлением CentOS 7.6. Я выполнил простой тест, используя scp , чтобы скопировать один большой файл между ними, и скорость составила около 160 МБ / с.

Затем я установил MySQL 5.7 на одном из серверов. Я импортировал в него базу данных (около 40 ГБ).

В следующий раз, когда я попытался выполнить mysqldump (локально на сервере db), я обнаружил, что скорость очень низкая. Это примерно 4 ~ 5 МБ / с. Это заняло более 30 минут.

Вот команда, которую я использовал:

mysqldump -q --master-data = 2 --single-transaction -utest -p'xxxxx '-h192.168.1.47 testdb> testdb.sql

192.168 .1.47 - это частный IP-адрес сервера.

Затем я удалил часть «-h192.168.1.47» и вместо этого использовал «localhost», скорость очень высокая и составляла около 20 ~ 30 МБ / с. На создание дампа базы данных ушло всего шесть минут.

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

Мой вопрос: есть ли какие-либо настройки или ограничения на стороне Linux или MySQL настройка, которая может вызвать такое поведение? Ниже приведен файл конфигурации mysql.

symbolic-links=0

skip-name-resolve
bind-address=192.168.1.47
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
table_open_cache=4096
open_files_limit=65535
max_connections=1500
interactive_timeout=3600
wait_timeout=3600
interactive_timeout=3600
innodb_lock_wait_timeout=300
max_allowed_packet=64M
innodb_log_file_size=512M
innodb_log_buffer_size=1M
tmp_table_size=1024M
max_heap_table_size=1024M
innodb_buffer_pool_size=80G
query_cache_type=0
query_cache_size=0
log-bin=/data/mysql/dbmaster
server-id=1
binlog_format=mixed
expire_logs_days=5


log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
1
задан 17 October 2019 в 04:29
1 ответ

mysqldump будет использовать именованные каналы для localhost, а не TCP. Вы можете дважды проверить, что это проблема, сравнив np: localhost с tcp: \\ localhost . (Я думаю, что это правильный синтаксис для np: , но вам может потребоваться указать имя файла, скажем, в / tmp . Я кое-что читал о tcp: (local) ] и np: (local) где-то, и я не уверен, было ли это буквальным, стоит попробовать, если мои предложения не работают.) Если tcp: \\ localhost совпадает с вашим IP-адрес, тогда разница заключается в накладных расходах при использовании стека TCP, а не именованных каналов.

Обратите внимание, что база данных размером 40 ГБ занимает 40 ГБ на диске, что является относительно компактным представлением. В SQL это занимает НАМНОГО больше байтов! Как сказано в документации для mysqldump, это неэффективный способ резервного копирования базы данных. Эффективный способ - создать резервную копию файловой структуры, используемой базой данных SQL (что намного эффективнее во многих отношениях, включая возможность инкрементного резервного копирования).

mysqldump полезен, потому что он прост и хорош для проверки концепции. работают, но не должны использоваться в качестве обычного метода резервного копирования для чего-либо, кроме небольших баз данных.

Если производительность tcp: // localhost высока (похожа на просто «localhost»), тогда проверьте эта связь с вашим IP использует петлевой интерфейс, используя это:

tcpdump -i lo -n

Обратите внимание, что это будет генерировать БОЛЬШИЕ выходные данные, если трафик использует петлевой интерфейс (это то, что вам нужно для лучшей производительности). или перенаправьте его, и будьте готовы немедленно прервать mysqldump. Если это НЕ дает много вывода. Вам также придется отсеять обычный фоновый трафик. Если фоновый трафик много, попробуйте что-нибудь вроде этого:

tcpdump -i lo -n > junk

Запустите это в течение двух секунд и ^ C, когда mysqldump не запущен, и проверьте размер нежелательной почты. Попробуйте еще раз в течение двух секунд, когда это так, и мусор должен быть огромным по сравнению, если он использует устройство обратной связи (которое вы хотите).

Если оно не использует устройство обратной связи для вашего внешнего IP-адреса,что-то не так с сетевой конфигурацией вашей локальной системы, и вы хотите задать новый вопрос по этому поводу.

1
ответ дан 3 December 2019 в 22:59

Теги

Похожие вопросы