(Частичная) синхронизация базы данных с MySQL - PullRequest
2 голосов
/ 09 июля 2011

Я ищу решение, с помощью которого я смог бы по запросу синхронизировать выбор таблиц между действующей базой данных mysql и локальной базой данных.Если для этого нет конкретного решения, что было бы хорошим решением для синхронизации локальных и живых баз данных?

Ответы [ 3 ]

0 голосов
/ 31 августа 2011

Если у вас есть следующие условия

  • Доступ к Live DB можно получить по общедоступному IP-адресу
  • Все необходимые таблицы имеют InnoDB

Вы можете выполнитьmysqldump отдельных таблиц

Вот как использование сценария оболочки может выполнить это при запуске с локального компьютера:

LIVEDB_IP=192.168.1.10
MYSQL_SRCUSER=whateverusername
MYSQL_SRCPASS=whateverpassword
MYSQL_SRCCONN="-h${LIVEDB_IP} -u${MYSQL_SRCUSER} -p${MYSQL_SRCPASS}"
SOURCE_DB=mydb_source

MYSQL_TGTUSER=whateverusername2
MYSQL_TGTPASS=whateverpassword2
MYSQL_TGTCONN="-h127.0.0.1 -u${MYSQL_TGTUSER} -p${MYSQL_TGTPASS}"
TARGET_DB=mydb_target

TBLLIST="tb1 tb2 tb3"
for TB in `echo "${TBLLIST}"`
do
    mysqldump ${MYSQL_SRCCONN} --single-transaction ${SOURCE_DB} ${TB} | mysql ${MYSQL_TGTCONN} -A -D${TARGET_DB} &
done
wait

Опция --single-transaction вызывает моментальный снимок временитаблица должна выполняться, но в то же время разрешать операции INSERT, UPDATE и DELETE в исходной базе данных.

Если таблицы довольно большие, могут возникнуть проблемы с тайм-аутом.Вместо этого попробуйте этот скрипт:

LIVEDB_IP=192.168.1.10
MYSQL_SRCUSER=whateverusername
MYSQL_SRCPASS=whateverpassword
MYSQL_SRCCONN="-h${LIVEDB_IP} -u${MYSQL_SRCUSER} -p${MYSQL_SRCPASS}"
SOURCE_DB=mydb_source

MYSQL_TGTUSER=whateverusername2
MYSQL_TGTPASS=whateverpassword2
MYSQL_TGTCONN="-h127.0.0.1 -u${MYSQL_TGTUSER} -p${MYSQL_TGTPASS}"
TARGET_DB=mydb_target

TBLLIST="tb1 tb2 tb3"
for TB in `echo "${TBLLIST}"`
do
    mysqldump ${MYSQL_SRCCONN} --single-transaction ${SOURCE_DB} ${TB} | gzip > ${TB}.sql.gz &
done
wait

for TB in `echo "${TBLLIST}"`
do
    gzip -d < ${TB}.sql.gz | mysql ${MYSQL_TGTCONN} -A -D${TARGET_DB} &
done
wait

Попробуйте! !!!

CAVEAT

Если нужны таблицы MyISAM, просто удалите --single-transaction из mysqldump.Это может привести к зависанию запросов в исходной базе данных до тех пор, пока mysqldump не завершит работу с таблицами, которые нужны запросам.В этом случае просто выполните этот сценарий в часы с низким трафиком.

0 голосов
/ 30 сентября 2011

Менеджер БД рабочего стола SQLYog имеет инструмент " Job Scheduler " для настройки подобных вещей.Требуется профессиональная или корпоративная лицензия (дешевле, чем кажется), но 30-дневная пробная версия является полнофункциональной, если вы просто хотите сначала проверить ее.

0 голосов
/ 09 июля 2011

Всегда есть phpmyadmin, куда вы можете экспортировать выбранные таблицы и импортировать их снова.

Это практическое решение, если у вас есть живая БД, где вам нужно работать с ней с помощью системы разработки. Вы можете взять копию БД, поработать над ней, уронить, например. таблицы клиентов, затем отключите их, создайте резервную копию, удалите все, кроме таблиц клиентов, и импортируйте обновленную базу данных.

Преимущество phpmyadmin в том, что он показывает вам запросы, вы можете затем собрать скрипт из них и использовать их при следующем обновлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...