Das nachfolgende Bash Script ist ein nützlicher Helfer, um Daten (Datenbank und Teile vom Dateisystem) aus einem Livesystem in ein lokales Entwicklungssystem zu importieren. Da bei vielen Providern ein externer Datenbankzugriff nicht möglich ist, erfolgt der Export der Datenbank hierbei durch einen SSH Tunnel.

Der SSH Tunnel leitet hierbei den lokalen Port 3307 durch den SSH Server auf Port 3306 des entfernten Datenbankservers weiter. Da der Tunnel mit der Option "Control Socket" erstellt wird, kann der Tunnel am Ende des Scripts wieder ordentlich terminiert werden.

Das Script erstellt den SSH Tunnel, exportiert die Datenbank, terminiert den SSH Tunnel, importiert den Datenbankdump und löscht den Datenbankdump. Anschließend werden Inhalte vom Fileadmin via Rsync kopiert.

live-to-local.sh

#!/bin/bash

ssh_host='p123456.webspaceconfig.de'
ssh_user='p123456'
ssh_port='22'

db_source_host='db123456.mydbserver.com'
db_source_user='db123456'
db_source_password='1234567890'
db_source_database='db123456'
db_source_port='3306'

db_target_host='127.0.0.1'
db_target_user='db'
db_target_password='db'
db_target_database='db'
db_target_port='3306'

files_source_dir='/home/www/p123456/html/project.root/public/fileadmin/'
files_target_dir='/var/www/project.root/public/fileadmin'

echo "Opening ssh tunnel..."
ssh -M -f -N -L 3307:$db_source_host:3306 $ssh_user@$ssh_host -p $ssh_port -S /tmp/ssh-control

echo "Exporting database..."
mysqldump -h 127.0.0.1 -P 3307 -u $db_source_user --password="$db_source_password" $db_source_database > db.sql

echo "Closing ssh tunnel..."
ssh -S /tmp/ssh-control -O exit $ssh_host

echo "Importing database..."
mysql -h $db_target_host -P $db_target_port -u $db_target_user --password="$db_target_password" $db_target_database < db.sql

echo "Removing db export..."
rm db.sql

echo "Syncing fileadmin files..."
rsync -avz -e "ssh -p $ssh_port" $ssh_user@$ssh_host:$files_source_dir $files_target_dir