Автоматическое дублирование таблиц mysql между серверами через SQL

Проблема: мне нужно сделать резервную копию баз данных нескольких серверов (иногда одну таблицу, иногда все таблицы в базе данных), а также в одном случае реплицировать базу данных каждую ночь.

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

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

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

Я знаю из проведенного мной исследования коммерческого продукта Windows, который может это сделать (SQLyog), но я хотел узнать, знает ли кто-нибудь об альтернативах и, возможно, для Linux, а также для Windows.

Какой интерфейс у вас есть для доступа к вашим удаленным серверам баз данных? У вас есть удаленный root? Или только интерфейс SQL? (это означает, что инструмент будет копировать данные, запрашивая все)
Привет, это последний сценарий без корня удаленного сервера

Ответы (1)

1) Создайте этот backupdb.shскрипт, который копирует удаленную базу данных MySQL в вашу локальную базу данных:

#!/bin/bash

DBUSER=$1
DBPASSWORD=$2
DBSNAME=$3
DBNAME=$4
DBSERVER=$5
LOCALDBUSER=$6
LOCALDBPASSWORD=$7
LOCALDBSERVER=$8

fCreateTable=""
fInsertData=""
echo "Copying database ... (may take a while ...)"

DBCONN="-h ${DBSERVER} -u ${DBUSER} --password=${DBPASSWORD}"
LOCALDBCONN="-h ${LOCALDBSERVER} -u ${LOCALDBUSER} --password=${LOCALDBPASSWORD}"

echo "DROP DATABASE IF EXISTS ${DBNAME}" | mysql ${LOCALDBCONN}
echo "CREATE DATABASE ${DBNAME}" | mysql ${LOCALDBCONN}
for TABLE in `echo "SHOW TABLES" | mysql $DBCONN $DBSNAME | tail -n +2`; do
        createTable=`echo "SHOW CREATE TABLE ${TABLE}"|mysql -B -r $DBCONN $DBSNAME|tail -n +2|cut -f 2-`
        fCreateTable="${fCreateTable} ; ${createTable}"
        insertData="INSERT INTO ${LOCALDBNAME}.${TABLE} SELECT * FROM ${DBSNAME}.${TABLE}"
        fInsertData="${fInsertData} ; ${insertData}"
done;
echo "$fCreateTable ; $fInsertData" | mysql $LOCALDBCONN $DBNAME

( написано jozjan и изменено )

2) Напишите скрипт backupalldbs.shдля его вызова для каждой базы данных, которую вы хотите создать резервную копию, например:

#!/bin/bash
backupdb.sh adam iwg74e9R thedb thedb server.example.com localuser localpassword localserver
backupdb.sh nico of2D9872 adb adb server.example.org localuser localpassword localserver
...

3) Наконец, вызовите этот скрипт с помощью cronпланировщика Linux.

Написан для Linux, но заставить его работать в Windows не должно быть слишком сложно после установки bash для Windows.

Привет, Николас, это очень близко к тому, что я хочу, но этот сценарий, похоже, предназначен для баз данных на том же сервере.
О, ты прав! Потребуется немного редактирования.
@AdamJones: должно быть исправлено сейчас :-) (хотя и не тестировалось)