標籤:mysql資料庫主從配置 innobackupex 備份恢複資料庫 xtrabackup備份恢複資料庫 innobackupex 備份還原資料庫 xtrabackup備份還原資料庫
應用情境:
Linux伺服器A運行MySQL服務,並開啟了log-bin(log-bin = mysql-bin)和指定了server-id(server-id = 1);
Linux伺服器B也以與伺服器A同樣的方式(不同樣也可以,參考下面的“注意”)安裝了MySQL服務,可開啟log-bin也可不開啟log-bin,如果開啟了log-bin則需要注意MySQL function的限制問題(可通過set global log_bin_trust_function_creators=TRUE;解決);
複製模式:伺服器B與伺服器A的MySQL完全同步(推薦這麼做,參考:《記一次因磁碟塊預設保留原則導致的資料庫匯入失敗問題》文章中的最後一段關於資料庫HA的描述)。
注意:
伺服器A和伺服器B最好採用相近的硬體設定和資料庫安裝參數。如果資料庫都是編譯安裝的,那需要注意配置libmysqlclient18,否則會導致手動安裝的percona-xtrabackup運行時報錯,說找不到某些運行檔案。
可參考:
# Set mysql library ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so.18.0.0 ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so.18 ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so ls -l /usr/lib64/libmysqlclient.so.18.0.0 ls -l /usr/lib64/libmysqlclient.so.18 ls -l /usr/lib64/libmysqlclient.so vim /etc/ld.so.conf.d/mysql-x86_64.conf /usr/lib64/mysql /usr/local/mysql/lib ldconfig
工具知識:
percona-xtrabackup是一個開源免費的MySQL備份工具,支援熱備(也就是說備份過程中不影響資料庫使用,io和部分cpu資源還是需要的,但一般來說對資料庫伺服器的影響並不是很大,特別是當資料庫的資料目錄和備份目錄是所在磁碟是高效能磁碟或者不同的磁碟時,對其影響微乎甚微)。
它的備份原理與冷copy資料庫資料庫目錄基本類似,但做的更精細一下,比如自動忽略某些不需要的日誌、檔案等。
CentOS預設源中沒有percona-xtrabackup這個工具包,只能採用手動安裝的方式。
cd wget -c https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.12/binary/tarball/percona-xtrabackup-2.2.12-Linux-x86_64.tar.gz tar zxf percona-xtrabackup-2.2.12-Linux-x86_64.tar.gz cd percona-xtrabackup-2.2.12-Linux-x86_64/bin yum -y install perl perl-Time-HiRes ln -s /root/percona-xtrabackup-2.2.12-Linux-x86_64/bin/innobackupex /usr/bin/innobackupex ln -s /root/percona-xtrabackup-2.2.12-Linux-x86_64/bin/xbcrypt /usr/bin/xbcrypt ln -s /root/percona-xtrabackup-2.2.12-Linux-x86_64/bin/xbstream /usr/bin/xbstream ln -s /root/percona-xtrabackup-2.2.12-Linux-x86_64/bin/xtrabackup /usr/bin/xtrabackup
Ubuntu預設提供percona-xtrabackup工具,可以直接使用apt-get進行安裝,apt-get -y install percona-xtrabackup。
apt-get -y install percona-xtrabackup
注意:
Ubuntu系統中使用apt-get安裝percona-xtrabackup工具時會導致libmysqlclient18 mysql-common這兩個包也會被安裝(libaio1 libdbd-mysql-perl libdbi-perl libmysqlclient18 mysql-common percona-xtrabackup),mysql-common這個包會帶進/etc/mysql/my.cnf,也許會導致service mysql {command}不能正常使用,可以將/etc/mysql/my.cnf改名或者將/etc/mysql目錄改名,消除影響。如果資料庫不是採用編譯安裝而是採用apt-get安裝的話,則可以注意一下,看看是否有影響。
操作步驟:
1.確定主從資料庫上都正確配置了log-bin和分配了不同的server-id
egrep ‘(log-bin|server-id)‘ /etc/my.cnf 或 grep -E ‘(log-bin|server-id)‘ /etc/my.cnf
2.在主程式庫伺服器上使用innobackupex工具備份資料庫並將Database Backup檔案傳輸到從庫機器的磁碟上
# for master apt-get install percona-xtrabackup mv /etc/mysql/my.cnf /etc/mysql/my.cnf~ || mv /etc/mysql /etc/mysql~ service mysql status # df -h # du -sh /data/mysql/data # 觀察一下磁碟使用方式,以及/data/mysql/data MySQL資料庫資料目錄的佔用空間的大小,評估將這些檔案scp到從程式庫伺服器的哪個位置等等 cd /data mkdir -p /data/mysql-master_data # which innobackupex # 為了避免ssh串連丟失,採用nohup執行 nohup /usr/bin/innobackupex --user=root --password=password /data/mysql-master_data & #上述命令執行成功後會在/data/mysql-master_data目錄下得到一個以時間格式產生的新目錄的名字,如/data/mysql-master_data/2015-11-03_12-39-51 # make sure user privileges on scp target # sshpass - noninteractive ssh password provider apt-get -y install sshpass # 為了避免ssh串連丟失,可以採用nohup執行 sshpass -ppassword scp -o StrictHostKeyChecking=no -P22 -r /data/mysql-master_data [email protected]:/data rm -rf /data/mysql-master_data
3.在從程式庫伺服器上使用innobackupex工具恢複從主程式庫伺服器得來的Database Backup檔案
# for slave #此處參考文章下面的“xtraBackup備份原理剖析”參考瞭解為什麼需要apply-log innobackupex --apply-log /data/mysql-master_data/2015-11-03_12-39-51 #查看“/data/mysql-master_data/2015-11-03_12-39-51”內的xtrabackup_binlog_info檔案,記錄bin-log filename和pos值,以便切換master。 service mysql stop #清空資料庫資料目錄 rm -rf /data/mysql/data/* innobackupex --copy-back /data/mysql-master_data/2015-11-03_12-39-51 chown mysql:mysql -R /data/mysql/data/
4.配置從庫,啟用同步進程和觀察結果
service mysql start mysql -uroot -ppassword #如果從庫的my.cnf中設定了開啟二進位日誌,為了程式員的某些便利,啟用log_bin_trust_function_creators,進一步瞭解可以參考下方的“MySQL 函數限制”和“MySQL建立方法錯誤:This function has none of DETERMINISTIC, NO SQL” SHOW VARIABLES LIKE ‘%func%‘; SET GLOBAL log_bin_trust_function_creators=1; SHOW VARIABLES LIKE ‘%func%‘; CHANGE MASTER TO MASTER_HOST=‘192.168.100.132‘,MASTER_USER=‘root‘,MASTER_PASSWORD=‘password‘,MASTER_LOG_FILE=‘mysql-bin.000665‘,MASTER_LOG_POS=51145611; START SLAVE; SHOW SLAVE STATUS \G; #注意觀察Slave_IO_Running: Yes和Slave_SQL_Running: Yes,只有都是Yes的時候才表示正確 # 如果原先主庫上配置有event則需要在從庫上停掉,畢竟從庫不是用於做這個(含有寫入操作)的 SHOW VARIABLES LIKE ‘event_scheduler‘; SET GLOBAL event_scheduler=0; SHOW VARIABLES LIKE ‘event_scheduler‘; QUIT; rm -rf /data/mysql-master_data # end
附帶,利用innobackupex 工具單機備份資料庫和恢複資料庫的例子:
# backup cd /data mkdir -p /data/mysql-master_data nohup /usr/bin/innobackupex --user=root --password=password/data/mysql-master_data & ls /data/mysql/data/ -alh ls /etc/my.cnf -l# recovery service mysql stop service mysql status innobackupex --apply-log /data/mysql-master_data/2015-11-03_11-21-10/ rm -rf /data/mysql/data/* innobackupex --copy-back /data/mysql-master_data/2015-11-03_11-21-10/ chown mysql:mysql -R /data/mysql/data/ service mysql start rm -rf /data/mysql-master_data
參考:
percona-xtrabackup 介紹 https://www.percona.com/software/mysql-database/percona-xtrabackup
xtraBackup備份原理剖析 http://blog.chinaunix.net/uid-20785090-id-4212816.html
MySQL 複製選項 http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html
MySQL 函數限制 http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_log_bin_trust_function_creators
MySQL建立方法錯誤:This function has none of DETERMINISTIC, NO SQL http://blog.sina.com.cn/s/blog_4cb400450100ntu6.html
tag:MySQL資料庫主從配置,innobackupex 備份恢複資料庫,xtrabackup備份恢複資料庫,innobackupex 備份還原資料庫,xtrabackup備份還原資料庫
--end--
本文出自 “通訊,我的最愛” 部落格,請務必保留此出處http://dgd2010.blog.51cto.com/1539422/1709183
利用percona-xtrabackup快速搭建MySQL資料庫主從複製