使用XtraBackup備份MySQL

一、使用每表單個表空間

這樣ibdata1文件不會過大。

xtrabackup可以使用部分備份了,需要在一個表一個文件的狀況下才能使用。

1.在使用xtrabackup之前,我們需要查看我們當前mysql是否是使用每表單個表空間,如果不是則必須將其修改爲每表單獨表空間:


1

mysql> show global variables like '%innodb_file_p%';

2

+-----------------------+-------+

3

| Variable_name | Value |

4

+-----------------------+-------+

5

| innodb_file_per_table | OFF |

6

+-----------------------+-------+

7

1 row in set (0.00 sec)

這裏是關閉狀態,由此我們要啓動這個功能,將來一旦要用到xtrabackup或各種高級功能的話建議剛安裝mysql的時候直接將默認配置去寫進配置文件,中途再更改的話會非常麻煩。


2.重新導出導入數據,修改爲每表一個文件:


1

[root@test2 ~]#mysqldump -uroot --lock-all-tables --all-databases --master-data=2 --events> ./1.sql

2

關閉數據庫

3

[root@test2 ~]#/etc/init.d/mysqld stop

4

Shutting down MySQL.. SUCCESS!

5

編輯配置文件加入以下參數

6

[root@test2 ~]# vim/etc/my.cnf

7

innodb_file_per_table= 1

8

而後刪除數據文件並重新初始化

9

[root@test2 data]#pwd

10

/mydata/data

11

刪除所有數據文件

12

[root@test2 data]# rm -fr *

13

初始化mysql

14

[root@test mysql]#pwd

15

/usr/local/mysql

16

[root@test mysql]# scripts/mysql_install_db --user=mysql--datadir=/mydata/data/ --basedir=/usr/local/mysql/

17

[root@test mysql]#/etc/init.d/mysqld start

18

再次查看是否是每表單獨表空間

19

mysql> showglobal variables like '%innodb_file_per%';

20

+-----------------------+-------+

21

|Variable_name | Value |

22

+-----------------------+-------+

23

|innodb_file_per_table | ON |

24

+-----------------------+-------+

25

1 row in set (0.00sec)

26

恢復數據

27

mysql> source~/1.sql

28

[root@test2 data]#ll wpdb/

29

total 220

30

-rw-r--r--. 1 mysqlmysql 61 Apr 6 11:05 db.opt

31

-rw-r--r--.1 mysql mysql 8646 Apr 6 11:05 students.frm

32

-rw-r--r--.1 mysql mysql 98304 Apr 6 11:05students.ibd

33

-rw-r--r--. 1 mysql mysql 8556 Apr 6 11:05 tb4.frm

34

-rw-r--r--. 1 mysql mysql 98304 Apr 6 11:05 tb4.ibd

35

如上所示每個表都有單獨對應的表空間了

36


3.指定datadir:


1

vim /etc/my.cnf

2

添加一行:

3

datadir = /data/server/mysql/data

二、安裝percona-xtrabackup


1

解決依賴關係

2

[root@test ~]# yum-y install libaio perl-Time-HiRes perl-DBD-MySQL perl-IO-Socket-SSL

安裝percona-xtrabackup:

1.rpm

[root@test2 tools]#rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm

使用wget下載rpm包,然後通過rpm包安裝

參考:http://www.cnblogs.com/cosiray/archive/2012/03/02/2376595.html

參考:http://blog.163.com/ji_1006/blog/static/10612341201382355716623/

2.yum


1

自動

2

$ rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

3

然後會看到:

4

Retrieving http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

5

Preparing...                ########################################### [100%]

6

   1:percona-release        ########################################### [100%]

7

手動

8

[percona]

9

name = CentOS $releasever - Percona

10

baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/

11

enabled = 1

12

gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona

13

gpgcheck = 1

14

測試安裝庫

15

使用yum list | grep percona來確保安裝

16

yum list | grep percona

三、使用percona-xtrabackup

innobackupex是perl腳本對xtrabackup的封裝,和功能擴展。

1.配置權限


1

grant RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'back'@'localhost'identified by 'back';

2.創建全備


1

innobackupex --user=back --password=back --no-timestamp /tmp/mysqlback/

內部機制:在備份的時候innobackupex會調用xtrabackup來備份innodb表,並複製所有的表定義,其他引擎的表(MyISAM,MERGE,CSV,ARCHIVE)

--no-timestamp,指定了這個選項備份會直接備份在BACKUP-DIR,不再創建時間戳文件夾。

--default-file,指定配置文件,用來配置innobackupex的選線。


3.使用innobackupex預備全備(備份好了,先不要做這個,直接保存。只有需要直接用來還原時候做這個)


1

innobackupex --apply-lop mysqlback/

--user-memory:指定預備階段可使用的內存,內存多則速度快,默認爲10MB


1

innobackupex --apply-log --use-memory=4G /path/to/BACKUP-DIR

4.全備還原

1)停止服務:

service mysqld stop

2) 刪除datadir目錄數據

rm -rf data/*

3) 使用innobackupex --copy-back來還原備份,會根據my.cnf複製所有備份到datadir下:


1

<span data-wiz-span="data-wiz-span" style="font-size: 0.833rem;">innobackupex --copy-back mysqlback/</span>

注:datadir必須是爲空的,innobackupex –copy-back不會覆蓋已存在的文件,還要注意,還原時需要先關閉服務,如果服務是啓動的,那麼就不能還原到datadir。

4) 修改數據的所有者和權限


1

<span data-wiz-span="data-wiz-span" style="font-size: 0.833rem;"> chown -R mysql:mysql data/</span>

5) 啓動服務

service mysqld start

5.創建增量備份

在創建增量備份之前需要一個全備,不然增量備份是沒有意義的.


1

innobackupex /data/backups

創建第一個增量備份


1

<span data-wiz-span="data-wiz-span" style="font-size: 0.833rem;">innobackupex --incremental /data/backups --incremental-basedir=BASEDIR</span>

6.還原增量備份

在全備上,使用—redo-only只做已提交事務,不回滾未提交事務


1

<span data-wiz-span="data-wiz-span" style="font-size: 0.833rem;">innobackupex --apply-log --redo-only BASE-DIR</span>

應用第一個增量備份


1

<span data-wiz-span="data-wiz-span" style="font-size: 0.833rem;">innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1</span>

回滾未提交事務


1

<span data-wiz-span="data-wiz-span" style="font-size: 0.833rem;">innobackupex --apply-log BASE-DIR</span>

還原增量備份,還原增量備份其實和還原全備一樣


1

innobackupex --copy-back BASE-DIR

6. 單表備份:

備份單表:


1

innobackupex --user=root --password=simlinux.com  --defaults-file=/etc/my.cnf --include='se.searchaccount' --slave-info --safe-slave-backup --stream=tar /data/backup > /data/backup/searchaccount.tar.gz

    多個表:  --include='test.*|pms.*'

複製到其他服務器後,解壓:


1

tar -ixf searchaccount.tar.gz -C /data/databak/

innobackupex預備:


1

innobackupex --apply-log --export /data/databak

7.單表還原:

定義表,先創建一個表,表結構需要和被還原的一樣 (若是表已存在則不需要創建)


1

CREATE TABLE `searchaccount`...

然後discard表空間 (discard完表空間後再複製文件過來,再import,這樣就不需要重啓


1

mysql > ALTER TABLE se.searchaccount DISCARD TABLESPACE;

文件複製到databdir相應的目錄下(注意文件的所有者和文件權限),mysql需要.ibd和.cfg文件,mysql 5.6之後可以不使用cfg來進行import,XtraDB需要.ibd和.exp,mariadb 10.0可以直接通過ibd和frm文件import


1

cp /data/databak/se/{searchaccount.ibd,searchaccount.cfg} /usr/local/mysql/data/se/


1

chown mysql.mysql /usr/local/mysql/data/se/

然後import表空間


1

mysql > ALTER TABLE se.searchaccount IMPORT TABLESPACE;

8.使用xbstream流備份

1

 innobackupex --stream=xbstream /root/backup/ > /root/backup/backup.xbstream

9.使用tar備份


1

innobackupex --stream=tar ./ > /root/backup/out.tar

10.使用tar流並備份到其他服務器

1

ssh-keygen

2

ssh-copy-id -i [email protected]


1

 innobackupex --stream=tar ./ | gzip | ssh user@destination "cat - > /data/backup.tar"

加密碼


1

innobackupex --stream=tar ./ | gzip | sshpass -p 'root123' ssh user@destination "cat - > /data/backup.tar"

11.壓縮流


1

 innobackupex --stream=tar ./ | gzip - > backup.tar.gz

12.提取tar流,需要加i參數


1

 tar -xizf backup.tar.gz

參考:

innobackupex --user=root --password=root --stream=tar ./ | gzip | sshpass -p 'root123' ssh [email protected] "cat - > /usr/programs/xtraback/backup.tar.gz"


innobackupex --defaults-file=/etc/my.cnf --user=root --password='123' --host=localhost --rsync --compress --compress-threads=5 --compress-chunk-size=64K --slave-info /root


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章