MYSQLのSOURCEコマンドでSQLのセッションから
事前に準備してあったスクリプトを実行する方法。

事前にパフォーマンス確認用に準備してあったスクリプトなどを読み込む場合など便利ですね。

mysql> SOURCE /tmp/mysql_insert.sql
Query OK, 1 row affected (0.02 sec)

source


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コマンドでいつもは
リストアしてますが、特定のテーブルの特定のデータをひとつひとつ
確認しながらリストア出来るので、特定のテーブルのリストアをしたり
するのに適しているかも知れません。