#!/bin/bash # live fast! die young! set -e # move_status_network.sh nickname newserver export nickname="$1" export newdbhost="$2" source /etc/statusnet/setup.cfg function set_maintenance_mode() { local nickname=$1; php $PHPBASE/scripts/settag.php $nickname maintenancemode; } function get_current_db_info() { local nickname=$1; #FIXME I couldn't make this work better export dbhost=`mysql -NB -h $SITEDBHOSTNAME -u $ADMIN --password=$ADMINPASS -e "SELECT dbhost FROM status_network WHERE nickname = '$nickname'" $SITEDB` export dbuser=`mysql -NB -h $SITEDBHOSTNAME -u $ADMIN --password=$ADMINPASS -e "SELECT dbuser FROM status_network WHERE nickname = '$nickname'" $SITEDB` export dbpass=`mysql -NB -h $SITEDBHOSTNAME -u $ADMIN --password=$ADMINPASS -e "SELECT dbpass FROM status_network WHERE nickname = '$nickname'" $SITEDB` export dbname=`mysql -NB -h $SITEDBHOSTNAME -u $ADMIN --password=$ADMINPASS -e "SELECT dbname FROM status_network WHERE nickname = '$nickname'" $SITEDB` } function create_empty_db() { local newdbhost=$1; local dbuser=$2; local dbpass=$3; local dbname=$4; mysqladmin -h $newdbhost -u $ADMIN --password=$ADMINPASS create $dbname; mysql -h $newdbhost -u $ADMIN --password=$ADMINPASS -e "GRANT ALL ON $dbname.* TO '$dbuser'@'localhost' IDENTIFIED BY '$dbpass';" $dbname; mysql -h $newdbhost -u $ADMIN --password=$ADMINPASS -e "GRANT ALL ON $dbname.* TO '$dbuser'@'%' IDENTIFIED BY '$dbpass';" $dbname; } function transfer_data() { local dbhost=$1; local newdbhost=$2; local dbuser=$3; local dbpass=$4; local dbname=$5; local dumpfile=`mktemp`; mysqldump -h $dbhost -u $ADMIN --password=$ADMINPASS $dbname > $dumpfile; mysql -h $newdbhost -u $ADMIN --password=$ADMINPASS $dbname < $dumpfile; rm $dumpfile; } function update_routing_table() { local nickname=$1; local newdbhost=$2; mysql -h $SITEDBHOSTNAME -u $ADMIN --password=$ADMINPASS -e "UPDATE status_network set dbhost = '$newdbhost' where nickname = '$nickname'" $SITEDB } function flush_site() { local nickname=$1; php $PHPBASE/scripts/flushsite.php -s$nickname.$WILDCARD } function unset_maintenance_mode() { local nickname=$1; php $PHPBASE/scripts/settag.php -d $nickname maintenancemode; } echo -n Setting maintenance mode on $nickname... set_maintenance_mode $nickname echo DONE. echo -n Getting current database info... get_current_db_info $nickname echo DONE. echo -n Creating empty $dbname database on server $newdbhost... create_empty_db $newdbhost $dbuser $dbpass $dbname echo DONE echo -n Copying $dbname database from $dbhost to $newdbhost... transfer_data $dbhost $newdbhost $dbuser $dbpass $dbname echo DONE echo -n Updating the routing table for $nickname to use $dbname on $newdbhost... update_routing_table $nickname $newdbhost echo DONE echo -n Flushing $nickname site from cache... flush_site $nickname echo DONE echo -n Turning off maintenance mode on $nickname... unset_maintenance_mode $nickname echo DONE.