MySQL 備份和還原

大綱

一、備份類型分類

二、各備份工具對比圖

三、mysqldump實現備份

四、lvm快照實現備份

五、xtrabackup實現備份



一、備份類型分類

(1)、根據備份時服務器是否能在線分類

    熱備份:hot backup,讀、寫不受影響

    溫備份:warm backup,僅可以執行讀操作

    冷備份:cold backup,離線備份;讀、寫操作均中止


(2)、根據備份時數據導出方式分類

    物理備份:直接複製(歸檔)數據文件的備份方式

    邏輯備份:把數據從庫中提取出來保存爲文本文件


(3)、根據備份時的數據集分類

    完全備份:備份全部數據

    增量備份:僅備份上次完全備份或增量備份以後變化的數據

    差異備份:僅備份上次完全備份以來變化的數據

    


二、各備份工具對比圖


wKioL1Z9RVbjCYBDAAMnCcticFY126.jpg



三、mysqldump實現備份

 mysqldump - a database backup program

SYNOPSIS
       mysqldump [options] [db_name [tbl_name ...]]

    --master-data={0|1|2}
        	0: 不記錄二進制日誌文件及路位置
        	1:以CHNAGE MASTER TO的方式記錄位置,可用於恢復後直接啓動從服務器
        	2:以CHANGE MASTER TO的方式記錄位置,但默認爲被註釋
    --lock-all-tables:鎖定所有表
    --flush-logs: 執行日誌flush;	
    --all-databases: 備份所有庫
    --databases DB_NAME,DB_NAME,...: 備份指定庫

1、先做一次完全備份

MyISAM存儲引擎的備份
[root@soysauce ~]# mysqldump -uroot -p --all-databases --lock-all-tables --flush-logs --master-data=2 > /root/data.sql
Enter password:

InnoDB存儲引擎的備份
[root@soysauce ~]# mysqldump -uroot -p --all-databases --single-transaction --flush-logs --master-data=2 > /root/data.sql
Enter password:

2、查看一下二進制日誌滾動的位置

[root@soysauce ~]# head -25 /root/data.sql 
-- MySQL dump 10.13  Distrib 5.1.73, for redhat-linux-gnu (x86_64)
--
-- Host: localhost    Database: 
-- ------------------------------------------------------
-- Server version	5.5.28-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Position to start replication or point-in-time recovery from
--

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=107;    # 找到這一行

--
-- Current Database: `mysql`

3、備份一下以前的二進制日誌文件之後再刪除

[root@soysauce ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 5.5.28-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000008 |       126 |
| mysql-bin.000009 |      1654 |
| mysql-bin.000010 |     20386 |
| mysql-bin.000011 |       126 |
| mysql-bin.000012 |       477 |
| mysql-bin.000013 |       126 |
| mysql-bin.000014 |       399 |
| mysql-bin.000015 |       235 |
| mysql-bin.000016 |       150 |
| mysql-bin.000017 |      4771 |
| mysql-bin.000018 |       534 |
| mysql-bin.000019 |       107 |
+------------------+-----------+
3 rows in set (0.00 sec)
10 rows in set (0.00 sec)

mysql> PURGE BINARY LOGS TO 'mysql-bin.000019';
Query OK, 0 rows affected (0.07 sec)

mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000019 |       107 |
+------------------+-----------+
1 row in set (0.00 sec)

mysql> exit
Bye

4、每天做一次增量備份,以做完增量備份的第一天爲例

[root@soysauce ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.28-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000019 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.04 sec)

mysql> exit
Bye

[root@soysauce ~]# cd /mydata/data/
[root@soysauce data]# ls
ibdata1      ib_logfile1  mysql             mysql-bin.000020  node1.network.com.err  soysauce.err  test    vsftpd
ib_logfile0  jiaowu       mysql-bin.000019  mysql-bin.index   performance_schema     soysauce.pid  testdb
[root@soysauce data]# mkdir /bin_backup
[root@soysauce data]# mysqlbinlog mysql-bin.000019 > /bin_backup/mon-incremental.sql

5、當某一天磁盤損壞,所有庫丟失,先初始化mysql

[root@soysauce ~]# cd /usr/local/mysql
[root@soysauce mysql]# scripts/mysql_install_db --user=mysql --datadir=/data/mysql/
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

./bin/mysqladmin -u root password 'new-password'
./bin/mysqladmin -u root -h soysauce password 'new-password'

Alternatively you can run:
./bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd . ; ./bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd ./mysql-test ; perl mysql-test-run.pl

Please report any problems with the ./bin/mysqlbug script!

6、先暫時關閉記錄二進制日誌功能

mysql> SET @@GLOBAL.sql_log_bin=OFF;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@GLOBAL.sql_log_bin;
+----------------------+
| @@GLOBAL.sql_log_bin |
+----------------------+
|                    0 |
+----------------------+
1 row in set (0.01 sec)

7、重新登錄mysql,恢復完全備份

[root@soysauce mysql]# mysql  < /root/data.sql

8、恢復增量備份

[root@soysauce mysql]# mysql < /bin_backup/mon-incremental.sql

9、即使點還原

[root@soysauce mysql]# mysqlbinlog mysql-bin.000020 | mysql

10、當所有數據恢復之後,再開啓二進制日誌記錄功能

mysql> SET @@GLOBAL.sql_log_bin=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@GLOBAL.sql_log_bin;
+----------------------+
| @@GLOBAL.sql_log_bin |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.00 sec)


四、lvm快照實現備份

1、前提

    數據文件要在邏輯捲上

    此邏輯卷所在卷組必須有足夠空間使用快照卷

    數據文件和事務日誌要在同一個邏輯捲上

2、lvm實現備份恢復

(1)、打開會話,施加讀鎖,鎖定所有表

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.09 sec)

mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.10 sec)

(2)、通過另一個終端,保存二進制日誌文件及相關位置信息

[root@soysauce mysql]# mysql -uroot -p -e 'SHOW MASTER STATUS\G' > /backup/master-`date +%F`.info

(3)、創建快照卷

[root@soysauce mysql]# lvcreate -s -L 50M -p r -n mydata-snap /dev/myvg/mydata

(4)、釋放鎖

mysql> UNLOCK TABLES;

(5)、掛載快照卷,備份

[root@soysauce ~]# mount -o /dev/myvg/mydata-snap /mnt/
[root@soysauce ~]# cd /mnt/
[root@soysauce mnt]# ls
data  lost+found
[root@soysauce mnt]# cd data/
[root@soysauce data]# mkdir -pv /backup/full-backup-`date +%F`
mkdir: created directory `/backup/full-backup-2015-12-26'
[root@soysauce data]# cp -a ./* /backup/full-back-2015-12-26

6、刪除快照卷

[root@soysauce data]# cd 
[root@soysauce ~]# umount /mnt
[root@soysauce ~]# lvremove /dev/myvg/mydata-snap

7、增量備份二進制日誌

[root@soysauce ~]# cd /backup/full-backup-2015-12-26 
[root@soysauce full-backup-2015-12-26]# ls
ibdata1      ib_logfile1  mysql             mysql-bin.000002  mysql-bin.000004  performance_schema  soysauce.pid  testdb
ib_logfile0  jiaowu       mysql-bin.000001  mysql-bin.000003  mysql-bin.index   soysauce.err        test          vsftpd
[root@soysauce full-backup-2015-12-26]# rm -rf mysql-bin.*
[root@soysauce full-backup-2015-12-26]# cd 
[root@soysauce ~]# cat /backup/master-2015-12-26.info 
*************************** 1. row ***************************
            File: mysql-bin.000004
        Position: 107
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
[root@soysauce ~]# mysqlbinlog --start-datetime='2015-12-26 21:36:38' mysql-bin.000004 mysql-bin.000005 > /backup/incremental-`date +%F-%T`.sql

8、恢復完全備份至數據目錄

[root@soysauce ~]# cp -a /backup/full-backup-2015-12-26/* /mydata/data

9、恢復增量備份

[root@soysauce ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.5.28-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SET @@SESSION.sql_log_bin=OFF;
Query OK, 0 rows affected (0.03 sec)

mysql> SELECT @@SESSION.sql_log_bin;
+-----------------------+
| @@SESSION.sql_log_bin |
+-----------------------+
|                     0 |
+-----------------------+
1 row in set (0.00 sec)

mysql> source /backup/incremental-2015-12-26-22\:36\:09.sql

mysql> SET @@SESSION.sql_log_bin=ON;
Query OK, 0 rows affected (0.03 sec)

mysql> SELECT @@SESSION.sql_log_bin;
+-----------------------+
| @@SESSION.sql_log_bin |
+-----------------------+
|                     1 |
+-----------------------+
1 row in set (0.00 sec)


五、xtrabackup實現備份

1、簡介

Xtrabackup是由percona提供的mysql數據庫備份工具,據官方介紹,這也是世界上惟一一款開源的能夠對innodb和xtradb數據庫進行熱備的工具。特點:

(1)備份過程快速、可靠;

(2)備份過程不會打斷正在執行的事務;

(3)能夠基於壓縮等功能節約磁盤空間和流量;

(4)自動實現備份檢驗;

(5)還原速度快;


2、安裝

自行根據系統及硬件平臺下載:https://www.percona.com/downloads/XtraBackup/LATEST/

[root@soysauce ~]# wget 
[root@soysauce ~]# yum localinstall -y percona-xtrabackup-2.3.3-1.el6.x86_64.rpm

3、完全備份

[root@soysauce ~]# innobackupex --user=root --password='redhat' /backup/    # 制定備份文件存儲路徑
[root@soysauce ~]# cd /backup/2015-12-27_11-35-36/
[root@soysauce 2015-12-27_11-35-36]# ls
backup-my.cnf  jiaowu  performance_schema  xtrabackup_binlog_info  xtrabackup_info
ibdata1        mysql   test                xtrabackup_checkpoints  xtrabackup_logfile

如果要使用一個最小權限的用戶進行備份,則可基於如下命令創建此類用戶:
mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY 'redhat’;
mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM ’bkpuser’@'localhost';
mysql> GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;

使用innobakupex備份時,其會調用xtrabackup備份所有的InnoDB表,複製所有關於表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。這些文件會被保存至一個以時間命令的目錄中。

在備份的同時,innobackupex還會在備份目錄中創建如下文件:
(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(如是否已經爲prepared狀態)和LSN(日誌序列號)範圍信息;

每個InnoDB頁(通常爲16k大小)都會包含一個日誌序列號,即LSN。LSN是整個數據庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。

(2)xtrabackup_binlog_info —— mysql服務器當前正在使用的二進制日誌文件及至備份這一刻爲止二進制日誌事件的位置。

(3)xtrabackup_binary —— 備份中用到的xtrabackup的可執行文件;

(4)backup-my.cnf —— 備份命令用到的配置選項信息;

在使用innobackupex進行備份時,還可以使用--no-timestamp選項來阻止命令自動創建一個以時間命名的目錄;如此一來,innobackupex命令將會創建一個BACKUP-DIR目錄來存儲備份數據。

4、準備(prepare)一個完全備份

一般情況下,在備份完成後,數據尚且不能用於恢復操作,因爲備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。innobakupex命令的--apply-log選項可實現上述功能。

[root@soysauce ~]# innobackupex --apply-log /backup/2015-12-27_11-35-36/
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 1670166
151227 11:56:40 completed OK!

在實現“準備”的過程中,innobackupex通常還可以使用--use-memory選項來指定其可以使用的內存的大小,默認通常爲100M。如果有足夠的內存可用,可以多劃分一些內存給prepare的過程,以提高其完成速度。

5、從一個完全備份中恢復數據 

[root@soysauce mysql]# innobackupex --copy-back /backup/2015-12-27_11-35-36/    # 恢復時不需要啓動mysql

innobackupex命令的--copy-back選項用於執行恢復操作,其通過複製所有數據相關的文件至mysql服
務器DATADIR目錄中來執行恢復過程。innobackupex通過backup-my.cnf來獲取DATADIR目錄的相關信息

請確保如上信息的最行一行出現“innobackupex: completed OK!”。

[root@soysauce mysql]# chown -R mysql.mysql ./*        # 修改數據目錄下所有文件的屬主屬組爲mysql

恢復完成後可做一次完全備份

6、使用innobackupex進行增量備份

每個InnoDB的頁面都會包含一個LSN信息,每當相關的數據發生改變,相關的頁面的LSN就會自動增長。這正是InnoDB表可以進行增量備份的基礎,即innobackupex通過備份上次完全備份之後發生改變的頁面來實現。

要實現第一次增量備份,可以使用下面的命令進行:

[root@soysauce mysql]# innobackupex --incremental /backup --incremental-dir=BASEDIR
其中,BASEDIR指的是完全備份所在的目錄,此命令執行結束後,innobackupex命令會在/backup目錄中創建一個新的以時間命名的目錄以存放所有的增量備份數據。另外,在執行過增量備份之後再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。
需要注意的是,增量備份僅能應用於InnoDB或XtraDB表,對於MyISAM表而言,執行增量備份時其實進行的是完全備份。
“準備”(prepare)增量備份與整理完全備份有着一些不同,尤其要注意的是:
(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”。“重放”之後,所有的備份數據將合併到完全備份上。
(2)基於所有的備份將未提交的事務進行“回滾”。
於是,操作就變成了:
# innobackupex --apply-log --redo-only BASE-DIR
接着執行:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
而後是第二個增量:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,每一次都要執行如上操作;

最後直接還原完全備份就ok

例如:

完全備份
[root@soysauce ~]# innobackupex --apply-log --redo-only /backup/full-backup/2015-12-27_21-31-36/

第一次增量備份
[root@soysauce ~]# innobackupex --apply-log --redo-only /backup/full-backup/2015-12-27_21-31-36/ --incremental-dir=/backup/incremental/2015-12-27_21-34-20/

第二次增量備份
[root@soysauce ~]# innobackupex --apply-log --redo-only /backup/full-backup/2015-12-27_21-31-36/ --incremental-dir=/backup/incremental/2015-12-27_21-37-14/

恢復完全備份
[root@soysauce ~]# innobackupex --copy-back /backup/full-backup/2015-12-27_21-31-36/

7、Xtrabackup的“流”及“備份壓縮”功能

Xtrabackup對備份的數據文件支持“流”功能,即可以將備份的數據通過STDOUT傳輸給tar程序進行歸檔,而不是默認的直接保存至某備份目錄中。要使用此功能,僅需要使用--stream選項即可。如:

# innobackupex --stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz

甚至也可以使用類似如下命令將數據備份至其它服務器:

# innobackupex --stream=tar  /backup | ssh [email protected]  "cat -  > /backups/`date +%F_%H-%M-%S`.tar" 

此外,在執行本地備份時,還可以使用--parallel選項對多個文件進行並行複製。此選項用於指定在複製時啓動的線程數目。當然,在實際進行備份時要利用此功能的便利性,也需要啓用innodb_file_per_table選項或共享的表空間通過innodb_data_file_path選項存儲在多個ibdata文件中。對某一數據庫的多個文件的複製無法利用到此功能。其簡單使用方法如下:

# innobackupex --parallel  /path/to/backup

同時,innobackupex備份的數據文件也可以存儲至遠程主機,這可以使用--remote-host選項來實現:

# innobackupex [email protected]  /path/IN/REMOTE/HOST/to/backup

6、導入或導出單張表

默認情況下,InnoDB表不能通過直接複製表文件的方式在mysql服務器之間進行移植,即便使用了innodb_file_per_table選項。而使用Xtrabackup工具可以實現此種功能,不過,此時需要“導出”表的mysql服務器啓用了innodb_file_per_table選項(嚴格來說,是要“導出”的表在其創建之前,mysql服務器就啓用了innodb_file_per_table選項),並且“導入”表的服務器同時啓用了innodb_file_per_table和innodb_expand_import選項。

(1)“導出”表
導出表是在備份的prepare階段進行的,因此,一旦完全備份完成,就可以在prepare過程中通過--export選項將某表導出了:
# innobackupex --apply-log --export /path/to/backup

此命令會爲每個innodb表的表空間創建一個以.exp結尾的文件,這些以.exp結尾的文件則可以用於導入至其它服務器。

(2)“導入”表
要在mysql服務器上導入來自於其它服務器的某innodb表,需要先在當前服務器上創建一個跟原表表結構一致的表,而後才能實現將表導入:
mysql> CREATE TABLE mytable (...)  ENGINE=InnoDB;

然後將此表的表空間刪除:
mysql> ALTER TABLE mydatabase.mytable  DISCARD TABLESPACE;

接下來,將來自於“導出”表的服務器的mytable表的mytable.ibd和mytable.exp文件複製到當前服務器的數據目錄,然後使用如下命令將其“導入”:
mysql> ALTER TABLE mydatabase.mytable  IMPORT TABLESPACE;

導入導出記得保證tb_name.cfg tb_name.ibd tb_name.frm屬主屬組都爲mysql,否則會報錯

7、使用Xtrabackup對數據庫進行部分備份

Xtrabackup也可以實現部分備份,即只備份某個或某些指定的數據庫或某數據庫中的某個或某些表。但要使用此功能,必須啓用innodb_file_per_table選項,即每張表保存爲一個獨立的文件。同時,其也不支持--stream選項,即不支持將數據通過管道傳輸給其它程序進行處理。

此外,還原部分備份跟還原全部數據的備份也有所不同,即你不能通過簡單地將prepared的部分備份使用--copy-back選項直接複製回數據目錄,而是要通過導入表的方向來實現還原。當然,有些情況下,部分備份也可以直接通過--copy-back進行還原,但這種方式還原而來的數據多數會產生數據不一致的問題,因此,無論如何不推薦使用這種方式。

(1)創建部分備份

創建部分備份的方式有三種:正則表達式(--include), 枚舉表文件(--tables-file)和列出要備份的數據庫(--databases)。

(a)使用--include
使用--include時,要求爲其指定要備份的表的完整名稱,即形如databasename.tablename,如:
# innobackupex --include='^mageedu[.]tb1'  /path/to/backup

(b)使用--tables-file
此選項的參數需要是一個文件名,此文件中每行包含一個要備份的表的完整名稱;如:
# echo -e 'mageedu.tb1\nmageedu.tb2' > /tmp/tables.txt
# innobackupex --tables-file=/tmp/tables.txt  /path/to/backup

(c)使用--databases
此選項接受的參數爲數據名,如果要指定多個數據庫,彼此間需要以空格隔開;同時,在指定某數據庫時,也可以只指定其中的某張表。此外,此選項也可以接受一個文件爲參數,文件中每一行爲一個要備份的對象。如:
# innobackupex --databases="mageedu testdb"  /path/to/backup

(2)整理(preparing)部分備份
prepare部分備份的過程類似於導出表的過程,要使用--export選項進行:
# innobackupex --apply-log --export  /pat/to/partial/backup

此命令執行過程中,innobackupex會調用xtrabackup命令從數據字典中移除缺失的表,因此,會顯示出許多關於“表不存在”類的警告信息。同時,也會顯示出爲備份文件中存在的表創建.exp文件的相關信息。

(3)還原部分備份
還原部分備份的過程跟導入表的過程相同。當然,也可以通過直接複製prepared狀態的備份直接至數據目錄中實現還原,不要此時要求數據目錄處於一致狀態。


注意:

1、將數據和備份放在不同的磁盤設備上;異機或異地備份存儲較爲理想;

2、備份的數據應該週期性地進行還原測試;

3、每次災難恢復後都應該立即做一次完全備份;

4、針對不同規模或級別的數據量,要定製好備份策略;

5、二進制日誌應該跟數據文件在不同磁盤上,並週期性地備份好二進制日誌文件;


從備份中恢復應該遵循步驟:

1、停止MySQL服務器;

2、記錄服務器的配置和文件權限;

3、將數據從備份移到MySQL數據目錄;其執行方式依賴於工具;

4、改變配置和文件權限;

5、以限制訪問模式重啓服務器;mysqld的--skip-networking選項可跳過網絡功能;

方法:編輯my.cnf配置文件,添加如下項:

skip-networking

socket=/tmp/mysql-recovery.sock

6、載入邏輯備份(如果有);而後檢查和重放二進制日誌;

7、檢查已經還原的數據;

8、重新以完全訪問模式重啓服務器;

註釋前面在my.cnf中添加的選項,並重啓;






總結:

  • 一定要習慣性的備份數據、二進制日誌文件、配置文件、事務日誌文件

  • 二進制文件最好存儲在另一塊磁盤上,不要與數據文件在同一塊盤上






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