從全備份的SQL語句中恢復某張表 [原創]
今天有朋友問,如何從如何從全備份的SQL語句中恢復某張表,比如我我刪除了一張表,我現在只想恢復這一張表.
做以下測試,但結果不是很理想.
目前認為,這樣的恢復要分兩種情況.
1.要恢復的表在匯出的時候是第一個被匯出的表
在這種情況下,直接匯入就可以了,其他表已存在,不會匯入
mysql> use db1;
Database changed
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
| t2 |
| t3 |
+---------------+
3 rows in set (0.00 sec)
mysql> select * from t1; select * from t2; select * from t3;
+------+-------+
| id | name |
+------+-------+
| 1 | yxyup |
| 1 | yxyup |
+------+-------+
2 rows in set (0.00 sec)
+------+-------+
| id | name |
+------+-------+
| 1 | yxyup |
| 1 | yxyup |
+------+-------+
2 rows in set (0.00 sec)
+------+-------+
| id | name |
+------+-------+
| 1 | yxyup |
| 1 | yxyup |
+------+-------+
2 rows in set (0.00 sec)
mysql> drop table t1;
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t2 |
| t3 |
+---------------+
2 rows in set (0.00 sec)
[mysql@QANEW mysql]$ mysql -uroot -pabc123 -D db1 < db1.dump
ERROR 1050 at line 28: [color=Red]Table 't2' already exists[/color]
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
| t2 |
| t3 |
+---------------+
3 rows in set (0.00 sec)
2. 如果在恢復的表,不是第一個被匯出的,那麼是沒有辦法被恢復的(至少我現在不知道恢復).
我一般採用的恢復方式是.將mysqldump匯出的dump檔案進行抽表,把要恢復的表結構和記錄抽取出來.
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
| t2 |
| t3 |
+---------------+
3 rows in set (0.00 sec)
mysql> drop table t3;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
| t2 |
+---------------+
2 rows in set (0.00 sec)
[mysql@QANEW mysql]$ mysql -uroot -pabc123 -D db1 < db1.dump
ERROR 1050 at line 11: Table 't1' already exists
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
| t2 |
+---------------+
2 rows in set (0.00 sec)
----可以看出如果不是第一個被匯出的表是無法恢復的.
用抽取方法試一下
[mysql@QANEW mysql]$ vi db1_t3.dump
--
-- Table structure for table `t3`
--
CREATE TABLE t3 (
id int(11) default NULL,
`name` char(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `t3`
--
INSERT INTO t3 VALUES (1,'yxyup');
INSERT INTO t3 VALUES (1,'yxyup');
[mysql@QANEW mysql]$ mysql -uroot -pabc123 -D db1 < db1_t3.dump
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
| t2 |
| t3 |
+---------------+
3 rows in set (0.01 sec)
mysql> desc t3;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> select * from t3;
+------+-------+
| id | name |
+------+-------+
| 1 | yxyup |
| 1 | yxyup |
+------+-------+
2 rows in set (0.00 sec)
成功恢復了
當然,如果全庫匯出的檔案很大,在抽取時會很困難.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7364032/viewspace-417508/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從MySQL全庫備份中恢復某個庫和某張表MySql
- 如何從MySQL全庫備份的dump檔案中恢復某張表和表結構MySql
- mysqldump 備份單張表和恢復MySql
- 【備份恢復】從備份恢復資料庫資料庫
- 用sed從mysqldump全備檔案中取出某張表的表結構MySql
- 【Mysql】恢復slave上某幾張表的方法MySql
- mysqldump 備份匯出資料排除某張表或多張表MySql
- MySQL innobackupex全量備份恢復MySql
- mysql之 Innobackupex(全備+增量)備份恢復MySql
- SQL Server 中備份的還原和恢復工作方式SQLServer
- 備份與恢復--從備份的歸檔日誌中恢復資料
- windwos server 路由備份和恢復 路由表備份和恢復Server路由
- 【物理熱備】(下)備份恢復系統表空間 手工備份恢復
- 從dataguard備份的恢復機制
- 【原創】你誤刪除了一張表,請使用備份+歸檔來將資料庫恢復到刪除表之前的狀態資料庫
- 【Xtrabackup】Xtrabackup全備、增量備份及恢復示例
- SQL Server 資料庫備份還原和資料恢復SQLServer資料庫資料恢復
- 備份與恢復--利用備份的控制檔案恢復
- 【Mysql】xbackup全量與增量備份恢復MySql
- 從全備中恢復單庫或單表,小心有坑!
- 【管理篇備份恢復】備份恢復基礎
- Oracle備份恢復之熱備份恢復及異機恢復Oracle
- INNOBACKUPEX的全備和增量備份恢復學習筆記筆記
- ORACLE DG從庫 Rman備份恢復Oracle
- 從備份片中恢復某個指定得歸檔或者資料檔案
- 備份與恢復系列 九 丟失表空間資料檔案的還原與恢復
- Percona XtraBackup 實現全備&增量備份與恢復
- rman資料庫全庫備份與恢復資料庫
- MySQL備份和恢復資料表的方法MySql
- SQL server 2005 備份恢復模式SQLServer模式
- 備份和恢復SQL Server資料庫SQLServer資料庫
- 備份與恢復系列 十一 控制檔案的備份與恢復
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- MySQL 5.6 xtrabackup 全量和增量的備份和恢復MySql
- 有整庫備份的情況rman恢復全庫
- Mysql備份恢復MySql
- Postgresql 備份恢復SQL
- redis備份恢復Redis