[root@server]# cat /home/sysuser/server_restart_script/resume_replication.sh
# Script to automate manual tasks after adding new server
# Script written on 07 May 2015
# cp /var/lib/mysql/auto.cnf /home/sysuser/server_restart_script/
# add ifconfig to change serverid of only new servers
# mysql -u root -p'dbpassword' dbname -e "show slave status \G" | grep -inr "Exec_Master_Log_Pos" | awk '{print $3}' > /home/sysuser/server_restart_script/slave_position
# mysql -u root -p'dbpassword' dbname -e "show slave status \G" | grep -inr "Relay_Master_Log_File" | awk '{print $3}' > /home/sysuser/server_restart_script/slave_file
cnf_dir=/etc
home_dir=/var/lib/mysql
auto_file=auto.cnf_bak
sh_file=/home/sysuser/server_restart_script
user=root
password='dbpassword'
# Below script is for 52.76.40.133
# Remove "!" from below condition
if ifconfig | grep "inet addr" | head -1 | grep "172.31.4.58"
then
echo "This is Old Server"
else
echo "This is new server"
# ===================================================================================================
service mysqld stop;
# ===================================================================================================
# Change Server ID ########### sed -i '23s/.*/server-id='$((RANDOM%200+9999))'/' $cnf_dir/my.cnf;
sed -i '23s/.*/server-id='$(shuf -i 20000-65000 -n 1)'/' $cnf_dir/my.cnf;
# ===================================================================================================
# Change Server UUID
if [[ ! -e "$home_dir/$auto_file" ]]; #if auto.cnf_bak not present then create auto.cnf_bak file
then
echo "$home_dir/$auto_file Not found.. Renaming $home_dir/auto.cnf to $auto_file .......... "
mv $home_dir/auto.cnf $home_dir/auto.cnf_bak;
echo $'\n'
else #else: directory already present then just assign a variable.
echo $home_dir/"$auto_file found. Deleting this file"
rm -f $home_dir/$auto_file
mv $home_dir/auto.cnf $home_dir/$auto_file;
fi
# ===================================================================================================
service mysqld start;
service mysqld status > $sh_file/mysql_status;
# Check if mysql is running
if grep -q -i 'running...' $sh_file/mysql_status
then
echo "MySQL Is Running !!!!"
else
service mysqld start;
fi
# Check if replication is running
mysql -u $user -p$password -v -v -v dbname -e "show slave status \G" | grep -inr "Slave_IO_Running" > $sh_file/repl_log
mysql -u $user -p$password -v -v -v dbname -e "show slave status \G" | grep -inr "Slave_SQL_Running" >> $sh_file/repl_log
if grep -q -i "No" head -4 $sh_file/repl_log
then
# Get Master log file & Slave log position for replication to resume
mysql -u $user -p$password -v dbname -e "Stop Slave" ;
mysql -u $user -p$password dbname -e "show slave status \G" | grep -inr "Exec_Master_Log_Pos" | awk '{print $3}' > $sh_file/slave_position;
mysql -u $user -p$password dbname -e "show slave status \G" | grep -inr "Relay_Master_Log_File" | awk '{print $3}' > $sh_file/slave_file;
mysql -u $user -p$password -v dbname -e "Stop Slave" ;
mysql -u $user -p$password -v dbname -e "Reset Slave" ;
# mysql -u $user -p$password -v dbname -e "CHANGE MASTER TO MASTER_LOG_FILE='""$(cat /home/sysuser/server_restart_script/slave_file)""', MASTER_LOG_POS= " "$(cat /home/sysuser/server_restart_script/slave_position)" ;
# Create sql file with change master command
echo "CHANGE MASTER TO MASTER_LOG_FILE='""$(cat /home/sysuser/server_restart_script/slave_file)""', MASTER_LOG_POS= " "$(cat /home/sysuser/server_restart_script/slave_position);" > $sh_file/change_master.sql;
mysql -u $user -p$password dbname < $sh_file/change_master.sql;
mysql -u $user -p$password -v dbname -e "Start Slave" ;
# echo $'\n' "CHANGE MASTER TO MASTER_LOG_FILE='""$(cat /home/sysuser/server_restart_script/slave_file)""', MASTER_LOG_POS= " "$(cat /home/sysuser/server_restart_script/slave_position);"
else
echo "Replication is running";
fi
# ===================================================================================================
fi
:wq
Now Setup Cron :
@reboot /bin/sh /home/sysuser/server_restart_script/resume_replication.sh >> /home/sysuser/server_restart_script/output_sync
No comments:
Post a Comment