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;解決);
注意:
伺服器a和伺服器b最好采用相近的硬體配置和資料庫安裝參數。如果資料庫都是編譯安裝的,那需要注意配置libmysqlclient18,否則會導緻手動安裝的percona-xtrabackup運作時報錯,說找不到某些運作檔案。
可參考:
1
2
3
4
5
6
7
8
9
10
11
<code># set mysql library </code>
<code>ln</code> <code>-s </code><code>/usr/local/mysql/lib/libmysqlclient</code><code>.so.18.0.0 </code><code>/usr/lib64/libmysqlclient</code><code>.so.18.0.0 </code>
<code>ln</code> <code>-s </code><code>/usr/local/mysql/lib/libmysqlclient</code><code>.so.18.0.0 </code><code>/usr/lib64/libmysqlclient</code><code>.so.18 </code>
<code>ln</code> <code>-s </code><code>/usr/local/mysql/lib/libmysqlclient</code><code>.so.18.0.0 </code><code>/usr/lib64/libmysqlclient</code><code>.so </code>
<code>ls</code> <code>-l </code><code>/usr/lib64/libmysqlclient</code><code>.so.18.0.0 </code>
<code>ls</code> <code>-l </code><code>/usr/lib64/libmysqlclient</code><code>.so.18 </code>
<code>ls</code> <code>-l </code><code>/usr/lib64/libmysqlclient</code><code>.so </code>
<code>vim </code><code>/etc/ld</code><code>.so.conf.d</code><code>/mysql-x86_64</code><code>.conf </code>
<code> </code><code>/usr/lib64/mysql</code>
<code> </code><code>/usr/local/mysql/lib</code>
<code>ldconfig</code>
percona-xtrabackup是一個開源免費的mysql備份工具,支援熱備(也就是說備份過程中不影響資料庫使用,io和部分cpu資源還是需要的,但一般來說對資料庫伺服器的影響并不是很大,特别是當資料庫的資料目錄和備份目錄是所在磁盤是高性能磁盤或者不同的磁盤時,對其影響微乎甚微)。
它的備份原理與冷copy資料庫資料庫目錄基本類似,但做的更精細一下,比如自動忽略某些不需要的日志、檔案等。
centos預設源中沒有percona-xtrabackup這個工具包,隻能采用手動安裝的方式。
<code>cd</code>
<code>wget -c https:</code><code>//www</code><code>.percona.com</code><code>/downloads/xtrabackup/percona-xtrabackup-2</code><code>.2.12</code><code>/binary/tarball/percona-xtrabackup-2</code><code>.2.12-linux-x86_64.</code><code>tar</code><code>.gz </code>
<code>tar</code> <code>zxf percona-xtrabackup-2.2.12-linux-x86_64.</code><code>tar</code><code>.gz </code>
<code>cd</code> <code>percona-xtrabackup-2.2.12-linux-x86_64</code><code>/bin</code>
<code>yum -y </code><code>install</code> <code>perl perl-time-hires </code>
<code>ln</code> <code>-s </code><code>/root/percona-xtrabackup-2</code><code>.2.12-linux-x86_64</code><code>/bin/innobackupex</code> <code>/usr/bin/innobackupex</code>
<code>ln</code> <code>-s </code><code>/root/percona-xtrabackup-2</code><code>.2.12-linux-x86_64</code><code>/bin/xbcrypt</code> <code>/usr/bin/xbcrypt</code>
<code>ln</code> <code>-s </code><code>/root/percona-xtrabackup-2</code><code>.2.12-linux-x86_64</code><code>/bin/xbstream</code> <code>/usr/bin/xbstream</code>
<code>ln</code> <code>-s </code><code>/root/percona-xtrabackup-2</code><code>.2.12-linux-x86_64</code><code>/bin/xtrabackup</code> <code>/usr/bin/xtrabackup</code>
ubuntu預設提供percona-xtrabackup工具,可以直接使用apt-get進行安裝,apt-get -y install percona-xtrabackup。
<code>apt-get -y </code><code>install</code> <code>percona-xtrabackup</code>
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
<code>egrep</code> <code>'(log-bin|server-id)'</code> <code>/etc/my</code><code>.cnf </code>
<code>或 </code>
<code>grep</code> <code>-e </code><code>'(log-bin|server-id)'</code> <code>/etc/my</code><code>.cnf</code>
2.在主庫伺服器上使用innobackupex工具備份資料庫并将資料庫備份檔案傳輸到從庫機器的磁盤上
12
13
14
15
16
17
18
19
<code># for master </code>
<code>apt-get </code><code>install</code> <code>percona-xtrabackup </code>
<code>mv</code> <code>/etc/mysql/my</code><code>.cnf </code><code>/etc/mysql/my</code><code>.cnf~ || </code><code>mv</code> <code>/etc/mysql</code> <code>/etc/mysql</code><code>~ </code>
<code>service mysql status </code>
<code># df -h </code>
<code># du -sh /data/mysql/data </code>
<code># 觀察一下磁盤使用情況,以及/data/mysql/data mysql資料庫資料目錄的占用空間的大小,評估将這些檔案scp到從庫伺服器的哪個位置等等 </code>
<code>cd</code> <code>/data</code>
<code>mkdir</code> <code>-p </code><code>/data/mysql-master_data</code>
<code># which innobackupex </code>
<code># 為了避免ssh連接配接丢失,采用nohup執行 </code>
<code>nohup</code> <code>/usr/bin/innobackupex</code> <code>--user=root --password=password </code><code>/data/mysql-master_data</code> <code>& </code>
<code>#上述指令執行成功後會在/data/mysql-master_data目錄下得到一個以時間格式生成的新目錄的名字,如/data/mysql-master_data/2015-11-03_12-39-51 </code>
<code># make sure user privileges on scp target </code>
<code># sshpass - noninteractive ssh password provider </code>
<code>apt-get -y </code><code>install</code> <code>sshpass </code>
<code># 為了避免ssh連接配接丢失,可以采用nohup執行 </code>
<code>sshpass -ppassword </code><code>scp</code> <code>-o stricthostkeychecking=no -p22 -r </code><code>/data/mysql-master_data</code> <code>[email protected]:</code><code>/data</code>
<code>rm</code> <code>-rf </code><code>/data/mysql-master_data</code>
3.在從庫伺服器上使用innobackupex工具恢複從主庫伺服器得來的資料庫備份檔案
<code># for slave </code>
<code>#此處參考文章下面的“xtrabackup備份原理剖析”參考了解為什麼需要apply-log </code>
<code>innobackupex --apply-log </code><code>/data/mysql-master_data/2015-11-03_12-39-51</code>
<code>#檢視“/data/mysql-master_data/2015-11-03_12-39-51”内的xtrabackup_binlog_info檔案,記錄bin-log filename和pos值,以便切換master。 </code>
<code>service mysql stop </code>
<code>#清空資料庫資料目錄 </code>
<code>rm</code> <code>-rf </code><code>/data/mysql/data/</code><code>* </code>
<code>innobackupex --copy-back </code><code>/data/mysql-master_data/2015-11-03_12-39-51</code>
<code>chown</code> <code>mysql:mysql -r </code><code>/data/mysql/data/</code>
4.配置從庫,啟用同步程序和觀察結果
<code>service mysql start </code>
<code>mysql -uroot -ppassword </code>
<code>#如果從庫的my.cnf中設定了開啟二進制日志,為了程式員的某些便利,啟用log_bin_trust_function_creators,進一步了解可以參考下方的“mysql 函數限制”和“mysql建立方法錯誤:this function has none of deterministic, no sql” </code>
<code>show variables like </code><code>'%func%'</code><code>; </code>
<code>set global log_bin_trust_function_creators=1; </code>
<code>change master to master_host=</code><code>'192.168.100.132'</code><code>,master_user=</code><code>'root'</code><code>,master_password=</code><code>'password'</code><code>,master_log_file=</code><code>'mysql-bin.000665'</code><code>,master_log_pos=51145611; </code>
<code>start slave; </code>
<code>show slave status \g; </code>
<code>#注意觀察slave_io_running: yes和slave_sql_running: yes,隻有都是yes的時候才表示正确 </code>
<code># 如果原先主庫上配置有event則需要在從庫上停掉,畢竟從庫不是用于做這個(含有寫入操作)的 </code>
<code>show variables like </code><code>'event_scheduler'</code><code>; </code>
<code>set global event_scheduler=0; </code>
<code>quit; </code>
<code>rm</code> <code>-rf </code><code>/data/mysql-master_data</code>
<code># end</code>
<code># backup </code>
<code>nohup</code> <code>/usr/bin/innobackupex</code> <code>--user=root --password=password</code><code>/data/mysql-master_data</code> <code>& </code>
<code>ls</code> <code>/data/mysql/data/</code> <code>-alh </code>
<code>ls</code> <code>/etc/my</code><code>.cnf -l</code>
<code># recovery </code>
<code>innobackupex --apply-log </code><code>/data/mysql-master_data/2015-11-03_11-21-10/</code>
<code>innobackupex --copy-back </code><code>/data/mysql-master_data/2015-11-03_11-21-10/</code>
<code>chown</code> <code>mysql:mysql -r </code><code>/data/mysql/data/</code>
tag:mysql資料庫主從配置,innobackupex 備份恢複資料庫,xtrabackup備份恢複資料庫,innobackupex 備份還原資料庫,xtrabackup備份還原資料庫
--end--