如何在MySQL数据库中备份单个表?

550

默认情况下,mysqldump将备份整个数据库。我需要备份MySQL中的单个表。这是否可行?如何恢复它?


压缩数据转储:mysqldump --defaults-group-suffix=db your_db table_name | gzip > table_name-$(date +%Y%m%d-%H%M).sql.gz - undefined
10个回答

1028

从.sql文件中转储和恢复单个表

转储

mysqldump db_name table_name > table_name.sql

从远程数据库导出数据

mysqldump -u <db_username> -h <db_host> -p db_name table_name > table_name.sql

更多参考资料:

http://www.abbeyworkshop.com/howto/lamp/MySQL_Export_Backup/index.html

还原

mysql -u <user_name> -p db_name
mysql> source <full_path>/table_name.sql

或者在一行中执行:

mysql -u username -p db_name < /path/to/table_name.sql


从压缩的 (.sql.gz) 格式中导入和还原单个表格

来源: John McGrath

导入

mysqldump db_name table_name | gzip > table_name.sql.gz

恢复

gunzip < table_name.sql.gz | mysql -u username -p db_name


20
通常情况下,SQL 很容易被压缩 -- 你可以通过 gzip 命令来处理上面的命令,生成的文件会更小:mysqldump db_name table_name | gzip > table_name.sql.gz恢复的时候:gunzip < table_name.sql.gz | mysql -u 用户名 -p 数据库名 - John McGrath
如果您想在命令行中包含密码怎么办?因此,您已经使用了-pPASSWORD。 - Freedo
1
mysqldump --where='where_condition', -w 'where_condition' 只导出符合给定 WHERE 条件的行。 - Eugen Konkov

32

mysqldump可以使用tbl_name参数,以便只备份给定的表格。

mysqldump -u -p yourdb yourtable > c:\backups\backup.sql

16

尝试

for line in $(mysql -u... -p... -AN -e "show tables from NameDataBase");
do 
mysqldump -u... -p.... NameDataBase $line > $line.sql ; 
done
  • $line内容名称表格 ;)

1
这对于将数据库转储到单独的表查询中非常方便 - 我可以知道选项具体是做什么的吗? - xiankai
1
你好,-AN(--no-auto-rehash,**-A** | --skip-column-names,**-N** 不在结果中写入列名。)-e(--execute=statement,**-e** statement | 执行语句并退出。默认的输出格式与--batch产生的相同。)来源:http://dev.mysql.com/doc/refman/5.6/en/mysql-command-options.html - Robin Gomez

14
我们可以使用如下方式,针对任何给定条件的特定表格进行 MySQL 数据库备份:
mysqldump -uusername -p -hhost databasename tablename --skip-lock-tables

如果我们想在表上添加特定的where条件,那么可以使用以下命令。
mysqldump -uusername -p -hhost databasename tablename --where="date=20140501" --skip-lock-tables

12

您可以使用命令行中的 mysqldump

mysqldump -u 用户名 -p 密码 数据库名称 表名称 > "导出路径"

您也可以使用 MySQL Workbench:

转到左侧 > 数据导出 > 选择模式 > 选择表并单击导出


只是一些小信息,省略-p和密码之间的空格 --> -ppassword,但这样不安全。 - Agung Sagita

8

您可以使用 MYSQLWorkbench 工具 轻松地导出选定的表格,单独或一组表格一次性导出,然后按以下步骤导入:如果您在本地运行,则可以添加 主机信息 ,在用户名后添加-h IP.ADDRESS.NUMBER。

mysql -u root -p databasename < dumpfileFOurTableInOneDump.sql 

不幸的是,Mysql Workbench存在一些转义问题,可能会导致导出无用的无效数据... - barell

8
您可以使用以下代码:
  1. 仅针对单个表结构备份

-

mysqldump -d <database name> <tablename> > <filename.sql>
  1. 对于仅包含数据的单表结构

-

mysqldump <database name> <tablename> > <filename.sql>

希望这能有所帮助。


6
你可以使用以下代码:
这个例子会备份sugarcrm数据库并将输出转储到sugarcrm.sql。
# mysqldump -u root -ptmppassword sugarcrm > sugarcrm.sql

# mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql

sugarcrm.sql文件包含sugarcrm数据库中所有表的drop table、create table和insert命令。以下是sugarcrm.sql的部分输出,显示了accounts_contacts表的转储信息:

--

-- 表accounts_contacts的表结构

DROP TABLE IF EXISTS `accounts_contacts`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `accounts_contacts` (
`id` varchar(36) NOT NULL,
`contact_id` varchar(36) default NULL,
`account_id` varchar(36) default NULL,
`date_modified` datetime default NULL,
`deleted` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `idx_account_contact` (`account_id`,`contact_id`),
KEY `idx_contid_del_accid` (`contact_id`,`deleted`,`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client;

--

2

只需使用 mysqldump -u root database table 命令即可备份数据库中的表。如果需要使用密码,可以使用 mysqldump -u root -p pass database table 命令。


1

我遇到了这个问题,并想通过我们的完整工作示例来扩展其他人的答案:

这将在自己的文件中备份模式,然后在每个数据库表中备份其自己的文件。

日期格式意味着您可以根据硬盘空间允许的频率运行此操作。


DATE=`date '+%Y-%m-%d-%H'`
BACKUP_DIR=backups/
DATABASE_NAME=database_name
mysqldump --column-statistics=0  --user=fake --password=secure --host=10.0.0.1  --routines --triggers --single-transaction --no-data --databases ${DATABASE_NAME} | gzip > ${BACKUP_DIR}${DATE}-${DATABASE_NAME}--schema.sql.gz
for table in $(mysql  --user=fake --password=secure --host=10.0.0.1 -AN -e "SHOW TABLES FROM ${DATABASE_NAME};");
    do
    echo ""
    echo ""
    echo "mysqldump --column-statistics=0  --user=fake --password=secure --host=10.0.0.1 --routines --triggers --single-transaction --databases ${DATABASE_NAME} --tables ${table} | gzip > ${BACKUP_DIR}${DATE}-${DATABASE_NAME}-${table}.sql.gz"
    mysqldump --column-statistics=0  --user=fake --password=secure --host=10.0.0.1 --routines --triggers --single-transaction --databases ${DATABASE_NAME} --tables ${table} | gzip > ${BACKUP_DIR}${DATE}-${DATABASE_NAME}-${table}.sql.gz
done

我们将其作为bash脚本每小时运行一次,并实际上进行了HOUR检查,仅在白天备份某些表格,然后在晚上备份所有表格。
为了保留驱动器上的一些空间,该脚本还运行此操作以删除早于X天的备份。
# HOW MANY DAYS SHOULD WE KEEP
DAYS_TO_KEEP=25
DAYSAGO=$(date --date="${DAYS_TO_KEEP} days ago" +"%Y-%m-%d-%H")
echo $DAYSAGO
rm -Rf ${BACKUP_DIR}${DAYSAGO}-*
echo "rm -Rf ${BACKUP_DIR}${DAYSAGO}-*"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接