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