MYSQLDUMPにてデータのみをテキストファイルに抽出する。

[root@colinux tmp]# mysqldump --no-create-info --tab=/tmp --lines-terminated-by=
"\r\n" TEST -u root -p

Enter password:
[root@colinux tmp]# ls -l

[root@colinux tmp]# ls -l
total 8
srwxrwxrwx 1 mysql mysql 0 2009-02-06 18:09 mysql.sock
-rw-rw-rw- 1 mysql mysql 320 2009-02-06 18:11 T1.txt
-rw-rw-rw- 1 mysql mysql 15 2009-02-06 18:11 T2.txt
[root@colinux tmp]#

data_only

mysql> LOAD DATA INFILE ‘/tmp/T1.txt’ INTO TABLE T1 LINES TERMINATED BY ‘\r\n’;
Query OK, 12 rows affected (0.02 sec)
Records: 12 Deleted: 0 Skipped: 0 Warnings: 0

mysql> select * from T1;
+—-+————+—————+
| id | name | comment |
+—-+————+—————+
| 1 | SHOW WARIN | test update |
| 2 | SHOW WARIN | 22222222222 |
| 3 | select_lim | test 20090117 |
| 4 | select_lim | test 20090117 |
| 5 | select_lim | test 20090117 |
| 6 | select_lim | test 20090117 |
| 7 | select_lim | test 20090117 |
| 8 | select_lim | test 20090117 |
| 9 | select_lim | test 20090117 |
| 10 | FLUSHMAN | TEST DE SU |
| 11 | FLUSHMAN | TEST DE SU |
| 12 | FLUSHMAN | TEST DE SU |
+—-+————+—————+
12 rows in set (0.00 sec)

mysql>

load


DBを誤って削除してしまった時の為に。。。
リストア方法は幾つかありますが、今回はあえてSOURCEコマンドにて
リストアしてみます。

mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| T1 |
| T2 |
+—————-+
2 rows in set (0.01 sec)

mysql> exit

[root@colinux tmp]# pwd
/tmp
[root@colinux tmp]# ls -l
total 0
srwxrwxrwx 1 mysql mysql 0 2009-02-06 10:52 mysql.sock
[root@colinux tmp]# mysqldump test --tab=/tmp -u root -p
Enter password:

[root@colinux tmp]# ls -l
total 16
srwxrwxrwx 1 mysql mysql 0 2009-02-06 10:52 mysql.sock
-rw-r–r– 1 root root 1375 2009-02-06 11:46 T1.sql
-rw-rw-rw- 1 mysql mysql 239 2009-02-06 11:46 T1.txt
-rw-r–r– 1 root root 1374 2009-02-06 11:46 T2.sql
-rw-rw-rw- 1 mysql mysql 14 2009-02-06 11:46 T2.txt
[root@colinux tmp]#

drop_db

■削除してしまったDBの再作成
mysql> create database `TEST` /*!40100 default character set UTF8 */;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| DATABASE |
| DB01 |
| DB02 |
| TEST |
| client_test_db |
| mysql |
+——————–+
7 rows in set (0.00 sec)

■テーブルのリストア
mysql>SOURCE /tmp/T1.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql>
mysql>SOURCE /tmp/T2.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql>
■テーブルが戻っていることを確認。
mysql> show tables;
+—————-+
| Tables_in_TEST |
+—————-+
| T1 |
| T2 |
+—————-+
2 rows in set (0.00 sec)

mysql>

restore_table_only

■データのリスストア
mysql> select * from T1;
Empty set (0.00 sec)

mysql> select * from T2;
Empty set (0.00 sec)

mysql> LOAD DATA INFILE ‘/tmp/T1.txt’ INTO TABLE T1;
Query OK, 9 rows affected (0.01 sec)
Records: 9 Deleted: 0 Skipped: 0 Warnings: 0

mysql> LOAD DATA INFILE ‘/tmp/T2.txt’ INTO TABLE T2;
Query OK, 1 row affected (0.01 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 0

mysql>

無事にリストアできていることを確認。
restore_confirm

mysqldumpコマンドでフルバックアップして、mysqlコマンドでいつもは
リストアしてますが、特定のテーブルの特定のデータをひとつひとつ
確認しながらリストア出来るので、特定のテーブルのリストアをしたり
するのに適しているかも知れません。