MySQL Replication(備份機制)
文件提到之內容
1.確認Master/Slave機器上所裝的MySQL版本能進行replication.Use Version 3.23.29 or 以上.
2.在Master MySQL上開放一個帳號給Slave
實作內容!
這個機制,我試了好久才試出來,其實原本就應該是成功的,但因為沒注意到一些小問題,才發生不能
Replication的情形!在這分享我的設定經驗給大家!
一.我要做什麼?
現在我有兩台電腦,分別為
A:192.168.0.1 (主電腦-master)
B:192.168.0.2 (備份電腦-slave)
我要將A的資料備份到B
二.我要怎麼做?
首先,我們要了解A要備份到B,A的mysql就要開個帳號和權限給B
這樣子B才可以去備份A的資料,至於mysql的設定大家要去買書了解一下喔!
1.那我們現在就來開個mysql的帳號給B!
mysql –u root –p
mysql>GRANT FILE ON *.* TO bslave@192.168.1.2 IDENTIFIED BY ‘slave123’;
mysql>\q
2.到my.cnf去做設定?
vi /etc/my.cnf
A的修改以下
##master
server-id=1
log-bin
sql-bin-update-same
##phpbb
binlog-do-db=phpbb
ps.如果有兩個以上資料庫要備份直接加入
##phpbb#1
binlog-do-db=phpbb1
##phpbb#2
binlog-do-db=phpbb2
.
.
.
A的修改以上
ps.如果你在 /etc 下找不到my.cnf , 請 cp /usr/share/mysql/my-medium.cnf /etc/my.cnf 再進行修改.
3.備份前的打包?
我們要把A主電腦(master),的資料庫打包起來並且複製到B備份電腦(slave)
打包前,為了可以完整的打包要先記得把mysql shutdown喔!
mysqladmin -u root -p shutdown
開始打包
tar -cvf /tmp/mysql-phpbb.tar /var/lib/mysql/phpbb
包好後可以去/tmp內找到mysql-phpbb.tar
4.啟動mysql
把mysql啟動起來吧!
/etc/rc.d/init.d/mysqld restart
ps.成功啟動後會在/var/lib/mysql/內看到.index and .001兩個檔案!
===================================
5.B備份電腦(slave)的設定?
在A打包好的mysql-phpbb.tar複製到B以後就可以解開來了?
cd /
tar xvf /tmp/mysql-phpbb.tar
cd /var/lib
chown -R mysql:mysql mysql
ps.成功的話會在/var/lib/mysql/內看到phpbb
6.到my.cnf去做設定?
在上面的步驟中,A有開個mysql的帳號給B,以下就是備份的設定?
B的修改以下
##slave
server-id=2
master-host=192.168.0.1
master-user=bslave
master-password=slave123
log-slave-updates
master-connect-retry=60
##phpbb
replicate-do-db=phpbb
B的修改以上
ps.如果有兩個以上資料庫要備份直接加入
##phpbb#1
replicate-do-db=phpbb1
##phpbb#2
replicate-do-db=phpbb2
.
.
.
7.停止和啟動mysql
先停止mysql
/etc/rc.d/init.d/mysqld stop
再啟動mysql
/etc/rc.d/init.d/mysqld restart
ps.成功後會在/var/lib/mysql/內看到master.info的檔案
=====================================
A的資料要備份到B做備份完成了(這就是單向備份了)
=====================================
三.兩台機器要備份一台機器的資料?
我有三台電腦A B C分別為
A主電腦
B備份1
c備份2
A設定如下
##master
server-id=1
log-bin
sql-bin-update-same
##phpbb
binlog-do-db=phpbb
B設定如下
##slave
server-id=2
master-host=192.168.0.1
master-user=bslave
master-password=slave123
log-slave-updates
master-connect-retry=60
##phpbb
replicate-do-db=phpbb
c設定如下
##slave
server-id=3
master-host=192.168.0.1
master-user=cslave
master-password=slave123
log-slave-updates
master-connect-retry=60
##phpbb
replicate-do-db=phpbb
ps.記得要多在A開個帳號給C喔!
======================================
四.雙向如何設定?
我有兩台電腦A B分別為
A主電腦和備份電腦
B主電腦和備份電腦
A的phpbb1要備份到B
B的phpbb2要備份到A
A設定如下
##master
server-id=1
log-bin
sql-bin-update-same
##phpbb
binlog-do-db=phpbb1
##slave
server-id=2
master-host=192.168.0.2
master-user=bslave
master-password=slave123
log-slave-updates
master-connect-retry=60
##phpbb
replicate-do-db=phpbb2
=============================
B設定如下
##master
server-id=1
log-bin
sql-bin-update-same
##phpbb
binlog-do-db=phpbb2
##slave
server-id=2
master-host=192.168.0.1
master-user=aslave
master-password=slave123
log-slave-updates
master-connect-retry=60
##phpbb
replicate-do-db=phpbb1
======================================
所有的檢查都很簡單,就是當主電腦(master)更動時,備份電腦(slave)是否有更動就可以
知道是否成功了,如果不成功大家只要依下面的方向去試應該都可以!
1.先把mysql先stop
2.把/var/lib/mysql/內的.index and .001 and master.info殺了!
3.把mysql restart吧!
在這感謝很多的在網路上供上自己的文件和經驗!======================================
還有一種是由雙向replication延伸出replication chain/(circular),即A->B->C->…(->A)
觀念chain是單向replication的延伸, circular是chain的尾巴接回頭.
大家可以參考文件
http://www.study-area.org/tips/mysql_replication.htm