2013-03-18 125 views
0

我在Mac 10.7.5上使用MySql 5.5。从shell(我使用bash),我希望能够运行命令或截断所有表中的数据。另外,我想输入一个不会提示我输入密码的命令。我试过这个,我发现在另一个SO帖子上,但没有骰子。什么是可用于截断所有数据库表数据的shell命令?如何截断我的MySQL数据库中的所有数据?

mysql -umyuser -p -e 'SET FOREIGN_KEY_CHECKS = 0; show tables' my_db | while read table; do mysql -e -umyuser -p "truncate table $table" my_db; done 
Enter password: 

mysql Ver 14.14 Distrib 5.5.25, for osx10.6 (i386) using readline 5.1 
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Usage: mysql [OPTIONS] [database] 
    -?, --help   Display this help and exit. 
    -I, --help   Synonym for -? 
    --auto-rehash  Enable automatic rehashing. One doesn't need to use 
        'rehash' to get table and field completion, but startup 
        and reconnecting may take a longer time. Disable with 
        --disable-auto-rehash. 
        (Defaults to on; use --skip-auto-rehash to disable.) 
    -A, --no-auto-rehash 
        No automatic rehashing. One has to use 'rehash' to get 
        table and field completion. This gives a quicker start of 
        mysql and disables rehashing on reconnect. 
    --auto-vertical-output 
        Automatically switch to vertical output mode if the 
        result is wider than the terminal width. 
    -B, --batch   Don't use history file. Disable interactive behavior. 
        (Enables --silent.) 
    --character-sets-dir=name 
        Directory for character set files. 
    --column-type-info Display column type information. 
    -c, --comments  Preserve comments. Send comments to the server. The 
        default is --skip-comments (discard comments), enable 
        with --comments. 
    -C, --compress  Use compression in server/client protocol. 
    -#, --debug[=#]  This is a non-debug version. Catch this and exit. 
    --debug-check  Check memory and open file usage at exit. 
    -T, --debug-info Print some debug info at exit. 
    -D, --database=name Database to use. 
    --default-character-set=name 
... 
+1

没有骰子后恢复它,你可能要通过所有的表格和'TRUNCATE的迭代“他们一个接一个。 – 2013-03-18 13:15:42

+0

你是什么意思“没有骰子”?我发布了这个问题,因为我无法得到命令的工作,并希望有人知道解决方法。 – Dave 2013-03-18 15:24:49

+0

如果你不想输入密码,你可以把它放到你的my.cnf配置文件中。您可能希望将权限设置为600,以便其他人无法看到它。 – ckim 2013-03-18 17:46:56

回答

5

你可以转储数据库没有数据:

mysqldump -u myuser -p --databases --add-drop-database --no-data my_db > my_db.sql 

mysql -u myuser -p < my_db.sql 
+0

非常聪明! (+1)你甚至可以一口气做到这一点:'mysqldump -u [user] -p [password] --databases --add-drop-table --no-data my_db | mysql -u [user] -p [password]'。请注意,在'-u'和'-p'的规范形式中,选项开关与其值之间没有空格。我还假设你的意思是'--add-drop-table'而不是'--add-drop-databases'。将'--databases'替换为一个数据库的名称以仅清除一个给定的数据库。 – RandomSeed 2013-03-18 13:34:38

相关问题