Назад | Перейти на главную страницу

MariaDB тратит много времени на восстановление резервной копии

Так что я сделал mysqldump довольно огромного db, и я пытаюсь восстановить его сейчас, используя:

mysql db_test < db_test.sql

но похоже, что это не закончится к концу этого года. Прошло около часа, а все еще «восстанавливается». Создание резервной копии заняло около 10 минут, поэтому, боюсь, что-то не так.

До сих пор:

Что-то странное в том, что при проверке top, Я узнал что kworker иногда потреблял до 100% процессора, чего не должно было происходить


Есть идеи или что-нибудь, что я могу сделать, чтобы увидеть, что происходит?

Похоже, что нижележащие диски заняты. Проблема при восстановлении большой базы данных заключается в том, что для каждой (группы) INSERT требуется операция сброса / синхронизации, которая очень медленная на механических дисках (диск со скоростью 7200 об / мин составляет порядка ~ 100 IOPS).

Чтобы ускорить восстановление, вам пришлось временно указать MySQL / MariaDB на не проблема сбрасывает / синхронизирует. Для этого прервите восстановление и отредактируйте свой /etc/my.ini со следующими двумя строками:

  • innodb_flush_method=nosync
  • innodb_flush_log_at_trx_commit=2

Затем перезапустите MariaDB и повторите восстановление. Теперь все должно идти намного быстрее.

После восстановления УДАЛИТЬ ВЫШЕ СТРОКИ вашей базы данных будет иметь короткую и плохую жизнь: сброс / синхронизация существует по очень важным причинам. Хотя их можно отключить для восстановления, производственная база данных должна никогда бегать без них.

Если ваше базовое хранилище представляет собой простые старые диски, для базы данных MySQL на 25 ГБ на диске вполне нормально проводить многочасовое восстановление, особенно для некоторых плохо структурированных баз данных (много кортежей, индексов и т. Д.).

Для начала сожмите дамп, что сэкономит массу операций ввода-вывода и снизит нагрузку на кеш-память:

mysqldump foo |gzip >foo.sql.gz
zcat foo.sql.gz |mysql foo

В вашем случае, поскольку вы уже выполнили mysqldump:

gzip db_test.sql
zcat db_test.sql.gz |mysql db_test

Помимо производительности вашей системы (хранилище, ОЗУ и т. Д.), Настройки MySQL могут иметь огромное влияние. Но это целый опыт, ничего, кроме проблемы с ServerFault ...