Автор Тема: [РЕШЕНО] MySQL перенос InnoDB на другой сервер  (Прочитано 3124 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Gib_adm

  • Постоялец
  • ***
  • Сообщений: 123
  • Рейтинг: 2
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Нерезиновая
Доброго времени суток, Коллеги.

ОС: CentOS 6.5 x86_64
MySQL: 5.1.69

на обоих серверах стоит параметр:
innodb_file_per_table = 1

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

160104 17:56:07 [ERROR] Cannot find or open table base1/table1 from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html
how you can resolve the problem.

mysqldump не вариант. База очень большая.

Есть идеи?
« Последнее редактирование: 16 Января 2016, 18:02:22 от Gib_adm »

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
MySQL перенос InnoDB на другой сервер
« Ответ #1 : 04 Января 2016, 19:31:36 »
Судя по всему - переносился не весь datadir.
Даже при innodb_file_per_table нужно переносить весь tablespace, а именно ib_logfile0 ib_logfile1 и ibdata1 должны быть обязательно перенесены.
Not as ultimate as 42, but pretty close...

Оффлайн Gib_adm

  • Постоялец
  • ***
  • Сообщений: 123
  • Рейтинг: 2
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Нерезиновая
MySQL перенос InnoDB на другой сервер
« Ответ #2 : 04 Января 2016, 19:49:51 »
Судя по всему - переносился не весь datadir.
Даже при innodb_file_per_table нужно переносить весь tablespace, а именно ib_logfile0 ib_logfile1 и ibdata1 должны быть обязательно перенесены.

Попробую.

Но как быть в тех случаях, когда нужно перенести только одну базу на другой сервер, где уже есть другие базы?

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
MySQL перенос InnoDB на другой сервер
« Ответ #3 : 04 Января 2016, 19:55:24 »
Но как быть в тех случаях, когда нужно перенести только одну базу на другой сервер, где уже есть другие базы?
просто и безболезненно - никак. только через костыли в виде импорта/экспорта таблиц в xtrabackup, или репликацией - включать побольше бинлогов и ждать пока закончится dump/restore. Потом догонять по логам изменения.
Not as ultimate as 42, but pretty close...

Оффлайн Gib_adm

  • Постоялец
  • ***
  • Сообщений: 123
  • Рейтинг: 2
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Нерезиновая
[РЕШЕНО] MySQL перенос InnoDB на другой сервер
« Ответ #4 : 04 Января 2016, 21:46:47 »
Спасибо, VanDyke.

Скопировал ib_logfile0 ib_logfile1, ibdata1 - завелось.

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
MySQL перенос InnoDB на другой сервер
« Ответ #5 : 04 Января 2016, 21:55:48 »
Скопировал ib_logfile0 ib_logfile1, ibdata1 - завелось.
надеюсь это очевидно, что при таких операциях на новой базе сломается всё innodb, что там было до переноса.
Not as ultimate as 42, but pretty close...