mysql資料備份總結
阿新 • • 發佈:2018-11-02
mysql資料備份(重要)
對於一個網站來說,資料是最重要的,也是無可替代的,伺服器宕機可以更換硬體,專案丟失都可以根據之前的需求重寫,但是資料丟失對於一個公司來說,是災難性的,所以下面,主要介紹幾種常用的mysql備份方式
資料的備份型別
資料的備份主要分為以下兩類
- 完全備份:備份整個資料庫
- 部分備份:備份部分資料集,又分為以下兩種
- 增量備份:備份上一次備份以後的增量資料,優點:省空間;缺點:還原複雜
- 差異備份:本分上一次完全備份以後變化的資料,缺點:浪費空間;有點:還原簡單
mysql的資料備份有以下幾種
- 熱備份:資料庫進行備份時,讀寫不受影響
- 溫備份:資料庫進行備份時,可讀不可寫
- 冷備份:資料庫進行備份時,不可讀寫,資料庫也不可訪問
在考慮備份方式時,還要考慮到資料庫本身的儲存引擎
引擎 | 熱備 | 溫備 | 冷備 |
---|---|---|---|
MyISAM | × | √ | √ |
InnoDB | √ | √ | √ |
資料備份與恢復
一、複製檔案進行資料恢復
- 定時複製mysql目錄下,data資料夾下相關資料庫的資料夾
- 資料丟失後,直接將資料夾還原(不可重灌資料庫或在新資料庫上進行直接複製,可能導致資料無法使用)
二、mysqldump+binlog進行資料恢復
- 定時利用mysqldump備份全表資料
- 定期備份binlog作為增量檔案備份
- 資料丟失後,首先利用MySQLdump匯出的資料進行恢復,然後將增量資料逐步恢復(恢復時間很長,尤其是表格資料較多時)
三、使用lvm2快照備份(未測試)
-
部署lvm環境
#新增硬碟; 這裡我們直接實現SCSI硬碟的熱插拔, 首先在虛擬機器中新增一塊硬碟, 不重啟 [[email protected]
-
建立快照卷並備份
mysql> FLUSH TABLES WITH READ LOCK; #鎖定所有表 Query OK, 0 rows affected (0.00 sec) [[email protected] lvm_data]# lvcreate -L 1G -n mydata-snap -p r -s /dev/mapper/myvg-mydata #建立快照卷 Logical volume "mydata-snap" created. mysql> UNLOCK TABLES; #解鎖所有表 Query OK, 0 rows affected (0.00 sec) [[email protected] lvm_data]# mkdir /lvm_snap #建立資料夾 [[email protected] lvm_data]# mount /dev/myvg/mydata-snap /lvm_snap/ #掛載snap mount: block device /dev/mapper/myvg-mydata--snap is write-protected, mounting read-only [[email protected] lvm_data]# cd /lvm_snap/ [[email protected] lvm_snap]# ls employees ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 mysql-bin.index test [[email protected] lvm_snap]# tar cf /tmp/mysqlback.tar * #打包檔案到/tmp/mysqlback.tar [[email protected] ~]# umount /lvm_snap/ #解除安裝snap [[email protected] ~]# lvremove myvg mydata-snap #刪除snap
-
恢復資料
[[email protected] lvm_snap]# rm -rf /lvm_data/* [[email protected] ~]# service mysqld start #啟動MySQL, 如果是編譯安裝的應該不能啟動(需重新初始化), 如果rpm安裝則會重新初始化資料庫 mysql> SHOW DATABASES; #檢視資料庫, 資料丟失! +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) [[email protected] ~]# cd /lvm_data/ [[email protected] lvm_data]# rm -rf * #刪除所有檔案 [[email protected] lvm_data]# tar xf /tmp/mysqlback.tar #解壓備份資料庫到此資料夾 [[email protected] lvm_data]# ls #檢視當前的檔案 employees ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 mysql-bin.index test
三、xtrabackup資料恢復
-
備份資料
[[email protected] ~]# mkdir /extrabackup #建立備份目錄 [[email protected] ~]# innobackupex --user=root /extrabackup/ #備份資料 ###################提示complete表示成功********************* [[email protected] ~]# ls /extrabackup/ #看到備份目錄 2016-04-27_07-30-48 [[email protected] ~]# innobackupex --apply-log /extrabackup/2016-04-27_07-30-48/ #指定備份檔案的目錄 #一般情況下下面三行結尾代表成功***************** InnoDB: Starting shutdown... InnoDB: Shutdown completed; log sequence number 369661462 160427 07:40:11 completed OK! [[email protected] ~]# cd /extrabackup/2016-04-27_07-30-48/ [[email protected] 2016-04-27_07-30-48]# ls -hl #檢視備份檔案 total 31M -rw-r----- 1 root root 386 Apr 27 07:30 backup-my.cnf drwx------ 2 root root 4.0K Apr 27 07:30 employees -rw-r----- 1 root root 18M Apr 27 07:40 ibdata1 -rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile0 -rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile1 drwx------ 2 root root 4.0K Apr 27 07:30 mysql drwx------ 2 root root 4.0K Apr 27 07:30 performance_schema drwx------ 2 root root 4.0K Apr 27 07:30 test -rw-r----- 1 root root 27 Apr 27 07:30 xtrabackup_binlog_info -rw-r--r-- 1 root root 29 Apr 27 07:40 xtrabackup_binlog_pos_innodb -rw-r----- 1 root root 117 Apr 27 07:40 xtrabackup_checkpoints -rw-r----- 1 root root 470 Apr 27 07:30 xtrabackup_info -rw-r----- 1 root root 2.0M Apr 27 07:40 xtrabackup_logfile
-
恢復資料
[[email protected] ~]# rm -rf /data/* #刪除資料檔案 ***不用啟動資料庫也可以還原************* [[email protected] ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/ #恢復資料, 記清使用方法 #########我們這裡是編譯安裝的mariadb所以需要做一些操作########## [[email protected] data]# killall mysqld [[email protected] ~]# chown -R mysql:mysql ./* [[email protected] ~]# ll /data/ #資料恢復 total 28704 -rw-rw---- 1 mysql mysql 16384 Apr 27 07:43 aria_log.00000001 -rw-rw---- 1 mysql mysql 52 Apr 27 07:43 aria_log_control -rw-rw---- 1 mysql mysql 18874368 Apr 27 07:43 ibdata1 -rw-rw---- 1 mysql mysql 5242880 Apr 27 07:43 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 Apr 27 07:43 ib_logfile1 -rw-rw---- 1 mysql mysql 264 Apr 27 07:43 mysql-bin.000001 -rw-rw---- 1 mysql mysql 19 Apr 27 07:43 mysql-bin.index -rw-r----- 1 mysql mysql 2166 Apr 27 07:43 node1.anyisalin.com.err [[email protected] data]# service mysqld restart MySQL server PID file could not be found! [FAILED] Starting MySQL.. [ OK ] MariaDB [(none)]> SHOW DATABASES; #檢視資料庫, 已經恢復 +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | performance_schema | | test | +--------------------+
-
增量備份
#########建立連兩個資料庫以供測試##################### MariaDB [(none)]> CREATE DATABASE TEST1; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> CREATE DATABASE TEST2; Query OK, 1 row affected (0.00 sec) [[email protected] ~]# innobackupex --incremental /extrabackup/ --incremental-basedir=/extrabackup/2016-04-27_07-30-48/ [[email protected] ~]# ls /extrabackup/2016-04-27_07-57-22/ #檢視備份檔案 total 96 -rw-r----- 1 root root 386 Apr 27 07:57 backup-my.cnf drwx------ 2 root root 4096 Apr 27 07:57 employees -rw-r----- 1 root root 49152 Apr 27 07:57 ibdata1.delta -rw-r----- 1 root root 44 Apr 27 07:57 ibdata1.meta drwx------ 2 root root 4096 Apr 27 07:57 mysql drwx------ 2 root root 4096 Apr 27 07:57 performance_schema drwx------ 2 root root 4096 Apr 27 07:57 test drwx------ 2 root root 4096 Apr 27 07:57 TEST1 drwx------ 2 root root 4096 Apr 27 07:57 TEST2 -rw-r----- 1 root root 21 Apr 27 07:57 xtrabackup_binlog_info -rw-r----- 1 root root 123 Apr 27 07:57 xtrabackup_checkpoints -rw-r----- 1 root root 530 Apr 27 07:57 xtrabackup_info -rw-r----- 1 root root 2560 Apr 27 07:57 xtrabackup_logfile [[email protected] ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/ [[email protected] ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/ --incremental-dir=/extrabackup/2016-04-27_07-5 7-22/
-
恢復資料
[[email protected] ~]# rm -rf /data/* #刪除資料 [[email protected] ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/ #整理增量備份之後可以直接通過全量備份還原 [[email protected] ~]# chown -R mysql.mysql /data/
-
總結
備份方法 | 備份速度 | 恢復速度 | 便捷性 | 功能 | 一般用於 |
---|---|---|---|---|---|
cp | 快 | 快 | 一般、靈活性低 | 很弱 | 少量資料備份 |
mysqldump | 慢 | 慢 | 一般、可無視儲存引擎的差異 | 一般 | 中小型資料量的備份 |
lvm2快照 | 快 | 快 | 一般、支援幾乎熱備、速度快 | 一般 | 中小型資料量的備份 |
xtrabackup | 較快 | 較快 | 實現innodb熱備、對儲存引擎有要求 | 強大 | 較大規模的備份 |