做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