使用mysqldump備份時,如果儲存引擎為MyISAM,則只能實現溫備份,並需使用選項--lock-all-tables鎖定所有表。如果儲存引擎為InnoDB,則加上--single-transaction選項,可以實現熱備。
使用mysqldump進行邏輯備份,還存在如下問題:
浮點數據丟失精度;
備份出的資料更佔用空間;不過可壓縮後以大大節省空間的
不適合對大資料庫(如一個庫超過10G)做完全備份
另外對InnoDB而言,需要使用mysql> FLUSH TABLES WITH READ LOCK;重新整理並鎖定表時,可能需要花大量的時間
對InnoDB而言,即使鎖定了,也不一定以為著沒有資料的寫入,此時交易記錄可能還在同步到永久儲存
一、備份單表資料另一個手段:
1.1 基本文法:
備份:
SELECT * INTO OUTFILE '/path/to/somefile.txt' FROM tb_name [WHERE clause];
還原:
LOAD DATA INFILE '/path/to/somefile.txt' INTO TABLE tb_name;
1.2 樣本:
備份表:
mysql> SELECT * INTO OUTFILE '/tmp/tutors.txt' FROM tutors;
Query OK, 8 rows affected (0.31 sec)
[root@localhost ~]# cat /tmp/tutors.txt
2 HuangYaoshi M 63
3 Miejueshitai F 72
4 OuYangfeng M 76
6 YuCanghai M 56
7 Jinlunfawang M 67
8 HuYidao M 42
9 NingZhongze F 49
14 HuFei M 31
注意:匯出的僅僅是資料,表結構並不會被匯出。
建立用於恢複資料的空表:
mysql> CREATE TABLE test_tb LIKE tutors;
Query OK, 0 rows affected (1.28 sec)
還原資料到新表:
mysql> LOAD DATA INFILE '/tmp/tutors.txt' INTO TABLE test_tb;
Query OK, 8 rows affected (0.17 sec)
Records: 8 Deleted: 0 Skipped: 0 Warnings: 0
2.2.2 通過另一個終端,儲存二進位記錄檔及相關位置資訊;
$ mysql -uroot -p -e 'SHOW MASTER STATUS\G' > /path/to/master-`date +%F`.info
查看當前日誌:
mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| mysqld-binlog.000007 | 650 | | | |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
備份增量日誌:需要注意的是,由於我使用了[FLUSH LOGS]滾動日誌,因此理論上使用lvm快照卷備份後有兩個日誌的增量資料需要備份,即:mysqld-binlog.000006和mysqld-binlog.000007
查看備份開始時的日誌位置:
[root@localhost ~]# cat /data/backup/master-2013-09-23.info
*************************** 1. row ***************************
File: mysqld-binlog.000006
Position: 120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
匯出日誌:
[root@localhost ~]# mysqlbinlog --start-position=120 /data/mysql/mysqld-binlog.000006 >/data/backup/06.sql
[root@localhost ~]# mysqlbinlog /data/mysql/mysqld-binlog.000007 >/data/backup/07.sql
更多詳情見請繼續閱讀下一頁的精彩內容:
mysqldump和LVM邏輯卷快照
LVM的綜合性介紹及實現
MySQL高效能備份方案解決資料不間斷訪問(LVM快照方式備份)
LVM上實施ASM