У меня есть базы данных InnoDB, и они используют один и тот же файл ibdata, размер этого ibdata составляет около 250 ГБ. теперь у меня есть одна из тех БД около 100 ГБ. Мой менеджер попросил меня переместить эту БД на другой сервер и использовать innodb_file_per_table.
теперь я не могу надолго оставить систему выключенной. так что мне нужен ваш совет, пожалуйста, что быстрее:
Если у вас есть идея получше, поделитесь ею с нами!
Спасибо за вашу помощь
Копирование файлов ibdata чревато опасностью. Важные фрагменты метаданных могут храниться в других файлах, таких как ib_logfile0 и ib_logfile1 (это не полный список), а настройки на новом сервере (например, размер этих двух файлов журнала) должны быть точно такими же, как и на старом сервере. . Если вы ошиблись в чем-либо из этого или пропустили копирование одного из файлов, новый сервер не запустится, и вам придется иметь дело с полезными сообщениями об ошибках MySQL в журнале ошибок.
Xtrabackup все это сделает за вас. После того, как вы используете его для дампа данных и «подготовки» их, вы можете выполнить прямое копирование файла на новый сервер и запустить его с новым файлом ibdata. Этап «подготовки» требует значительного времени.
Однако, поскольку вы упомянули, что перемещаемая база данных составляет всего 100 ГБ из 250 ГБ файла ibdata, я подозреваю, что с помощью метода mysqldump будет быстрее просто потому, что ему нужно передать только 100 ГБ данных вместо 250 ГБ.
Вы можете перенаправить вывод mysqldump прямо в mysql, чтобы избежать необходимости сохранять дамп на диск следующим образом:
mysqldump -uusername -pmypassword MyDB | mysql -h server2 -uusername -pmypassword MyDB
У клиента mysql есть опция -C, которая включает сжатие, если его поддерживают оба конца. Просто введите его перед параметром -h. Передача по сети, вероятно, будет самой медленной частью всей операции. Если ваш сервер не поддерживает сжатие, вы можете выполнить передачу через ssh с параметром -C:
mysqldump -uusername -pmypassword MyDB | ssh -C server2 "mysql -uusername -pmypassword MyDB"
Последняя мысль: время, которое мне потребовалось, чтобы написать это, вероятно, больше, чем у обоих методов вместе взятых, если только у вас нет сети 10 МБ / с. Начать это. :-)
Копирование файлов физических данных всегда быстрее, чем экспорт / импорт фактических данных; для первого требуется только дисковый ввод-вывод, а для второго также требуется, чтобы данные обрабатывались ядром базы данных.
Кроме того, экспортированные данные (в текстовом формате) обычно намного больше, чем файлы двоичных данных, и для их передачи на новый сервер потребуется больше времени (и пропускной способности, если вы делаете это по сети).