Восстановление базы данных MySQL с использованием «mysql mydb <mydb.sql» действительно медленное, если в таблице десятки миллионов записей. Как это улучшить? - PullRequest
0 голосов
/ 09 июня 2010

Кажется, что база данных MySQL, имеющая таблицу с десятками миллионов записей, получит большой оператор INSERT INTO, когда для резервного копирования базы данных будет сделано следующее

mysqldump some_db > some_db.sql

.(это 1 оператор вставки, который обрабатывает все записи?)

Таким образом, при восстановлении БД с использованием

mysql some_db < some_db.sql

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

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

1 Ответ

2 голосов
/ 09 июня 2010

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

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

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

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

...