103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| 
								 | 
							
								#!/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.
							 |