Skip to content

Instantly share code, notes, and snippets.

@schaary
Last active December 17, 2015 15:59
Show Gist options
  • Select an option

  • Save schaary/5635357 to your computer and use it in GitHub Desktop.

Select an option

Save schaary/5635357 to your computer and use it in GitHub Desktop.
Synchronisieren einer MySQL-Datenbank
#!/bin/bash
# Die Absoluten Pfade zu den Kommandos
MYSQL='/usr/bin/mysql'
MYSQLDUMP='/usr/bin/mysqldump'
# Die Datenbanken
SOURCE_DB='a6afd_blogs'
TARGET_DB='a6afd_blogs_daily'
# Die Zugangsdaten. Ich wuerde empfehlen, die Zugangsdaten im
# environment zu setzen, z.B. in der .bashrc des Nutzers, der
# den cronjob ausfuehren soll:
#
# export MYSQL_USER='foo'
# export MYSQL_PASSWORD='bar'
# export MYSQL_HOST='baz'
MYSQL_USER=''
MYSQL_PASSWORD=''
MYSQL_HOST=''
# Aufraeumen in der TARGET_DB
#
# Da der Nutzer keine Rechte zum Loeschen oder Anlegen von Datenbanken hat,
# muss das Aufraeumen "zu Fuss" erfolgen. Dazu holt der Nutzer die Namen
# der Tabellen aus dem information_schema und loescht dann die Tabellen
COMMAND="select table_name from information_schema.tables where table_schema='${TARGET_DB}';"
TABLES=$(\
echo ${COMMAND} | \
${MYSQL} \
--user=${MYSQL_USER} \
--password=${MYSQL_PASSWORD} \
--host=${MYSQL_HOST} \
--skip-column-names)
for TABLE in ${TABLES[@]}
do
${MYSQL} \
--user=${MYSQL_USER} \
--password=${MYSQL_PASSWORD} \
--host=${MYSQL_HOST} \
${TARGET_DB} -e "drop table ${TABLE}"
done
# Kopieren der Tabellen von SOURCE_DB nach TARGET_DB
#
# Klassisch mit mysqldump ausgeben und durch eine pipe
# wieder in die Datenbank schicken.
${MYSQLDUMP} \
--single-transaction \
--user=${MYSQL_USER} \
--password=${MYSQL_PASSWORD} \
--host=${MYSQL_HOST} ${SOURCE_DB} | \
${MYSQL} \
--user=${MYSQL_USER} \
--password=${MYSQL_PASSWORD} \
--host=${MYSQL_HOST} ${TARGET_DB}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment