本文詳細描述了如何在MySQL中使用master.sh和slave.sh腳本進行主從服務器的數(shù)據(jù)備份、同步用戶權限設置、配置文件生成以及驗證主從狀態(tài)的過程。
首先將mysqlmasterbyslave文件夾(包含master.sh和slave.sh )貝到主服務器中,在主服務器上執(zhí)行master.sh
輸入序號,確認你要備份的數(shù)據(jù)庫,將自動導出你選擇的數(shù)據(jù)庫和先備份你的my.cnf文件,和配置my.cnf!
設置用于同步的用戶和密碼
選擇你的服務器IP,從服務器將查詢這個IP用于同步!
最后會生成配置文件tb.ini,
內(nèi)容如下
tbuser=xxxxx #同步用戶tbpwd=xxxxx #同步密碼File=mysql-bin.000009 #用于同步的日志文件Position=738 #日志文件位置IP=192.168.31.166 #服務器IPserver_uuid=ad35ab19-97bb-11eb-a83f-000c29c3cf9d #MYSQL的應用ID標識,確保唯一,主從不能一樣!
把生成的所有文件拷貝到從服務器上??!
從服務器上執(zhí)行slave.sh!
輸入序號,選擇要同步的數(shù)據(jù)庫!
等待執(zhí)行完畢,最后顯示如下圖!
表示主從同步狀態(tài)OK!
測試在主服務器上新增一個表??!并插入數(shù)據(jù)
從服務器上查看
同步完成?。。?/p>
master.sh內(nèi)容
變量相關內(nèi)容user請?zhí)顚懩鉳ysql的管理員賬號!pwd填寫你mysql的管理員密碼
###變量相關 data="zabbix" user="root" pwd="Zabbix@123" backuppath="/winshare/backup" ###變量相關 clear cnf=`find / -name "my.cnf" ` echo backup your $cnf cp $cnf `date +%F`"[master]"${cnf##*/} items=(log-bin server-id binlog_format auto-increment-offset auto-increment-increment) values=(mysql-bin 1 mixed 1 10) for (( i = 0; i < ${#items[@]}; i++ )); do #echo ${items[$i]} sed -i "/${items[$i]}.*/d" $cnf echo ${items[$i]}=${values[$i]} >>$cnf done mysql -uroot -pZabbix@123 -e "show databases;"|grep -Ev "Database"|awk '{i++}{print "a["i-1"]="$1}'>tmp.txt while read line;do echo ${j:=0}:${line##*=} eval $line let j++ done <tmp.txt echo "select your Synchronize data,such as 2" read -p "" n #binlog-ignore-db binlog-do-db declare -r ignoredb="binlog-ignore-db" declare -r dodb="binlog-do-db" sed -i "/${ignoredb}.*/d" $cnf sed -i "/${dodb}.*/d" $cnf for (( i = 0; i < ${#a[@]}; i++ )); do if [[ $i -ne $n ]]; then echo ${ignoredb}=${a[$i]} >>$cnf else echo ${dodb}=${a[$i]} >>$cnf fi done systemctl restart mysqld sleep 2 systemctl list-units --type=service|grep -i -E "mysqld"|awk '{if($4=="running"&&$3=="active"){print $1",服務啟動成功"}else{print $1",服務啟動失敗,請檢查"}}' read -p "設置用于同步的用戶" tbuser read -p "設置用于同步的密碼" tbpwd echo tbuser=${tbuser}|tee tb.ini echo tbpwd=${tbpwd}|tee -a tb.ini #sql="show global variables like 'validate_password%'" 密碼策略 mysql -u"${user}" -p"${pwd}" -e "GRANT REPLICATION SLAVE ON *.* TO '${tbuser}'@'%' IDENTIFIED BY '${tbpwd}';flush privileges;" -N #mysql -u"${user}" -p"${pwd}" -e "SELECT HOST,USER,Repl_slave_priv,password_last_changed from mysql.user WHERE USER='${tbuser}';" -N mysql -u"${user}" -p"${pwd}" -e "show grants for ${tbuser};" -N #備份數(shù)據(jù)庫 mysql -u"${user}" -p"${pwd}" -e "flush tables with read lock;" -N mysqldump -u"${user}" -p"${pwd}" "${a[$n]}" -B -x> ./"${a[$n]}".sql mysql -u"${user}" -p"${pwd}" -e "unlock tables;" -N mysql -u"${user}" -p"${pwd}" -e "show master status\G;" |awk -F : '/File|Position/ {print $1"="$2 }'|tr -d " "|tee -a tb.ini #你服務器IP echo please confirm your serverIP,such as 1 ifconfig | grep inet | awk '{print "["NR"]"$2}' read -p "" ip ifconfig | grep inet | awk 'NR=="'${ip}'"{print "IP="$2}'|tee -a tb.ini #關鍵是取UUID,防止是克隆主機一樣! mysql -u"${user}" -p"${pwd}" -e "show variables like '%server_uuid%'"|awk '/uuid/{print $1"="$2}'|tee -a tb.ini ———————————————— 版權聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。 原文鏈接:https://blog.csdn.net/u014332402/article/details/134475802
slave.sh內(nèi)容
###變量相關 user="root" pwd="Zabbix@123" ###變量相關 clear find ./ -name "*.sql" -type f|awk '{i++}{print "a["i-1"]="$0 }' >tmp.txt while read line;do eval $line done <tmp.txt echo "select your Synchronize data,such as 0" for (( i = 0; i < ${#a[@]}; i++ )); do name[$i]=`echo ${a[i]##*/}|awk '{gsub(".sql","",$0);print $0}'` echo "[${i}]${name[$i]} Path:${a[i]}" done read -p "" sb echo ${name[$sb]} if [[ ! -e ./tb.ini ]]; then echo tb.ini not exist! please check !!! fi while read line;do eval $line done <./tb.ini echo 用于同步的用戶 $tbuser echo 用戶密碼 $tbpwd echo 數(shù)據(jù)庫同步的日志文件 $File echo 文件位置 $Position echo 服務器IP $IP echo 主服務器UUID ${server_uuid} mysql -u${tbuser} -p${tbpwd} -h ${IP} -e "show grants for ${tbuser} ;" if [[ $? -ne 0 ]]; then echo [master]mysqlserver can not connected! please check!! exit fi cnf=`find / -name "my.cnf" ` echo backup your $cnf cp $cnf `date +%F`"[slave]"${cnf##*/} items=(relay-log server-id) values=(relay-log 2 information_schema performance_schema) for (( i = 0; i < ${#items[@]}; i++ )); do #echo ${items[$i]} sed -i "/${items[$i]}.*/d" $cnf echo ${items[$i]}=${values[$i]} >>$cnf done sed -i "/replicate-ignore-db.*/d" $cnf ignoredb=information_schema,performance_schema echo $ignoredb | awk '{split($0,a,",");for(i in a) system("echo replicate-ignore-db="a[i]"|tee -a '${cnf}'")}' #關鍵對比UUID,一樣是克隆機要改! slave_uuid=$(mysql -u"${user}" -p"${pwd}" -e "show variables like '%server_uuid%'"|awk '$0~"uuid"{print $2}') if [[ "${slave_uuid}" == "${server_uuid}" ]]; then echo UUID IS SAME! MUST UPDATE! read -p "press any key for continue!" s find / -name "auto.cnf"|while read line;do echo auto backup $line! mv $line $line`date +%F`".bak" done else echo slave_uuid:${slave_uuid} fi #service mysqld restart systemctl restart mysqld sleep 2 systemctl list-units --type=service|grep -i -E "mysqld"|awk '{if($4=="running"&&$3=="active"){print $1",服務啟動成功"}else{print $1",服務啟動失敗,請檢查"}}' mysql -u${user} -p${pwd} < ${a[$sb]} sql=" STOP SLAVE; CHANGE MASTER TO MASTER_HOST='${IP}', MASTER_USER='${tbuser}', MASTER_PASSWORD='${tbpwd}', MASTER_LOG_FILE='${File}', MASTER_LOG_POS=${Position}; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE; " mysql -u${user} -p${pwd} -e "${sql}" systemctl restart mysqld sleep 2 systemctl list-units --type=service|grep -i -E "mysqld"|awk '{if($4=="running"&&$3=="active"){print $1",服務啟動成功"}else{print $1",服務啟動失敗,請檢查"}}' mysql -u"${user}" -p"${pwd}" -e "show slave status\G;SHOW VARIABLES LIKE '%server_%';" ———————————————— 版權聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。 原文鏈接:https://blog.csdn.net/u014332402/article/details/134475802
————————————————
版權聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
原文鏈接:https://blog.csdn.net/u014332402/article/details/134475802
來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡平臺,并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權或非授權發(fā)布,請聯(lián)系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內(nèi)容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺保留所有權利
蘇公網(wǎng)安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網(wǎng)絡科技有限公司