多種方法備份Mysql資料庫

來源:互聯網
上載者:User

標籤:mysql   備份與恢複   xtrabackup   

 前言:Mysql資料庫的備份是重中之重,在生產過程中,資料庫會因硬體故障,軟體故障,駭客攻擊,誤操作等造成資料丟失,但經過精密的備份,完全能把資料恢複過來.



一,備份工具

這裡介紹幾種常用的備份方式

cp:物理備份工具, 適用於所有的儲存引擎, 冷備、完全備份、部份備份 

mysqldump:邏輯備份工具, 適用於所有的儲存引擎, 支援溫備、完全備份、部份備份、對於InnoDB儲存引擎支援熱備

xtrabackup:一款非常強大的InnoDB/XtraDB熱備工具, 支援完全備份、增量備份, 



二,cp備份與恢複

先查看資料,我們用test庫裡的student表實驗

mysql> select * from test.student;+------+------+| id   | name |+------+------+|    1 | a    |+------+------+1 row in set (0.00 sec)

拷貝mysql資料到指定目錄

mkdir  /backupcp -a /var/lib/mysql/*  /backup

類比遺失資料,刪除mysql資料

rm -rf /var/lib/mysql/*

重啟資料庫,探索資料丟失(這裡是yum安裝能直接重啟資料庫,如果是編譯安裝還需要初始化)

service  mysqld restartmysql> select * from test.student;ERROR 1146 (42S02): Table ‘test.student‘ doesn‘t existmysql>

把備份的資料還原到資料目錄

cp -a /backup/*  /var/lib/mysql/

登入資料庫,探索資料已經還原回來了

mysql> select * from test.student;+------+------+| id   | name |+------+------+|    1 | a    |+------+------+1 row in set (0.00 sec)mysql>
三,mysqldump備份與恢複

先查看資料,我們用test庫裡的student表實驗

mysql> select * from test.student;+------+------+| id   | name |+------+------+|    1 | a    ||    2 | b    |+------+------+2 rows in set (0.00 sec)

修改my.cnf,添加log_bin,重啟資料庫

vim /etc/my.cnf[mysqld]log_bin=mysql-binservice  mysqld  restart

利用Mysqldump備份資料,及參數說明

mysqldump  -uroot   -A  --events   --master-data=2  --single-transaction   >/opt/all.sql-A  全備,恢複時不需要建立庫--events  備份時間調度器--master-data  記錄時刻點--single-transaction 鎖表備份

插入新的資料

mysql> use  test;mysql> insert into student values(3,‘c‘);Query OK, 1 row affected (0.00 sec)mysql> select * from student;+------+------+| id   | name |+------+------+|    1 | a    ||    2 | b    ||    3 | c    |+------+------+3 rows in set (0.00 sec)

類比資料丟失,誤操作

mysql> drop database test;Query OK, 1 row affected (0.01 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              |+--------------------+2 rows in set (0.00 sec)

開始恢複,利用mysqldump的全備加上增量備份

1,關閉日誌記錄

set  global  sql_log_bin=0;

2,恢複全備,檢查資料情況

mysql -uroot < /opt/all.sqlmysql> select * from test.student;+------+------+| id   | name |+------+------+|    1 | a    ||    2 | b    |+------+------+2 rows in set (0.00 sec)

3,利用時刻點恢複增量恢複,查看/opt/all.sql的開始時刻點,在檔案裡有類似如下字串

-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000018‘, MASTER_LOG_POS=705

在看誤操作的時刻點

mysqlbinlog  /var/lib/mysql/mysql-bin.000018 # at 869#161102 18:36:09 server id 1  end_log_pos 896 Xid = 4088COMMIT/*!*/;# at 896#161102 18:36:25 server id 1  end_log_pos 977 Querythread_id=41exec_time=0error_code=0SET TIMESTAMP=1478082985/*!*/;drop database test

根據開始時刻點和結束時刻點恢複

mysqlbinlog  /var/lib/mysql/mysql-bin.000018 --start-position=705 --stop-position=896 | mysql -uroot

4,恢複完成,查看資料

mysql> select * from test.student;+------+------+| id   | name |+------+------+|    1 | a    ||    2 | b    ||    3 | c    |+------+------+3 rows in set (0.00 sec)
四,xtrabackup備份與恢複之全量

1,下載工具,幷安裝

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.4/binary/redhat/6/x86_64/percona-xtrabackup-2.3.4-1.el6.x86_64.rpm
yum install percona-xtrabackup-2.3.4-1.el6.x86_64.rpm

2,建立備份目錄,幷備份

mkdir /exbackupinnobackupex --user=root /exbackup/innobackupex --apply-log /exbackup/2016-11-02_20-14-08/

3,查看備份檔案

[[email protected] 3306]# ll /exbackup/2016-11-02_20-14-08/總用量 30760drwx------. 2 root root     4096 11月  2 20:49 2016-11-02_20-49-56-rw-r-----. 1 root root      386 11月  2 20:14 backup-my.cnf-rw-r-----. 1 root root 18874368 11月  2 20:21 ibdata1-rw-r--r--. 1 root root  5242880 11月  2 20:21 ib_logfile0-rw-r--r--. 1 root root  5242880 11月  2 20:21 ib_logfile1drwx------. 2 root root     4096 11月  2 20:14 mysqldrwx------. 2 root root     4096 11月  2 20:14 oldboydrwx------. 2 root root     4096 11月  2 20:14 performance_schemadrwx------. 2 root root     4096 11月  2 20:14 test-rw-r-----. 1 root root       21 11月  2 20:14 xtrabackup_binlog_info-rw-r--r--. 1 root root       23 11月  2 20:21 xtrabackup_binlog_pos_innodb-rw-r-----. 1 root root      113 11月  2 20:21 xtrabackup_checkpoints-rw-r-----. 1 root root      511 11月  2 20:14 xtrabackup_info-rw-r-----. 1 root root  2097152 11月  2 20:21 xtrabackup_logfile

4,類比資料丟失,進行恢複

rm -rf /data/*mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema |+--------------------+1 row in set (0.00 sec)

5,利用備份檔案,恢複資料,重啟資料庫,查看資料

innobackupex --copy-back /exbackup/2016-11-02_20-14-08/ chown -R  mysql:mysql /data/*service mysqld restartmysql> show databases;+------------------------------+| Database                     |+------------------------------+| information_schema           || #mysql50#2016-11-02_20-49-56 || mysql                        || oldboy                       || performance_schema           || test                         |+------------------------------+6 rows in set (0.00 sec)
五,xtrabackup備份與恢複之增量

1,上面我們已經做了全備,我們新添資料做增量備份實驗

mysql> show databases;+------------------------------+| Database                     |+------------------------------+| information_schema           || #mysql50#2016-11-02_20-49-56 || mysql                        || oldboy                       || performance_schema           || t1                           || t2                           || test                         |+------------------------------+

2,進行增量備份,注意:下一次增量 --incremental-basedir=最近的增量備份路徑

 innobackupex --incremental /exbackup/ --incremental-basedir=/exbackup/2016-11-02_20-14-08/ innobackupex --apply-log --redo-only /exbackup/2016-11-02_20-14-08/  innobackupex --apply-log --redo-only /exbackup/2016-11-02_20-14-08/ --incremental-basedir=/exbackup/2016-11-02_21-31-50/

3,查看增量備份

[[email protected] exbackup]# ll /exbackup/總用量 8drwx------. 7 root root 4096 11月  2 20:49 2016-11-02_20-14-08drwx------. 9 root root 4096 11月  2 21:32 2016-11-02_21-31-50

4,類比資料丟失,進行恢複

rm -rf /data/*mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema |+--------------------+1 row in set (0.00 sec)

5,利用備份檔案,恢複資料,重啟資料庫,查看資料

innobackupex --copy-back /exbackup/2016-11-02_20-14-08/  #直接通過全量進行增量的恢複chown -R  mysql:mysql /data/*service mysqld restartmysql> show databases;+------------------------------+| Database                     |+------------------------------+| information_schema           || #mysql50#2016-11-02_20-49-56 || mysql                        || oldboy                       || performance_schema           || t1                           || t2                           || test                         |+------------------------------+8 rows in set (0.01 sec)
六,xtrabackup備份與恢複 多執行個體

1,步驟基本一樣,只是多加一些參數

innobackupex   --defaults-file=/data/3306/my.cnf --user=root  /exbackupinnobackupex   --apply-log /exbackup/2016-11-02_20-14-08/ innobackupex   --defaults-file=/data/3306/my.cnf --copy-back /exbackup/2016-11-02_20-14-08/

2,增量

innobackupex   --defaults-file=/data/3306/my.cnf --user=root  --incremental /exbackup/ --incremental-basedir=/exbackup/2016-11-02_20-14-08/innobackupex   --apply-log --redo-only /exbackup/2016-11-02_20-14-08/  innobackupex   --apply-log --redo-only /exbackup/2016-11-02_20-14-08/ --incremental-dir=/exbackup/2016-11-02_21-31-50/innobackupex   --defaults-file=/data/3306/my.cnf --copy-back /exbackup/2016-11-02_20-14-08/

  


  總結:只是多了設定檔的參數,其他步驟完全一致,這裡就不花篇幅這些操作了,大家可以進行測試,本文沒有過多的原理解釋,全是乾貨操作,想瞭解這些備份方法的原理,參數的網友就見諒了

本文出自 “資料庫學習曆程” 部落格,請務必保留此出處http://yuemu.blog.51cto.com/10688235/1868733

多種方法備份Mysql資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.