利用percona-xtrabackup快速搭建MySQL資料庫主從複製

shy丶gril發表於2016-05-24
原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本宣告。否則將追究法律責任。http://dgd2010.blog.51cto.com/1539422/1709183

應用場景:

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執行時報錯,說找不到某些執行檔案。

可參考:

1
2
3
4
5
6
7
8
9
10
11
# 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這個工具包,只能採用手動安裝的方式。

1
2
3
4
5
6
7
8
9
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。

1
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    

1
2
3
egrep `(log-bin|server-id)` /etc/my.cnf    
或    
grep -E `(log-bin|server-id)` /etc/my.cnf

2.在主庫伺服器上使用innobackupex工具備份資料庫並將資料庫備份檔案傳輸到從庫機器的磁碟上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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 vivo@192.168.100.126:/data    
rm -rf /data/mysql-master_data

3.在從庫伺服器上使用innobackupex工具恢復從主庫伺服器得來的資料庫備份檔案    

1
2
3
4
5
6
7
8
9
# 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.配置從庫,啟用同步程式和觀察結果    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 工具單機備份資料庫和恢復資料庫的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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 SQLhttp://blog.sina.com.cn/s/blog_4cb400450100ntu6.html

tag:MySQL資料庫主從配置,innobackupex 備份恢復資料庫,xtrabackup備份恢復資料庫,innobackupex 備份還原資料庫,xtrabackup備份還原資料庫

–end–

本文出自 “通訊,我的最愛” 部落格,請務必保留此出處http://dgd2010.blog.51cto.com/1539422/1709183


相關文章