mysqlは、あるライブラリの下のすべてのテーブルを一括して空にします(ライブラリは削除せず、空のライブラリを保持します)

7088 ワード


よく知られているように、mysqlの下でライブラリの下のテーブルを削除するには、そのライブラリの下に切り替えて、文「drop table tablename」を実行するだけで削除できます.しかし、このライブラリの下に何百ものテーブルがあり、drop文を何度も実行するのは大変です.
あるライブラリの下のすべてのテーブルを正確に一括削除する方法は、1)最初のステップ(次のライブラリ名を実際の操作のライブラリ名に置き換えるだけ)select concat('drop table',table_name,')from information_schema.TABLES where table_schema='ライブラリ名';2)第2ステップをこのライブラリに切り替え、第1ステップの実行結果を書き出し、すべて実行する
たとえば、kevinライブラリの下にあるすべてのテーブルを一括削除します.
mysql> select concat('drop table ',table_name,';') from information_schema.TABLES where table_schema='kevin';
+--------------------------------------+
| concat('drop table ',table_name,';') |
+--------------------------------------+
| drop table haha;                     |  #        drop  ,            !(  kevin   2  ,   N  ,     ->    )
| drop table heihei;                   |
+--------------------------------------+
2 rows in set (0.00 sec)

mysql> use kevin;                            #   kevin  ,          drop  ,        !
Database changed
mysql> drop table haha;
Query OK, 0 rows affected (0.09 sec)

mysql> drop table heihei;
Query OK, 0 rows affected (0.08 sec)

確かに、上記のようにスペル文を直接コピーして結果をクエリーする方法を採用していますが、マルチテーブルの場合は複雑ですが、フォーマットを調整する必要があります.最適化案は、クエリー結果をファイルに直接エクスポートし、source実行ファイルに直接エクスポートすることです.方法は次のとおりです.
1) mysql               。
[root@localhost ~]# vim /etc/my.cnf 
.......
[mysqld]
secure_file_priv=/opt/mysql/data                 //    mysql        ,            /opt/mysql/data   

    /opt/mysql/data    sql    
[root@localhost ~]# chown -R mysql.mysql /opt/mysql

  mysql  
[root@localhost ~]# /etc/init.d/mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

 kevin            /opt/mysql/data   
mysql> select concat('drop table ',table_name,';') from information_schema.TABLES where table_schema='kevin';
+--------------------------------------+
| concat('drop table ',table_name,';') |
+--------------------------------------+
| drop table anan;                     |
| drop table beibei;                   |
| drop table haha;                     |
| drop table hehe;                     |
| drop table heihei;                   |
| drop table huihui;                   |
| drop table huohuo;                   |
| drop table jiajia;                   |
| drop table jingjing;                 |
| drop table liuliu;                   |
| drop table popo;                     |
| drop table qiuqiu;                   |
| drop table renren;                   |
| drop table youyou;                   |
+--------------------------------------+
14 rows in set (0.00 sec)

        kevin      
[root@localhost ~]# cat /opt/mysql/data/table.txt 
drop table anan;
drop table beibei;
drop table haha;
drop table hehe;
drop table heihei;
drop table huihui;
drop table huohuo;
drop table jiajia;
drop table jingjing;
drop table liuliu;
drop table popo;
drop table qiuqiu;
drop table renren;
drop table youyou;

mysql> select concat('drop table ',table_name,';') from information_schema.TABLES where table_schema='kevin' into outfile '/opt/mysql/data/table.txt';
Query OK, 14 rows affected (0.00 sec)

mysql> source /opt/mysql/data/table.txt;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
Empty set (0.00 sec)

mysql> 

==============================================================file_priv説明==================MySQL 5.7バージョン後にsecure_が導入されましたfile_privパラメータ、このパラメータは、LOAD DATA、SELECTなどのデータのインポートとエクスポート操作の効果を制限するために使用されます.OUTFILE, and LOAD_FILE()はどの指定ディレクトリに転送されますか.これらの操作には、ユーザーがFILE権限を持つ必要があります.mysqlプロファイルmy.cnfの[mysqld]領域での構成:1)このパラメータが空または"/"に設定されている場合、MySQLサービスはデータを任意のディレクトリにエクスポートできます.2)このパラメータが特定のディレクトリ名に設定されている場合、MySQLサービスはこのディレクトリでのみファイルのインポートとエクスポート操作を実行できます.このディレクトリは存在し、mysqlユーザー権限に設定する必要があります.MySQLサービスは作成しません.3)このパラメータがNULLの場合、MySQLサービスではインポートおよびエクスポート操作が禁止されます.4)このパラメータ構成がない場合、Mysqlサービスはデフォルトでこの機能を開いていません.つまり、データのインポート・エクスポート操作ができません.
構成例:
1)  mysql      ,        (            mysql.mysql)
[root@localhost ~]# vim /usr/local/my.cnf
[mysqld]
......
secure_file_priv=                     //     secure_file_priv="/"

[root@localhost ~]# /etc/init.d/mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

     /mnt/data   , 
[root@localhost ~]# mkdir /mnt/data
[root@localhost ~]# chown -R mysql.mysql /mnt/data/

  mysql  secure-file-priv    :
mysql> select version();
+------------+
| version()  |
+------------+
| 5.6.39-log |
+------------+
1 row in set (0.02 sec)

mysql> show global variables like '%secure%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_auth      | OFF   |
| secure_file_priv | /     |
+------------------+-------+
2 rows in set (0.00 sec)

      /mnt/data/data.txt   ,           ,mysql               。
[root@localhost ~]# mysql -p123456
mysql> select concat('drop table ',table_name,';') from information_schema.TABLES where table_schema='kevin' into outfile '/mnt/data/table.txt';

  kevin      
mysql> use kevin;
mysql> source /mnt/data/table.txt;
mysql> show tables;                                 //  kevin ,          。

2)    mysql      ,         /opt/kevin/data ,   :
[root@localhost ~]# vim /usr/local/my.cnf
[mysqld]
......
secure_file_priv= /opt/kevin/data

[root@localhost ~]# mkdir -p /opt/kevin/data
[root@localhost ~]# chown -R mysql.mysql /opt/kevin/data

3)  mysql            。
[root@localhost ~]# vim /usr/local/my.cnf
[mysqld]
......
secure_file_priv= NULL

[root@localhost ~]# mkdir -p /opt/kevin/data
[root@localhost ~]# chown -R mysql.mysql /opt/kevin/data

mysql> select concat('drop table ',table_name,';') from information_schema.TABLES where table_schema='kevin' into outfile '/opt/data/table.txt';   
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
mysql> 

4)  my.cnf   secure_file_priv      ,          ,            。
mysql> select concat('drop table ',table_name,';') from information_schema.TABLES where table_schema='kevin' into outfile '/opt/data/table.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement