Если у вас в основном таблицы MyISAM, вы должны увеличить буфер массовой вставки . Вот что говорит MySQL Documentation о настройке bulk_insert_buffer_size :
MyISAM использует специальный древовидный кэш, чтобы ускорить массовые вставки для INSERT ... SELECT, INSERT ... VALUES (...), (...), ... и LOAD DATA INFILE при добавлении данных в непустые столы. Эта переменная ограничивает размер дерева кэша в байтах на поток. Установка в 0 отключает эту оптимизацию. Значение по умолчанию составляет 8 МБ.
Есть две вещи, которые вам нужно сделать
1) Добавьте его в /etc/my.cnf
[mysqld]
bulk_insert_buffer_size=512M
2) Установите глобальное значение для него
SET GLOBAL bulk_insert_buffer_size = 1024 * 1024 * 512;
Если у вас нет прав на глобальную настройку bulk_insert_buffer_size, сделайте это
service mysql restart
Конечно, это не для InnoDB.
С другой стороны, будь то таблицы InnoDB или MyISAM, если индексы больше, чем у таблицы, у вас может быть слишком много индексов. Я обычно предполагаю, что перезагрузка MyISAM mysqldump должна занять в 3 раза больше времени, чем потребовалось mysqldump. Я также предполагаю, что перезагрузка InnoDB mysqldump должна занять в 4 раза больше времени, чем потребовалось mysqldump.
Если вы превысили соотношение 4: 1 для перезагрузки mysqldump, у вас определенно есть одна из двух проблем:
- слишком много индексов
- слишком большие индексы из-за больших столбцов
Вы можете измерить размер ваших данных с помощью механизма хранения с помощью этого:
SELECT IFNULL(B.engine,'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(
FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(
FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM
(SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM
information_schema.tables WHERE table_schema NOT IN
('mysql','information_schema','performance_schema') AND
engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;
Посмотрите, являются ли индексы почти такими же большими, как данные или даже большими
Вы также можете отключить бинарное ведение журнала следующим образом:
echo "SET SQL_LOG_BIN=0;" > footable.sql
mysqldump --databases foo >> footable.sql
перед перезагрузкой скрипта