一、環境描述
本次同步-mysql環境暫時不統一,(後續會升級,建議先保持統一性)
二、調整主從節點serverID
(master開啓binlog——slave關閉binlog)
[root@backup ~]# cat /etc/my.cnf|egrep "data|server"
#注意:主從狀態會跟進serverID去判定,所有主的必定最小
三、Master上使用xtrabackup做全庫備份
innobackupex --user=root --password=mysqlpassword --socket=/data/mysqldata/mysql.sock --defaults-file=/etc/my.cnf /tmp/
四、爲了保證備份集中的數據一致
需要操作:同步應用日誌
innobackupex --apply-log /data/backup/innobackupex/2014-07-31_11-20-44
五、Master創建同步賬號並授權REPLICATION
GRANT REPLICATION SLAVE ON *.* TO repl@'192.168.106.%' IDENTIFIED BY 'password';
六、在Slave上測試,看看能否使用repl用戶登錄Master服務器:
mysql -h192.168.223.132 -urepl -ppassword
七、將Master的全備scp到Slave主機上
scp -r ./2014-07-31_11-20-44 192.168.223.133:/data/backup
#先備份數據目錄下的數據,方便恢復
八、:查看binlog位置點
[root@ds1 tmp]# cat /tmp/2017-12-29_12-33-01/xtrabackup_binlog_info
mysql-bin.000460 82773878
九、將備份恢復到slave
innobackupex --user=root --password=password --apply-log /tmp/2017-12-27_14-36-43
innobackupex --user=root --password=password --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --copy-back /tmp/
十、從新授權
chown -R mysql.mysql var/
##var是mysql data目錄
十一、啓動Slave數據庫
[root@backup mysql]# /etc/init.d/mysql start
Starting MySQL.. [ OK ]
十二、在slave上執行change master設置主服務器複製信息
查看上面binlog位置
change master to master_host='10.27.82.*', master_user='repl', master_password='replpassword',master_port=3306,master_log_file='mysql-bin.000460',master_log_pos=82773878;
十三、在slave上啓動複製
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
十四、檢查主從複製是否正常
mysql> show slave status\G
十五、報錯處理
1)1146
處理辦法:
[root@backup ~]# cat /etc/my.cnf|egrep "lower_case_table_names"
lower_case_table_names=1
在從服務器中的my.ini文件中添加一行(表名不區分大小寫):lower_case_table_names=1,重啓從服務器就ok了
十六、檢查mysql主從同步狀態腳本
#!/bin/bash
DATE=`date +%F-%H-%M`
LOG="/root/shell/ckslave/slave.log"
##WeiXin ENV-------------------------------------------------------------------------------------
CropID='微信ID****'
Secret='HxTbS_-rNujfHBAqFt7XMifFKEHQTX_yTNK2ciGob43mHgfc_GJiNW2dwjlitOCS'
APIURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
TOKEN=$(/usr/bin/curl -s -G $APIURL | awk -F\" '{print $10}')
POSTURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$TOKEN"
##WeiXin body--------------------------------------------------------------------------------------
function body() {
local int AppID=1
local UserID=用戶
local PartyID=2
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'"$AppID"\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'59.110.0.51--"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
##check status--------------------------------------------------------------------------------------
slave_is=($(mysql -h 127.0.0.1 -uroot -p數據庫密碼! -e "show slave status\G"|grep "Slave_.*_Running" |awk '{print $2}'))
if [ "${slave_is[0]}" = "Yes" -a "${slave_is[1]}" = "Yes" ]
then
echo "----------------------------------"
echo "OK,從庫狀態運行正常..."
echo "$DATE OK,從庫狀態運行正常..." >>$LOG
echo "----------------------------------"
exit 0
else
echo "----------------------------------"
echo "Fail,從庫狀態運行不正常,請登錄檢查!!!"
echo "$DATE Fail,從庫狀態運行不正常,請登錄檢查!!!" >>$LOG
echo "----------------------------------"
Msg="Fail,從庫狀態運行不正常,請登錄檢查!!!"
echo "$(body guozhiheng0123 $2 )" $POSTURL
/usr/bin/curl --data-ascii "$(body guozhiheng0123 $2)" $POSTURL
exit 2
fi