Script to move a statusnetwork from one db server to another
This script helps move a statusnetwork from one DB server to another. It's for use with multi-site installations (like status.net).
This commit is contained in:
parent
e78d84556e
commit
b42cc773ed
102
scripts/move_status_network.sh
Executable file
102
scripts/move_status_network.sh
Executable file
|
@ -0,0 +1,102 @@
|
|||
#!/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.
|
Loading…
Reference in New Issue
Block a user