首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自动将所有mysql表转储到单独的文件中?

自动将所有mysql表转储到单独的文件中?
EN

Stack Overflow用户
提问于 2010-09-08 23:06:08
回答 7查看 82K关注 0票数 78

我想把每个mysql表的转储文件放到单独的文件中。该手册指出,此操作的语法为

代码语言:javascript
复制
mysqldump [options] db_name [tbl_name ...]

这表明您事先就知道表的名称。我现在可以设置一个知道每个表名的脚本,但是假设我添加了一个新表,却忘记了更新转储脚本。那么我缺少一个或多个表的转储。

有没有一种方法可以将每个现有的表自动转储到单独的文件中?或者我必须执行一些脚本;查询数据库,获取所有表名,然后按名称转储它们。

如果我走script-fu路线,什么脚本语言可以访问mysql数据库?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-06-10 07:54:14

mysqldump命令行程序会为您完成这项工作--尽管the docs对此并不清楚。

需要注意的一件事是,拥有mysqld的用户必须能够写入~/output/dir。在Mac OS X上:

代码语言:javascript
复制
sudo chown -R _mysqld:_mysqld ~/output/dir
mysqldump --user=dbuser --password --tab=~/output/dir dbname

运行上述程序后,您将拥有一个包含每个表的模式(create table语句)的tablename.sql文件和包含数据的tablename.txt文件。

如果您只想使用模式转储,请添加--no-data标志:

代码语言:javascript
复制
mysqldump --user=dbuser --password --no-data --tab=~/output/dir dbname
票数 65
EN

Stack Overflow用户

发布于 2013-06-10 11:11:14

下面的脚本将表数据作为SQL命令转储到单独的压缩文件中。它不需要位于MySQL服务器主机上,也不会在脚本中硬编码密码,并且只针对特定的数据库,而不是服务器上的所有数据库:

代码语言:javascript
复制
#!/bin/bash

# dump-tables-mysql.sh
# Descr: Dump MySQL table data into separate SQL files for a specified database.
# Usage: Run without args for usage info.
# Author: @Trutane
# Ref: http://stackoverflow.com/q/3669121/138325
# Notes:
#  * Script will prompt for password for db access.
#  * Output files are compressed and saved in the current working dir, unless DIR is
#    specified on command-line.

[ $# -lt 3 ] && echo "Usage: $(basename $0) <DB_HOST> <DB_USER> <DB_NAME> [<DIR>]" && exit 1

DB_host=$1
DB_user=$2
DB=$3
DIR=$4

[ -n "$DIR" ] || DIR=.
test -d $DIR || mkdir -p $DIR

echo -n "DB password: "
read -s DB_pass
echo
echo "Dumping tables into separate SQL command files for database '$DB' into dir=$DIR"

tbl_count=0

for t in $(mysql -NBA -h $DB_host -u $DB_user -p$DB_pass -D $DB -e 'show tables') 
do 
    echo "DUMPING TABLE: $DB.$t"
    mysqldump -h $DB_host -u $DB_user -p$DB_pass $DB $t | gzip > $DIR/$DB.$t.sql.gz
    tbl_count=$(( tbl_count + 1 ))
done

echo "$tbl_count tables dumped from database '$DB' into dir=$DIR"
票数 81
EN

Stack Overflow用户

发布于 2013-08-07 03:40:43

下面是相应的导入。

代码语言:javascript
复制
#!/bin/bash

# import-files-mysql.sh
# Descr: Import separate SQL files for a specified database.
# Usage: Run without args for usage info.
# Author: Will Rubel
# Notes:
#  * Script will prompt for password for db access.

[ $# -lt 3 ] && echo "Usage: $(basename $0) <DB_HOST> <DB_USER> <DB_NAME> [<DIR>]" && exit 1

DB_host=$1
DB_user=$2
DB=$3
DIR=$4

DIR=$DIR/*


echo -n "DB password: "
read -s DB_pass
echo
echo "Importing separate SQL command files for database '$DB' into '$DB'"

file_count=0


for f in $DIR

do 
    echo "IMPORTING FILE: $f"

    gunzip -c $f | mysql -h $DB_host -u $DB_user -p$DB_pass $DB

    (( file_count++ ))
done

echo "$file_count files importing to database '$DB'"
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3669121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档