Shell: 分享MySQL數據同步+主從複製自動化腳本_20190313_七俠鎮莫尛貝

做mysql主從複製,要鎖master表,導出數據,解鎖master表,同步數據,查master的log偏移,配置slave的log偏移,開啓slave複製。如果是做雙向同步,還得再來一遍。麻煩死!

使用這個腳本,可以省不少時間。

作用:運行於mysql slave服務器上,添加到crontab計劃任務裏,可定期同步數據,並重置mysql slave配置。

使用方法:

my.cnf配置過程略。

配置好shell裏的主服務器ip,用戶名,密碼。

手動創建rep用戶,密碼password.

添加到計劃任務裏,OK。

寫的亂,有時間再梳毛。

#!/bin/bash

cd /opt/db_sync
timestamp=$(date +%Y%m%d_%H%M%S)

HOSTNAME_EX="192.168.100.100"                                           #數據庫Server信息
HOSTNAME="127.0.0.1"                                           #數據庫Server信息
#HOSTNAME="mysql"                       #數據庫Server信息
PORT="3306"
USERNAME="user"
#PASSWORD="password"
export MYSQL_PWD="password"

DBNAME=$1                                              #要創建的數據庫的庫名稱
#DBNAME="test_db_name"                                              #要創建的數據庫的庫名稱
TABLENAME="test_table_name"                                  #要創建的數據庫的表的名稱

export PATH=.:$PATH

#MYSQL_CMD="mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD}"
MYSQL_CMD="mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} "
MYSQL_CMD_EX="mysql -h${HOSTNAME_EX}  -P${PORT}  -u${USERNAME}"
#echo ${MYSQL_CMD}

#sql="show slave status \G"
#echo ${sql}  | ${MYSQL_CMD} |grep Slave_IO_Running: 
#echo ${sql}  | ${MYSQL_CMD} |grep Slave_SQL_Running:
#if [ $? -ne 0 ]                                                                                #判斷是否創建成功
#then
# echo "connecting databases ${DBNAME} failed ..."
# exit 1
#fi

################################################################################
echo "master: lock master tables..."
sql="flush tables with read lock;"
echo ${sql}  | ${MYSQL_CMD_EX} 

sql="show master status \G"
#echo ${sql}  | ${MYSQL_CMD_EX} |grep File
#echo ${sql}  | ${MYSQL_CMD_EX} |grep Position
FILE=$(echo ${sql}  | ${MYSQL_CMD_EX} |grep File|awk '{ print $2}')
POSITION=$(echo ${sql}  | ${MYSQL_CMD_EX} |grep Position|awk '{ print $2}')
echo $FILE
echo $POSITION
#################################################
sql="stop slave ;"
echo ${sql}  | ${MYSQL_CMD} |grep Slave_IO_Running: 

echo "get dbname_master.sql..."
mysqldump -h192.168.100.100 -uuser dbname > dbname_master..sql

sql="drop database IF EXISTS dbname ;"
echo ${sql}  | ${MYSQL_CMD} 
sql="create database IF NOT EXISTS dbname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
echo ${sql}  | ${MYSQL_CMD} 

echo "import dbname_master.sql to db_slave ..."
mysql -uuser dbname<./dbname_master.sql

#####################################################
echo "master: unlock master tables..."
sql="unlock tables ;"
echo ${sql}  | ${MYSQL_CMD_EX} 

#####################################################
sql="reset slave ;"
echo ${sql}  | ${MYSQL_CMD}  

#rep用戶手動創建,分配權限
sql="change master to master_host='192.168.100.100',master_user='rep',master_password='password',master_log_file='$FILE',master_log_pos=$POSITION;"
echo $sql
echo ${sql}  | ${MYSQL_CMD}

sql="start slave ;"
echo ${sql}  | ${MYSQL_CMD}

sleep 3
sql="show slave status \G"
#echo ${sql}  | ${MYSQL_CMD}

echo "=================================================="
echo ${sql}  | ${MYSQL_CMD} |grep Slave_IO_Running: 
echo ${sql}  | ${MYSQL_CMD} |grep Slave_SQL_Running:

echo "$timestamp db_sync OK!">> db_sync.log

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章