mysql的replication雙向備份配置,分享如下。
一、?設(shè)置A服務(wù)器
編輯/usr/local/mysql/etc/my.cnf文件,在mysqld塊里添加如下內(nèi)容:
log-bin=/jongo/mysql/logs/mysql-bin server-id???????=?2 binlog-do-db=bbscs8????這里的binlog-do-db是用來設(shè)置可以被slave服務(wù)器同步的數(shù)據(jù) 庫名稱 binlog-do-db=bdt binlog-do-db=adsense binlog-do-db=bdt_bbs binlog-do-db=bdt_help
master-host?????=???192.168.2. ? ? ? ??備份192.168.2.7上的數(shù)據(jù)庫,即這臺做為備機(jī)的需要備份的數(shù)據(jù)庫的主機(jī)器地址
master-user?????=??backup?????上面機(jī)器上設(shè)置的,用來同步的用戶名勝古跡
master-password?=?17buybackup@#$???要用主服務(wù)器上同步過來的數(shù)據(jù)庫的名稱
log-slave-updates
grant?replication?slave?on?*.*?to?‘backup’@’192.168.2.%’?identified?by?‘bdtbackup@#$’;?
給同步添加一個(gè)用戶
二、?設(shè)置B服務(wù)器
server-id???????=?1
binlog-do-db=?jongo17buy?這里的binlog-do-db是用來設(shè)置可以被slave服務(wù)器同步的數(shù)據(jù)
庫名稱
master-host?????=???192.168.2.5???備份192.168.2.7上的數(shù)據(jù)庫,即這臺做為備機(jī)的需要備份的數(shù)據(jù)庫的主機(jī)器地址
master-user?????=??backup?????上面機(jī)器上設(shè)置的,用來同步的用戶名勝古跡
master-password?=?bdtbackup@#$??要用主服務(wù)器上同步過來的數(shù)據(jù)庫的名稱
grant?replication?slave?on?*.*?to?‘backup’@’192.168.2.%’?identified?by?’17buybackup@#$’;
三、?兩個(gè)服務(wù)器上
在兩個(gè)服務(wù)器上,將要同步的數(shù)據(jù)庫分別在各的備機(jī)手工同步或重新導(dǎo)入一下。
然后,分別啟動(dòng)?mysql>?start?slave?
四、?同步監(jiān)控腳本
mysql_monitor.sh文件 #!/bin/bash .?/root/.bash_profile .?/jongo/shell/contact_config.sh MYSQL_PASSWD="admin8*" IO_RUNING=`echo?"show?slave?status?G;"?|mysql?-uroot?-p$MYSQL_PASSWD?|grep?"Slave_IO_Running"?|awk?-F?":"?'{?print?$2?}'` SQL_RUNING=`echo?"show?slave?status?G;"?|mysql?-uroot?-p$MYSQL_PASSWD?|grep?"Slave_SQL_Running"?|awk?-F?":"?'{?print?$2?}'` SQL_ERROR=`echo?"show?slave?status?G;"?|mysql?-uroot?-p$MYSQL_PASSWD?|grep?"Last_SQL_Error"?|awk?-F?":"?'{?print?$2?}'` echo?"io_status="$IO_RUNING""?>/jongo/shell/tmp.txt echo?"sql_status="$SQL_RUNING"">>/jongo/shell/tmp.txt echo?"sql_error="$SQL_ERROR"">>/jongo/shell/tmp.txt .?/jongo/shell/tmp.txt if?[?"$io_status"?!=?"?Yes"?-o?"$sql_status"?!=?"?Yes"?] ????then ????????echo?"17buy的mysql數(shù)據(jù)庫的slave(203.156.192.29)?于"`date?"+%Y-%m-%d?%H:%m:%S"`"發(fā)生錯(cuò)誤:">/jongo/shell/mysql_monitor.log ?????echo?"請立即檢查,謝謝!"?>>/jongo/shell/mysql_monitor.log ?????echo?"slave?服務(wù)器的狀態(tài)如下:">>/jongo/shell/mysql_monitor.log ?????echo?"show?slave?status?G;"?|mysql?-uroot?-p$MYSQL_PASSWD?>>/jongo/shell/mysql_monitor.log ?????for?email?in?$contact_email ??????do ????????mail?-s?"mysql?slave?on?17buy?was?false"?$email?/shell/mysql_monitor.log ?????????done fi contact_config.sh文件 contact_email=wayne.wang@jongogroup.com
五、?常見問題
a.?出現(xiàn)Error?initializing?relay?log?position:?Could?not?find?target?log?during?relay?log?initialization,Error_code:?1593錯(cuò)誤
~??這個(gè)一般是由于在mysql數(shù)據(jù)庫的數(shù)據(jù)目錄下找不到localhost-relay-bin.***文件導(dǎo)致的,可以用類似下列語句來調(diào)整:
CHANGE?MASTER?TO ????->????MASTER_HOST='192.168.2.5’, ????->????MASTER_USER='backup', ????->????MASTER_PASSWORD='./bdtbackup@#$', ????->????MASTER_PORT=3306, ????->????MASTER_LOG_FILE='master2-bin.001', ????->????MASTER_LOG_POS=4, ????->????MASTER_CONNECT_RETRY=10,CHANGE?MASTER?TO ????->????RELAY_LOG_FILE='./slave-relay-bin.006', ????->????RELAY_LOG_POS=4025;
???注意:
這里指定的文件路徑是絕對路徑,如果要用相對路徑一定要用./filename形式,否報(bào)找不到對應(yīng)的文件錯(cuò)誤;
b.?出現(xiàn)Slave?I/O:?error?connecting?to?master?‘backup@192.168.2.5:3306’?–?retry-time:?60??retries:?86400,?Error_code:?1045?錯(cuò)誤:
出現(xiàn)這個(gè)錯(cuò)誤可能有:
1)?用戶的權(quán)限不對;
2)?主服務(wù)器不上連接,如防火墻沒有打開相應(yīng)的端口;
3)?從服務(wù)器上的RELAY_LOG_POS的值不對,可以用上面的CHANGE?MASTER?TO語句來調(diào)整
c.?同步出錯(cuò)處理
當(dāng)服務(wù)器同步出錯(cuò)了,可以有以下兩種方法來處理它:
(a)?如果只是數(shù)據(jù)更新或者插入錯(cuò)誤,而且對將來的影響不是很大,這個(gè)數(shù)據(jù)可以不要時(shí),可以:
stop?slave; SET?GLOBAL?SQL_SLAVE_SKIP_COUNTER=1:
將這條出錯(cuò)的查詢跳掉就可以了,然后:
start?slave;?重啟同步過程就可以了
(b)?另外的方法是?:當(dāng)服務(wù)器出現(xiàn)嚴(yán)重的問題時(shí)可以:
stop?slave?
然后用其他軟件手動(dòng)同步一下,然后再主機(jī)上:
show?master?status;
查到master_log_file和master_log_pos,然后再從機(jī)器上:
change?master?to?master_log_file='mysql-bin.000007',master_log_pos=261836644?; start?slave
就有可以同步了