程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql主從同步備份戰略分享

Mysql主從同步備份戰略分享

編輯:MySQL綜合教程

Mysql主從同步備份戰略分享。本站提示廣大學習愛好者:(Mysql主從同步備份戰略分享)文章只能為提供參考,不一定能成為您想要的結果。以下是Mysql主從同步備份戰略分享正文


情況:
主從辦事器上的MySQL數據庫版本同為5.1.34
主機IP:192.168.0.1
從機IP:192.168.0.2
一. MySQL主辦事器設置裝備擺設
1.編纂設置裝備擺設文件/etc/my.cnf
確保有以下行
server-id 1
log-bin=mysql-bin
binlog-do-db=mysql  #須要備份的數據庫名,假如備份多個數據庫,反復設置這個選項便可
binlog-ignore-db=mysql  #不須要備份的數據庫名,假如備份多個數據庫,反復設置這個選項便可
log-slave-updates #這個參數必定要加上,不然不會給更新的記載些到二進制文件裡
slave-skip-errors #是跳錯誤誤,持續履行復制操作
2.樹立用戶
mysql> grant replication slave on *.* to [email protected] identified by ‘111111′;
grant replication slave on *.* to ‘用戶名'@'主機' identified by ‘暗碼';
可在Slave上做銜接測試: mysql -h 192.168.0.1 -u test -p
3.鎖主庫表
mysql> FLUSH TABLES WITH READ LOCK;
4.顯示主庫信息
記載File和Position,從庫設置將會用到
=====================
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
File             Position Binlog_do_db Binlog_ignore_db |
+------------------+----------+--------------+------------------+
mysql-bin.000001 106                                    |
+------------------+----------+--------------+------------------+
5.另開一個終端,打包主庫
cd /usr/local/mysql  #mysql庫目次
tar zcvf var.tar.gz var
============================
二.MySQL從辦事器設置裝備擺設
1、傳輸拿到主庫數據包、解包
cd /usr/local/mysql
scp 192.168.0.1:/usr/local/mysql/var.tar.gz .
tar zxvf var.tar.gz
2、檢查修正var文件夾權限
chown -R mysql:mysql var
3.編纂 /etc/my.cnf
server-id=2
log-bin=mysql-bin
master-host=192.168.0.1
master-user=slave
master-password=111111
master-port=3306
replicate-do-db=test  #須要備份的數據庫名
replicate-ignore-db=mysql #疏忽的數據庫
master-connect-retry=60 #假如從辦事器發明主辦事器斷失落,從新銜接的時光差(秒)
log-slave-updates #這個參數必定要加上,不然不會給更新的記載些到二進制文件裡
slave-skip-errors #是跳錯誤誤,持續履行復制操作
4、驗證銜接MASTER
mysql -h192.168.0.1 -uslave -ppassword
mysql> show grants for [email protected];
5、在SLAVE上設置同步
設置銜接MASTER MASTER_LOG_FILE為主庫的File,MASTER_LOG_POS為主庫的Position
============================
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='slave',MASTER_PASSWORD='111111',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=106;
6、啟動SLAVE辦事
mysql> slave start;
7、檢查SLAVE狀況
mysql> SHOW SLAVE STATUS\G;
個中 Slave_IO_Running 和 Slave_SQL_Running 兩列的值都為 "Yes",注解 Slave 的 I/O 和 SQL 線程都在正常運轉。
8、解鎖主庫表
mysql> UNLOCK TABLES;
到此主從庫搭建勝利。可以在主庫上拔出數據測試同步能否正常。
--------------------------
附:一些毛病信息的處置,主從辦事器上的敕令,及狀況信息。
在從辦事器上應用show slave status\G
Slave_IO_Running,為No,
則解釋IO_THREAD沒有啟動,請履行start slave io_thread
Slave_SQL_Running為No
則復制失足,檢查Last_error字段消除毛病後履行start slave sql_thread
檢查Slave_IO_State字段空 //復制沒有啟動
Connecting to master//沒有銜接上master
Waiting for master to send event//曾經連上
主辦事器上的相干敕令:
show master status
show slave hosts
show logs
show binlog events
purge logs to 'log_name'
purge logs before 'date'
reset master(老版本flush master)
set sql_log_bin=
從辦事器上的相干敕令:
slave start
slave stop
SLAVE STOP IO_THREAD //此線程把master段的日記寫到當地
SLAVE start IO_THREAD
SLAVE STOP SQL_THREAD //此線程把寫到當地的日記運用於數據庫
SLAVE start SQL_THREAD
reset slave
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
load data from master
show slave status(SUPER,REPLICATION CLIENT)
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //靜態轉變master信息
PURGE MASTER [before 'date'] 刪除master端已同步過的日記
6.3.1 Master 同步線程狀況
以以下出了master的 Binlog Dump 線程 State 字段中最多見的幾種狀況。假如在master上沒有 Binlog Dump 線程,那末同步就沒有在運轉。
也就是說,沒有slave銜接下去。
Sending binlog event to slave
事宜是由二進制日記組成,一個事宜平日由更新語句加上其他信息。線程讀取到一個事宜並正發送到slave上。
Finished reading one binlog; switching to next binlog
讀取完了一個二進制日記,正切換到下一個。
Has sent all binlog to slave; waiting for binlog to be updated
曾經讀取完整部未完成更新日記,而且全體都發送到slave了。它處於余暇狀況,正期待在master上履行新的更新操作以在二進制日記中發生新
的事宜,然後讀取它們。
Waiting to finalize termination
以後線程停滯了,這個時光很短。
6.3.2 Slave的I/O線程狀況
以以下出了slave的I/O線程 State 字段中最多見的幾種狀況。從MySQL 4.1.1開端,這個狀況在履行 SHOW SLAVE STATUS 語句成果的
Slave_IO_State 字段也會湧現。這意味著可以只履行 SHOW SLAVE STATUS 語句就可以懂得到更多的信息。
Connecting to master
該線程證測驗考試銜接到master上。
Checking master version
肯定銜接到master後湧現的一個長久的狀況。
Registering slave on master
肯定銜接到master後湧現的一個長久的狀況。
Requesting binlog dump
肯定銜接到master後湧現的一個長久的狀況。該線程向master發送一個要求,告知它要要求的二進制文件和開端地位。
Waiting to reconnect after failed binlog dump request
假如二進制日記轉儲(binary log dump)要求掉敗了(因為銜接斷開),該線程在休眠時進入這個狀況,並按期重連。重連的時光距離由 --
master-connect-retry 選項來指定。
Reconnecting after failed binlog dump request
該線程正測驗考試重連到master。
Waiting for master to send event
曾經銜接到master,正期待它發送二進制日記。假如master閒置時,這個狀況能夠會連續較長時光,假如它期待跨越 slave_read_timeout 
,就會產生超時。這時候,它就會斟酌斷開銜接,然後測驗考試重連。
Queueing master event to the relay log
曾經讀取到一個事宜,正把它拷貝到中繼日記中以備SQL線程處置。
Waiting to reconnect after failed master event read
讀日記時產生毛病(因為銜接斷開)。該線程在重連之前休眠 master-connect-retry 秒。
Reconnecting after failed master event read
正測驗考試重連到master。當銜接肯定後,狀況就釀成 Waiting for master to send event。
Waiting for the slave SQL thread to free enough relay log space
relay_log_space_limit 的值非零,中繼日記的年夜小總和跨越這個值了。I/O線程期待SQL線程先處置中繼日記然後刪除它們以釋放足夠的空間

Waiting for slave mutex on exit
以後線程停滯了,這個時光很短。
6.3.3 Slave的SQL線程狀況
以以下出了slave的SQL線程 State 字段中最多見的幾種狀況:
Reading event from the relay log
從中繼日記裡讀到一個事宜以備履行。
Has read all relay log; waiting for the slave I/O thread to update it
曾經處置完中繼日記中的全體事宜了,正期待I/O線程寫入更新的日記。
Waiting for slave mutex on exit
以後線程停滯了,這個時光很短。
--------------
罕見的一些成績:
一.從庫SLAVE啟動成績
因為一些毛病操作招致 CHANGE MASTER 和 SLAVE 辦事沒法啟動,體系報錯以下:
*****************************************************************
Could not initialize master info structure; more error messages can be found in the MySQL error log.
*****************************************************************
沒法初始化master info構造,MySQL毛病日記記載了更具體的毛病信息。
處理辦法:
1、檢查MySQL毛病日記,如:同步的上一個Position是若干,許多情形下沒法啟動辦事是因為mysql辨認的同步一直逗留在上一個Position上。
2、檢查master.info和relay-log.info,master.info 記載MASTER相干信息,relay-log.info 記載以後同步日記信息。
3、停滯myslq辦事,刪除master.info和relay-log.info。
4、啟動mysql辦事。
5、從新CHANGE MASTER,從新啟動SLAVE辦事。
二.主從不克不及同步
show slave status;報錯:Error xxx dosn't exist
且show slave status\G:
Slave_SQL_Running: NO
Seconds_Behind_Master: NULL
處理辦法:
stop slave;
set global sql_slave_skip_counter =1 ;
start slave;
以後Slave會和Master去同步 重要看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master能否為0,0就是曾經同步了
2,還須要做的一些優化與監督:
show full processlist; //檢查mysql以後同步線程號
skip-name-resolve       //跳過dns稱號查詢,有助於加速銜接及同步的速度
max_connections=1000    //增年夜Mysql的銜接數量,(默許100)
max_connect_errors=100 //增年夜Mysql的毛病銜接數量,(默許10)
檢查日記一些敕令
1,  show master status\G;
在這裡重要是看log-bin的文件能否雷同。
show slave status\G;
在這裡重要是看:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
假如都是Yes,則解釋設置裝備擺設勝利.
2,在master上輸出show processlist\G;
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost:32931
db: NULL
Command: Binlog Dump
Time: 94
State: Has sent all binlog to slave; waiting for binlog to
be updated
Info: NULL
假如湧現Command: Binlog Dump,則解釋設置裝備擺設勝利.
stop slave    #停滯同步
start slave    #開端同步,從日記終止的地位開端更新。
SET SQL_LOG_BIN=0|1  #主機端運轉,須要super權限,用來開停日記,隨便開停,會形成主機從機數據紛歧致,形成毛病
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n  客戶端運轉,用來跳過幾個事宜,只要當同步過程湧現毛病而停滯的時刻才可以履行。
RESET MASTER  #主機端運轉,消除一切的日記,這條敕令就是本來的FLUSH MASTER
RESET SLAVE   #從機運轉,消除日記同步地位標記,偏重重生成master.info
固然從新生成了master.info,然則其實不升引,最好,將從機的mysql過程重啟一下,
LOAD TABLE tblname FROM MASTER #從機運轉,從主機端重讀指定的表的數據,每次只能讀取一個,受timeout時光限制,須要調劑timeout時光。履行這個敕令須要同步賬號有 reload和super權限。和對響應的庫有select權限。假如表比擬年夜,要增長net_read_timeout 和 net_write_timeout的值
LOAD DATA FROM MASTER  #從機履行,從主機端從新讀入一切的數據。履行這個敕令須要同步賬號有reload和super權限。和對響應的庫有select權限。假如表比擬年夜,要增長net_read_timeout 和 net_write_timeout的值
CHANGE MASTER TO master_def_list  #在線轉變一些主機設置,多個用逗號距離,好比
CHANGE MASTER TO
MASTER_HOST='master2.mycompany.com',
MASTER_USER='replication',
MASTER_PASSWORD='bigs3cret'
MASTER_POS_WAIT() #從機運轉
SHOW MASTER STATUS #主機運轉,看日記導出信息
SHOW SLAVE HOSTS #主機運轉,看連入的從機的情形。
SHOW SLAVE STATUS (slave)
SHOW MASTER LOGS (master)
SHOW BINLOG EVENTS IN 'logname' FROM pos LIMIT [offset,] rows ]
PURGE [MASTER] LOGS TO 'logname' PURGE [MASTER] LOGS BEFORE 'date'
show binlog events; #檢查主庫二進制日記文件內容:
留意:
1.主輔庫同步重要是經由過程二進制日記來完成同步的。
2.在啟動輔庫的時刻必需先把數據同步,並刪除日記目次下的:master.info文件。由於master.info記載了前次要銜接主庫的信息,假如不刪除,即便my.cnf裡停止了修正,也不起感化。由於讀取的照樣master.info文件裡的信息。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved