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
Kommentare