同步文件和數(shù)據(jù)庫(kù)
linuxing , 13:46 , 數(shù)據(jù)庫(kù) » Mysql , 評(píng)論(0) , 引用(0) , 閱讀(4686) , Via 本站原創(chuàng) 大 | 中 | 小
引用地址:
注意: 該地址僅在今日23:59:59之前有效 為了防止blog主機(jī)出現(xiàn)故障導(dǎo)致文件丟失,我在整理了另外一臺(tái)后備的服務(wù)器,下面就寫寫如何做它們的同步。
遇到的問題有兩個(gè):1、主機(jī)是FreeBSD,備機(jī)是Linux,使用的命令和路徑有不同;2、不單要同步文件,而且要同步mysql數(shù)據(jù)。 一、同步文件 我使用rsync服務(wù),主機(jī)做rsync服務(wù)器,備機(jī)做rsync客戶機(jī)。關(guān)于rsync的詳細(xì)命令可以參考[原]使用rsync命令同步數(shù)據(jù) 主機(jī): FreeBSD系統(tǒng),可以使用port安裝rsync,安裝完后的路徑在/usr/local/下。 修改/usr/local/etc/rsyncd.conf文件,增加: 引用
[test]
path = /usr/local/www/test/ comment = my blog data uid = www gid = www ignore errors read only = yes list = yes auth users = linuxing secrets file = /usr/local/etc/rsyncd.secrets 增加密碼驗(yàn)證文件: # cat /usr/local/etc/rsyncd.secrets linuxing:test # chown root:wheel /usr/local/etc/rsyncd.secrets # chmod 600 /usr/local/etc/rsyncd.secrets 啟動(dòng)服務(wù) # rsync --daemon
或 # /usr/local/etc/rc.d/rsyncd.sh start 查看是否已經(jīng)打開服務(wù)(端口873) # sockstat |grep 873
root rsync 1147 4 tcp4 *:873 *:* 或 # netstat -aln | grep 873 tcp4 0 0 *.873 *.* LISTEN 確認(rèn)都正常的話,使到rsync服務(wù)開機(jī)自動(dòng)啟動(dòng),在/etc/rc.conf,增加rsyncd_enable="YES"。 備機(jī): 使用的是紅旗DC Server 4.1 for x86系統(tǒng),默認(rèn)已經(jīng)安裝好rsync客戶端,路徑在/usr/bin/中。 首先,添加密碼驗(yàn)證文件 # mkdir /etc/rsyncd
# vi /etc/rsyncd/test.secrets test 然后,使用命令同步即可: rsync -azv rsync://linuxing@www./test /var/www/html/test/ --password-file=/etc/rsyncd/test.secrets
二、同步mysql數(shù)據(jù)庫(kù) 因?yàn)镸ysql服務(wù)使用Cache和緩沖區(qū)來提供對(duì)存儲(chǔ)在磁盤上的數(shù)據(jù)庫(kù)文件更新的效率,所以文件的內(nèi)容和當(dāng)前數(shù)據(jù)庫(kù)的內(nèi)容可能并不完全一致。而標(biāo)準(zhǔn)的備份程序僅僅包括對(duì)系統(tǒng)和數(shù)據(jù)文件的拷貝,這種對(duì)Mysql數(shù)據(jù)文件的備份并不能完全滿足我們的需要,因?yàn)樗荒鼙WC拷貝的文件在系統(tǒng)崩潰時(shí)能夠正常地使用。 Mysql中的工具可以對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)的備份,而且不會(huì)影響服務(wù)的效率。 Mysql數(shù)據(jù)庫(kù)版本:5.0 關(guān)于mysql 5.0使用日志恢復(fù)更詳細(xì)的介紹,可以參考mysql 5.0更新日志的問題 主機(jī): 1) 打開mysql的更新日志記錄 # cp my-huge.cnf /var/db/mysql/my.cnf
# vi /var/db/mysql/my.cnf 修改/var/db/mysql/my.cnf文件,把 引用
log-bin=mysql-bin
改為 引用
log-bin=/usr/backups/mysql/mysql-bin
建立拜訪更新日志的路徑: # mkdir /usr/backups
# mkdir /usr/backups/mysql # chown mysql:mysql /usr/backups/mysql 重新啟動(dòng)mysql服務(wù),使到其記錄更新日志生效: # /usr/local/etc/rc.d/mysql-server.sh restart
這樣數(shù)據(jù)庫(kù)的更新日志就會(huì)放在/usr/backups/mysql目錄中,我們下面就會(huì)使用它們。 為了方便更新,我們?cè)?usr/local/rsyncd.conf中建立第二個(gè)同步節(jié)點(diǎn): 引用
[mysql]
path = /usr/backups/mysql/ comment = my blog mysql data uid = mysql gid = mysql ignore errors read only = yes list = yes auth users = linuxing secrets file = /usr/local/etc/rsyncd.secrets 2)備份mysql數(shù)據(jù)庫(kù) # mysqldump -uroot -ppassword test > /usr/backups/mysql/test.sql 其中password是linuxing登陸mysql的密碼,test是需要備份的數(shù)據(jù)庫(kù); 備機(jī): 1)建立備份服務(wù)器的主數(shù)據(jù)庫(kù) # mkdir /root/mysql
# mysqladmin -uroot -ppassword create test # rsync -azv rsync://linuxing@www./mysql /root/mysql --password-file=/etc/rsyncd/test.secrets # mysql -uroot -ppassword test < /root/mysql/test.sql 到此,備份服務(wù)器已經(jīng)建立了test數(shù)據(jù)庫(kù),而且內(nèi)容為主服務(wù)器的內(nèi)容。后面,我們只需要使用日志更新即可。 2)使用更新日志建立差異備份 這樣的操作是經(jīng)常性的,所以我們可以放到計(jì)劃任務(wù)里面。這里我假設(shè)一天備份一次: # cd /etc/cron.daily
# vi mydata.cond rsync -az rsync://linuxing@www./exblog /var/www/html/test --password-file=/etc/rsyncd/test.secrets >> /tmp/mydata.log if [ $? -eq 0 ]; then echo `date` "rsync exblog data successfully!" >> /tmp/mydata.log chown -R apache.apache /var/www/html/test rsync -az rsync://linuxing@www./mysql /root/mysql --password-file=/etc/rsyncd/test.secrets >> /tmp/mydata.log if [ $? -eq 0 ]; then echo `date` "rsync mysql data successfully!" >> /tmp/mydata.log chown -R root.root /root/mysql mysql -ulinuxing -ppassword test < /root/mysql/test.sql if [ $? -eq 0 ]; then echo `date` "exblog backup database recover ok!" >> /tmp/mydata.log find /root/mysql -name "mysql-bin.0*"|xargs mysqlbinlog -d test|mysql -ulinuxing -ppassword if [ $? -eq 0 ]; then echo `date` "test database bin log recover ok!" >> /tmp/mydata.log fi fi fi fi ※2005-12-26 第一次編寫完成 ※2005-12-27 修改使用mysqlbinlog實(shí)現(xiàn)日志更新恢復(fù) 為了防止blog主機(jī)出現(xiàn)故障導(dǎo)致文件丟失,我在整理了另外一臺(tái)后備的服務(wù)器,下面就寫寫如何做它們的同步。 遇到的問題有兩個(gè):1、主機(jī)是FreeBSD,備機(jī)是Linux,使用的命令和路徑有不同;2、不單要同步文件,而且要同步mysql數(shù)據(jù)。 一、同步文件 我使用rsync服務(wù),主機(jī)做rsync服務(wù)器,備機(jī)做rsync客戶機(jī)。關(guān)于rsync的詳細(xì)命令可以參考[原]使用rsync命令同步數(shù)據(jù) 主機(jī): FreeBSD系統(tǒng),可以使用port安裝rsync,安裝完后的路徑在/usr/local/下。 修改/usr/local/etc/rsyncd.conf文件,增加: 引用
[test]
path = /usr/local/www/test/ comment = my blog data uid = www gid = www ignore errors read only = yes list = yes auth users = linuxing secrets file = /usr/local/etc/rsyncd.secrets 增加密碼驗(yàn)證文件: # cat /usr/local/etc/rsyncd.secrets linuxing:test # chown root:wheel /usr/local/etc/rsyncd.secrets # chmod 600 /usr/local/etc/rsyncd.secrets 啟動(dòng)服務(wù) # rsync --daemon
或 # /usr/local/etc/rc.d/rsyncd.sh start 查看是否已經(jīng)打開服務(wù)(端口873) # sockstat |grep 873
root rsync 1147 4 tcp4 *:873 *:* 或 # netstat -aln | grep 873 tcp4 0 0 *.873 *.* LISTEN 確認(rèn)都正常的話,使到rsync服務(wù)開機(jī)自動(dòng)啟動(dòng),在/etc/rc.conf,增加rsyncd_enable="YES"。 備機(jī): 使用的是紅旗DC Server 4.1 for x86系統(tǒng),默認(rèn)已經(jīng)安裝好rsync客戶端,路徑在/usr/bin/中。 首先,添加密碼驗(yàn)證文件 # mkdir /etc/rsyncd
# vi /etc/rsyncd/test.secrets test 然后,使用命令同步即可: rsync -azv rsync://linuxing@www./test /var/www/html/test/ --password-file=/etc/rsyncd/test.secrets
二、同步mysql數(shù)據(jù)庫(kù) 因?yàn)镸ysql服務(wù)使用Cache和緩沖區(qū)來提供對(duì)存儲(chǔ)在磁盤上的數(shù)據(jù)庫(kù)文件更新的效率,所以文件的內(nèi)容和當(dāng)前數(shù)據(jù)庫(kù)的內(nèi)容可能并不完全一致。而標(biāo)準(zhǔn)的備份程序僅僅包括對(duì)系統(tǒng)和數(shù)據(jù)文件的拷貝,這種對(duì)Mysql數(shù)據(jù)文件的備份并不能完全滿足我們的需要,因?yàn)樗荒鼙WC拷貝的文件在系統(tǒng)崩潰時(shí)能夠正常地使用。 Mysql中的工具可以對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)的備份,而且不會(huì)影響服務(wù)的效率。 Mysql數(shù)據(jù)庫(kù)版本:5.0 關(guān)于mysql 5.0使用日志恢復(fù)更詳細(xì)的介紹,可以參考mysql 5.0更新日志的問題 主機(jī): 1) 打開mysql的更新日志記錄 # cp my-huge.cnf /var/db/mysql/my.cnf
# vi /var/db/mysql/my.cnf 修改/var/db/mysql/my.cnf文件,把 引用
log-bin=mysql-bin
改為 引用
log-bin=/usr/backups/mysql/mysql-bin
建立拜訪更新日志的路徑: # mkdir /usr/backups
# mkdir /usr/backups/mysql # chown mysql:mysql /usr/backups/mysql 重新啟動(dòng)mysql服務(wù),使到其記錄更新日志生效: # /usr/local/etc/rc.d/mysql-server.sh restart
這樣數(shù)據(jù)庫(kù)的更新日志就會(huì)放在/usr/backups/mysql目錄中,我們下面就會(huì)使用它們。 為了方便更新,我們?cè)?usr/local/rsyncd.conf中建立第二個(gè)同步節(jié)點(diǎn): 引用
[mysql]
path = /usr/backups/mysql/ comment = my blog mysql data uid = mysql gid = mysql ignore errors read only = yes list = yes auth users = linuxing secrets file = /usr/local/etc/rsyncd.secrets 2)備份mysql數(shù)據(jù)庫(kù) # mysqldump -uroot -ppassword test > /usr/backups/mysql/test.sql 其中password是linuxing登陸mysql的密碼,test是需要備份的數(shù)據(jù)庫(kù); 備機(jī): 1)建立備份服務(wù)器的主數(shù)據(jù)庫(kù) # mkdir /root/mysql
# mysqladmin -uroot -ppassword create test # rsync -azv rsync://linuxing@www./mysql /root/mysql --password-file=/etc/rsyncd/test.secrets # mysql -uroot -ppassword test < /root/mysql/test.sql 到此,備份服務(wù)器已經(jīng)建立了test數(shù)據(jù)庫(kù),而且內(nèi)容為主服務(wù)器的內(nèi)容。后面,我們只需要使用日志更新即可。 2)使用更新日志建立差異備份 這樣的操作是經(jīng)常性的,所以我們可以放到計(jì)劃任務(wù)里面。這里我假設(shè)一天備份一次: # cd /etc/cron.daily
# vi mydata.cond rsync -az rsync://linuxing@www./exblog /var/www/html/test --password-file=/etc/rsyncd/test.secrets >> /tmp/mydata.log if [ $? -eq 0 ]; then echo `date` "rsync exblog data successfully!" >> /tmp/mydata.log chown -R apache.apache /var/www/html/test rsync -az rsync://linuxing@www./mysql /root/mysql --password-file=/etc/rsyncd/test.secrets >> /tmp/mydata.log if [ $? -eq 0 ]; then echo `date` "rsync mysql data successfully!" >> /tmp/mydata.log chown -R root.root /root/mysql mysql -ulinuxing -ppassword test < /root/mysql/test.sql if [ $? -eq 0 ]; then echo `date` "exblog backup database recover ok!" >> /tmp/mydata.log find /root/mysql -name "mysql-bin.0*"|xargs mysqlbinlog -d test|mysql -ulinuxing -ppassword if [ $? -eq 0 ]; then echo `date` "test database bin log recover ok!" >> /tmp/mydata.log fi fi fi fi ※2005-12-26 第一次編寫完成 ※2005-12-27 修改使用mysqlbinlog實(shí)現(xiàn)日志更新恢復(fù) 為了防止blog主機(jī)出現(xiàn)故障導(dǎo)致文件丟失,我在整理了另外一臺(tái)后備的服務(wù)器,下面就寫寫如何做它們的同步。 遇到的問題有兩個(gè):1、主機(jī)是FreeBSD,備機(jī)是Linux,使用的命令和路徑有不同;2、不單要同步文件,而且要同步mysql數(shù)據(jù)。 一、同步文件 我使用rsync服務(wù),主機(jī)做rsync服務(wù)器,備機(jī)做rsync客戶機(jī)。關(guān)于rsync的詳細(xì)命令可以參考[原]使用rsync命令同步數(shù)據(jù) 主機(jī): FreeBSD系統(tǒng),可以使用port安裝rsync,安裝完后的路徑在/usr/local/下。 修改/usr/local/etc/rsyncd.conf文件,增加: 引用
[test]
path = /usr/local/www/test/ comment = my blog data uid = www gid = www ignore errors read only = yes list = yes auth users = linuxing secrets file = /usr/local/etc/rsyncd.secrets 增加密碼驗(yàn)證文件: # cat /usr/local/etc/rsyncd.secrets linuxing:test # chown root:wheel /usr/local/etc/rsyncd.secrets # chmod 600 /usr/local/etc/rsyncd.secrets 啟動(dòng)服務(wù) # rsync --daemon
或 # /usr/local/etc/rc.d/rsyncd.sh start 查看是否已經(jīng)打開服務(wù)(端口873) # sockstat |grep 873
root rsync 1147 4 tcp4 *:873 *:* 或 # netstat -aln | grep 873 tcp4 0 0 *.873 *.* LISTEN 確認(rèn)都正常的話,使到rsync服務(wù)開機(jī)自動(dòng)啟動(dòng),在/etc/rc.conf,增加rsyncd_enable="YES"。 備機(jī): 使用的是紅旗DC Server 4.1 for x86系統(tǒng),默認(rèn)已經(jīng)安裝好rsync客戶端,路徑在/usr/bin/中。 首先,添加密碼驗(yàn)證文件 # mkdir /etc/rsyncd
# vi /etc/rsyncd/test.secrets test 然后,使用命令同步即可: rsync -azv rsync://linuxing@www./test /var/www/html/test/ --password-file=/etc/rsyncd/test.secrets
二、同步mysql數(shù)據(jù)庫(kù) 因?yàn)镸ysql服務(wù)使用Cache和緩沖區(qū)來提供對(duì)存儲(chǔ)在磁盤上的數(shù)據(jù)庫(kù)文件更新的效率,所以文件的內(nèi)容和當(dāng)前數(shù)據(jù)庫(kù)的內(nèi)容可能并不完全一致。而標(biāo)準(zhǔn)的備份程序僅僅包括對(duì)系統(tǒng)和數(shù)據(jù)文件的拷貝,這種對(duì)Mysql數(shù)據(jù)文件的備份并不能完全滿足我們的需要,因?yàn)樗荒鼙WC拷貝的文件在系統(tǒng)崩潰時(shí)能夠正常地使用。 Mysql中的工具可以對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)的備份,而且不會(huì)影響服務(wù)的效率。 Mysql數(shù)據(jù)庫(kù)版本:5.0 關(guān)于mysql 5.0使用日志恢復(fù)更詳細(xì)的介紹,可以參考mysql 5.0更新日志的問題 主機(jī): 1) 打開mysql的更新日志記錄 # cp my-huge.cnf /var/db/mysql/my.cnf
# vi /var/db/mysql/my.cnf 修改/var/db/mysql/my.cnf文件,把 引用
log-bin=mysql-bin
改為 引用
log-bin=/usr/backups/mysql/mysql-bin
建立拜訪更新日志的路徑: # mkdir /usr/backups
# mkdir /usr/backups/mysql # chown mysql:mysql /usr/backups/mysql 重新啟動(dòng)mysql服務(wù),使到其記錄更新日志生效: # /usr/local/etc/rc.d/mysql-server.sh restart
這樣數(shù)據(jù)庫(kù)的更新日志就會(huì)放在/usr/backups/mysql目錄中,我們下面就會(huì)使用它們。 為了方便更新,我們?cè)?usr/local/rsyncd.conf中建立第二個(gè)同步節(jié)點(diǎn): 引用
[mysql]
path = /usr/backups/mysql/ comment = my blog mysql data uid = mysql gid = mysql ignore errors read only = yes list = yes auth users = linuxing secrets file = /usr/local/etc/rsyncd.secrets 2)備份mysql數(shù)據(jù)庫(kù) # mysqldump -uroot -ppassword test > /usr/backups/mysql/test.sql 其中password是linuxing登陸mysql的密碼,test是需要備份的數(shù)據(jù)庫(kù); 備機(jī): 1)建立備份服務(wù)器的主數(shù)據(jù)庫(kù) # mkdir /root/mysql
# mysqladmin -uroot -ppassword create test # rsync -azv rsync://linuxing@www./mysql /root/mysql --password-file=/etc/rsyncd/test.secrets # mysql -uroot -ppassword test < /root/mysql/test.sql 到此,備份服務(wù)器已經(jīng)建立了test數(shù)據(jù)庫(kù),而且內(nèi)容為主服務(wù)器的內(nèi)容。后面,我們只需要使用日志更新即可。 2)使用更新日志建立差異備份 這樣的操作是經(jīng)常性的,所以我們可以放到計(jì)劃任務(wù)里面。這里我假設(shè)一天備份一次: # cd /etc/cron.daily
# vi mydata.cond rsync -az rsync://linuxing@www./exblog /var/www/html/test --password-file=/etc/rsyncd/test.secrets >> /tmp/mydata.log if [ $? -eq 0 ]; then echo `date` "rsync exblog data successfully!" >> /tmp/mydata.log chown -R apache.apache /var/www/html/test rsync -az rsync://linuxing@www./mysql /root/mysql --password-file=/etc/rsyncd/test.secrets >> /tmp/mydata.log if [ $? -eq 0 ]; then echo `date` "rsync mysql data successfully!" >> /tmp/mydata.log chown -R root.root /root/mysql mysql -ulinuxing -ppassword test < /root/mysql/test.sql if [ $? -eq 0 ]; then echo `date` "exblog backup database recover ok!" >> /tmp/mydata.log find /root/mysql -name "mysql-bin.0*"|xargs mysqlbinlog -d test|mysql -ulinuxing -ppassword if [ $? -eq 0 ]; then echo `date` "exblog database bin log recover ok!" >> /tmp/mydata.log fi fi fi fi |
|