У меня есть база данных MySQL, которая выгружается в резервную копию 3,5 ГБ (mysqldump) примерно за 10 минут.
Но перезагрузка этой резервной копии на резервном / тестовом сервере занимает почти 2 часа [первоначально 12 часов до некоторой настройки].
Какие настройки позволят повысить производительность перезагрузки?
Наиболее многообещающими кажутся innodb_buffer_pool_size, innodb_additional_mem_pool_size и innodb_log_buffer_size ... но я достигаю пределов своего подхода проб и ошибок. Какие из этих настроек «должны» быть самыми важными?
Методом проб и ошибок я не смог получить более 70% использования ЦП и 63% использования памяти. Я бы хотел, чтобы оба были на 100% во время перезагрузки.
Все таблицы InnoDB.
ОБНОВИТЬ
Мне удалось сократить время загрузки с 12 часов до 1 часа 55 минут с помощью следующих настроек:
innodb_buffer_pool_size=192M innodb_additional_mem_pool_size=96M innodb_flush_log_at_trx_commit=0 innodb_log_buffer_size=64M innodb_file_per_table key_buffer = 32M max_allowed_packet = 32M
Тестовый сервер представляет собой облачный сервер Rackspace объемом 512 МБ.
Производственный сервер - Athlon 64 X2 4200 2 ГБ.
mysql Ver 14.12 Distrib 5.0.67, for debian-linux-gnu (i486) using readline 5.2
Я не уверен, насколько еще это можно настроить сейчас ... но меня все еще беспокоит, что только 63% доступной оперативной памяти используется моим mysqld во время загрузки.
Я не думаю, что это проблема, связанная с дисковым вводом-выводом. Тот же сервер может копировать 20 МБ / с из zip-файла. Итак, используя грубую математику, только 6 минут из 1 часа 55 минут можно отнести к задержке на диске. Так что это действительно должно быть связано с процессором или памятью, но ни то, ни другое не будет на 100%.
Я обнаружил, что innodb_flush_log_at_trx_commit имеет наибольшее влияние на скорость восстановления. Убедитесь, что он установлен на 2, по крайней мере, во время восстановления.
Кроме того, проверьте инструменты maatkit, как это было предложено lg выше, дамп / восстановление прост, но не очень параллелен, только mk_parallel_restore может полностью использовать ваш процессор
Можешь попробовать мк-параллельное восстановление
Может другой метод бэкапа? Я предполагаю, что вы хотите полностью восстановить сервер базы данных на другом сервере. Если у вас есть LVM на вашем компьютере, вы можете использовать Снимок LVM и скопируйте необработанные файлы базы данных. Другой (и, возможно, лучший) вариант - использовать xtrabackup вместо mysqldump.