Все таблицы InnoDb. Я бы предпочел не использовать mysqldump, потому что размер сегментов будет около 200 ГБ (около 700 миллионов строк), а это займет слишком много времени.
Я надеялся просто остановить mysql на час, скопировать файлы данных на новую машину и запустить резервное копирование. Но вы не можете сделать это с помощью InnoDb, так как некоторые данные находятся в общем табличном пространстве. Даже если у меня установлен параметр innodb_file_per_table.
Это не веб-сайт, а специальное приложение, которое сейчас используют десятки тысяч, поэтому время безотказной работы и производительность важны. Я полагаю, я мог бы добавить логику в свое серверное приложение, чтобы обеспечить постепенную перебалансировку / перемещение шарда.
Есть ли у кого-нибудь идеи получше?
Если вы создаете таблицу после включения innodb_file_per_table
вариант, то все содержимое таблицы должно храниться в файлах, уникальных для данной таблицы.
Если это не удастся ...
Если хранение двоичных журналов на неопределенный срок не является проблемой, вы можете сделать дамп данных перед загрузкой каких-либо данных. Этот начальный дамп можно использовать для начальной репликации. Затем нужно просто дождаться, пока репликация наверстает упущенное, прежде чем вы попытаетесь переключиться.
В качестве альтернативы, если вы уже используете репликацию для резервного копирования, вы можете вместо этого настроить репликацию с сервера резервного копирования. Очевидным штрафом будет то, что резервные копии будут отключены во время дампа базы данных.
Третий вариант: вы всегда можете скопировать все содержимое MySQL на новый сервер, запустить его, а затем удалить все, что вы не используете.
Вы можете попробовать innodb hotcopy из http://www.innodb.com/products/hot-backup/features/
Дороговато, но, похоже, вы можете получить пробную копию.
вы могли бы положить mysqlproxy между appserv и серверами приложений, чтобы добавить логику [предупреждение - это влияет на производительность].
вы также можете использовать репликацию mysql, но вам все равно нужно будет запустить ее из полной резервной копии.
пс.
другие предлагают mysqlhotcopy. тогда посмотри на xtrabackup - то же самое, но с открытым исходным кодом.
Percona xtrabackup, похоже, делает то, что требуется. В частности, если у вас установлен inndb_table_per_file, вы можете сделать «горячее» резервное копирование таблиц innodb в базе данных и импортировать их в другой экземпляр mysql.
Посмотрите эти шаги, чтобы узнать, как:
http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual#restoring_a_single_ibd_file
Мы предлагаем решение этой проблемы с использованием нашей технологии dbShards. Мы можем предоставить горячий набор вторичных серверов для ваших существующих баз данных с надежной репликацией. Затем вы можете повторно подключить вторичные серверы, не отключая первичные (главные) базы данных, и плавно перейти на дополнительные серверы сегментов.
Для получения дополнительной информации вы можете прочитать об этом по адресу: http://www.dbshards.com