2014-01-07 2 views
0

Может ли кто-нибудь подумать о хорошем способе синхронизации базы данных mysql с другой базой данных mysql до запуска сервера? Я думал, может быть, я мог бы rsync каталоги в rc.d, но это кажется рискованным. Сервер работает на FreeBSD.MySQL Sync при запуске системы

Спасибо.

Для уточнения:

Хорошо. Я настраиваю mysql как хранилище сеансов для веб-приложения php. Я написал класс, который переопределяет методы сессии php методами, которые предлагают преимущества, важные для нашего веб-приложения. В интересах максимальной скорости основной сервер mysql хранит свои данные в разделе tmpfs. Он реплицируется на сервер с SSD.

В случае отказа мой класс управления сеансом автоматически перейдет к подчиненному устройству, но когда мастер перезагрузится и начнет работу служба mysql, на нем будут перенаправлены запросы сеанса, но данных не будет. , Ergo, мне нужно получить данные от подчиненного устройства во время последовательности загрузки мастера.

+1

Вы когда-нибудь думали об использовании репликации Master-Slave? – gipinani

+0

Когда вы говорите «* до запуска сервера *», предполагается, что вы ссылаетесь на MySQL dæmon, а не на машину, на которой он запущен, - но тем самым вы ссылаетесь на принимающий сервер, сервер отправки или оба ? Можете ли вы предоставить дополнительную информацию о причинах, по которым необходимо синхронизировать базы данных * до * на сервер, который запускается? – eggyal

+0

@mserioli: Это будет только синхронизация * после того, как оба сервера запустились, нет? – eggyal

ответ

1

Если оба MySQL сервера вниз: rsync -ную datadir (который я предполагаю, что это в rc.d не, так как это было бы странно?), Прежде чем смотреть их как не является проблемой, и отлично работает до тех пор, как версия mysql на новом сервере выше или равна (вам может потребоваться запустить mysql_upgrade в более высокой версии).

Если первое работает, желательно, чтобы сценарий «хозяин-ведомый», начиная с hotcopy. С Percona вы можете создать резервную копию живой базы данных, включая таблицу InnoDB с минимальным количеством блокировки (но какая-то блокировка все еще происходит!), Вы копируете этот файл данных на новый сервер. Теперь это как «синхронно», так как вы можете получить его, но 1-й сервер все еще работает, поэтому данные постоянно меняются. Чтобы синхронизировать с этими изменениями снова set it up as a slave в точке, хранящейся в файле xtrabackup_binlog_info.

+1

D'ohh ты избил меня на 30 секунд! –

+1

Hah, оценка! : P Loved SQL Antipatterns BTW :) – Wrikken

+0

Мне тоже очень понравилось использование антипаттеров SQL. Я даже не заметил твоего имени. Теперь я чувствую себя знаменитостью, так как вы прокомментировали мой вопрос. И когда я сказал в rc.d, я имел в виду внутри сценария оболочки, запущенного при загрузке, расположенном в rc.d. – user1119648

1

Да, если демон mysqld выключен, вы можете rsync каталог данных в другое место. И исходному, и целевому серверам должны быть отключены демоны mysql.

Это небезопасно, чтобы перепрофилировать каталог данных работающего экземпляра mysqld или скопировать его в исполняемый экземпляр mysqld. Это связано с тем, что в любой момент часть данных все еще может быть в памяти, еще не записана на диск. Если вы используете только rsync для его копирования, вы получите неполную базу данных и в значительной степени гарантируете ее повредить.

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

См. http://www.percona.com/doc/percona-xtrabackup/2.1/howtos/recipes_ibkx_stream.html для примеров создания резервной копии потоковой передачи.

+0

Экземпляр, который необходимо скопировать, должен оставаться включенным. Данные, потерянные во время синхронизации, не являются ужасной проблемой, поскольку это просто переменные сеанса. – user1119648

Смежные вопросы