у меня БД , дамп размером 24 Гб - импортирую ВоркБенчем на внешний диск (все локальный комп) - и уже за 4 суток тольоко 3.5 Гб импортировало - как то можно быстрее сделать
Оптимизация MySQL
-----------------
Делал согласно этим инструкциям:
Рекомендую использовать хранилище InnoDB, т.к. оно позволяет кэшировать в памяти не только индексы,
но и данные таблиц. При желании вы можете загрузить всё и в MyISAM, воспользовавшись соответствующим
SQL-скриптом создания структуры таблиц.
Все перечисленные ниже параметры указываются в разделе [mysqld] файла:
my.cnf (под Linux/UNIX)
my.ini (под Windows)
После изменения параметров в этом файле нужно перезапустить MySQL.
Общие для любого хранилища оптимизации:
query_cache_size=128M
query_cache_limit=128K
Включает кэш SQL-запросов размером 128 МБ, куда сохраняются результаты всех запросов размером меньше 128 КБ
(чтоб не забить весь кэш несколькими крупными запросами, которые обычно редко повторяются). Если памяти
на сервере больше 4 ГБ и посещаемость сайта высокая, есть смысл ещё увеличить query_cache_size в 2 или даже 4
раза.
Оптимизация хранилища InnoDB
----------------------------
Если заливаете в хранилище InnoDB, основная настройка, влияющая на скорость заливки (да и работы
базы потом тоже
innodb_buffer_pool_size=1024M
Выделяет 1024 МБ под общий кэш на данные и индексы в InnoDB - в т.ч. под операции создания индексов.
Всего MySQL в этом случае съедает около 1.5 ГБ оперативной памяти. Если памяти мало, выделите под этот
параметр хотя бы 512 МБ. Если памяти много и MySQL 64-битный, есть смысл выделить здесь наоборот больше:
2 или даже 4 ГБ. На 32-битной версии больше 1 ГБ здесь выделить редко удаётся.
Также очень полезно в случае InnoDB добавить параметр:
innodb_file_per_table=1
Он заставляет MySQL хранить каждую таблицу хранилища InnoDB в отдельном файле с названием вида
"ИмяБазы/ИмяТаблицы.ibd". Иначе все таблицы размещаются в общем файле "ibdata1", который
только увеличивается и никогда не уменьшается - даже при удалении таблиц и баз данных!
MySQL после изменения настроек нужно перезапустить.
Если до этого у вас в MySQL уже были таблицы формата InnoDB, после изменения параметра
они останутся в файле "ibdata1" - в отдельные файлы попадут только таблицы, созданные позже.
Если хотите также переместить старые таблицы InnoDB в отдельные файлы, примените SQL-команду:
ALTER TABLE ИмяБазы.ИмяТаблицы ENGINE=InnoDB;
для каждой из своих старых таблиц. После этого можно завершить работу MySQL, удалить файл
"ibdata1", и при очередном запуске MySQL создаст стандартный пустой файл "ibdata1" размером
10 МБ, а все таблицы окажутся в отдельных файлах.
Другие настройки InnoDB моего сервера - подобраны практическим путём. Какие из них более
значимые - не экспериментировал, но в целом с такими настройками импорт значительно ускоряется
на всех серверах, куда я заливал базу Текдока:
innodb_additional_mem_pool_size=32M
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=12M
innodb_thread_concurrency=8
innodb_lock_wait_timeout=300
innodb_file_io_threads=8
Оптимизация хранилища MyISAM
----------------------------
Если заливаете в хранилище MyISAM, используйте такие настройки:
Кэш индексов - возможно и не используется при создании индексов, но точно используется при дальнейшей
работе с таблицами:
key_buffer_size = 128M
Буфер в оперативной памяти под операции создания индексов:
myisam_sort_buffer_size = 512M
Максимальный размер временного файла НА ВИНТЕ для создания индекса, лучше ставить довольно большим,
иначе индексы делаются как-то совсем медленно через keycache:
myisam_max_sort_file_size = 10G