2010-06-09 2 views
0

кажется, что база данных MySQL, который имеет таблицу с десятками миллионов записей получит большую INSERT INTO заявления, когда следующееВосстановление базы данных MySQL с использованием «mysql mydb <mydb.sql» очень медленное, когда таблица содержит десятки миллионов записей. Как его улучшить?

mysqldump some_db > some_db.sql 

делаются для создания резервной копии базы данных. (Это 1 Вкладыш утверждение, что обрабатывает все записи?)

Так при восстановлении БД с помощью

mysql some_db < some_db.sql 

то процессор вряд ли занят (использование около 1,8% в процессе MySQL ... Я тоже не вижу mysqld?), А также жесткий диск не кажется слишком занятым ...

В прошлый раз весь процесс восстановления занял 5 часов. Есть ли способ сделать это быстрее? Например, когда вы делаете mysqldump, может ли он разорвать оператор INSERT на более короткие, чтобы mysql не нуждался в синтаксическом анализе линии при восстановлении БД?

ответ

2

Если что-то использует время, это будет mysqld, вот что на самом деле делает всю работу. Если вы подключаетесь к удаленному серверу mysql, то mysqld будет на этом компьютере, а не на вашем локальном.

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

Лучшим решением было бы прекратить использование mysqldump для этой таблицы и переключиться на использование LOAD DATA INFILE (с соответствием SELECT ... INTO OUTFILE для создания дампа).

Ваш абсолютный лучший вариант - просто скопировать файлы базы данных, а не пытаться сделать резервную копию и восстановить. Я думаю, что это все еще работает только с базами данных MyISAM, а не с InnoDB, но кто-то может исправить меня, если что-то изменилось в последнее время.

+0

Копирование файлов: при копировании используется только MyISAM и блокировка на столе ('mysqlhotcopy'). – Wrikken

+0

он создает БД на локальном жестком диске, поэтому я думаю, что mysqld должен находиться на локальной машине, но по какой-то причине, когда я делаю «ps -a», или если я смотрю на Activity Activity на Mac с Snow Leopard, я вижу только процесс mysql, но не mysqld. –

+0

mysqld обычно работает как пользователь mysql. Я не знаю достаточно о командной строке osx ps, чтобы рассказать вам, какие переключатели использовать, но вам нужно просмотреть все процессы всеми пользователями, чтобы их найти. – Donnie