我正在使用mysqldump为MySQL数据库创建规范安装脚本。我想为数据库中有能力的一半表转储数据,但是从其他表中排除数据。我知道以下两个命令:
- 无数据
- 忽略表
但第一个适用于所有表,我相信第二个表完全从转储(例如create语句)中排除表,而不仅仅是表中的数据。有谁知道如何使用mysqldump来实现我的目标?
编辑:
发现了一个近乎重复的问题:mysqldump entire structure but only data from selected tables in a single command
答案 0 :(得分:4)
如何对mysqldump
进行两次单独调用?一个用于创建数据库并忽略您不希望数据来自的表。另一个只是创建没有数据的剩余表。您可以单独运行这两个脚本,也可以将它们连接在一起以创建最终脚本。
答案 1 :(得分:2)
还有另外一个选项可以完成所有工作(只需一次调用mysql
本身),但可能永远不会尝试。
向H.P.致敬Lovecraft,(并基于Anuya的stored procedure to create INSERT statements)这里的无法调用的存储过程:
注意:这个不圣洁的,神秘的存储过程只能由一个疯子来管理,并且纯粹出于教育目的而在下面提供。
DELIMITER $$
DROP PROCEDURE IF EXISTS `pseudoDump` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pseudoDump`(
in_db varchar(20),
in_tables varchar(200),
in_data_tables varchar(200)
)
BEGIN
DECLARE Whrs varchar(500);
DECLARE Sels varchar(500);
DECLARE Inserts varchar(200);
DECLARE tablename varchar(20);
DECLARE ColName varchar(20);
SELECT `information_schema`.`TABLE_NAME` INTO tablename FROM TABLES WHERE TABLE_SCHEMA = in_db AND TABLE_NAME IN ( in_tables );
tabdumploop: LOOP
SHOW CREATE TABLE tablename;
LEAVE tabdumploop;
END LOOP tabdumploop;
SELECT `information_schema`.`TABLE_NAME` INTO tablename FROM TABLES WHERE TABLE_SCHEMA = in_db ;
datdumploop: LOOP
SELECT group_concat(concat('concat(\'"\',','ifnull(',column_name,','''')',',\'"\')')) INTO @Sels from `information_schema`.`COLUMNS` where table_schema=in_db and table_name=tablename;
SELECT group_concat('`',column_name,'`') INTO @Whrs from `information_schema`.`COLUMNS` where table_schema=in_db and table_name=tablename;
SET @Inserts=concat("select concat('insert IGNORE into ", in_db,".",tablename," values(',concat_ws(',',",@Sels,"),');') as MyColumn from ", in_db,".",tablename, " where 1 group by ",@Whrs, ";");
PREPARE Inserts FROM @Inserts;
EXECUTE Inserts;
LEAVE datdumploop;
END LOOP datdumploop;
END $$
DELIMITER ;
...幸运的是,我从见证了这个程序肯定会被MySQL Bug #44009发出的令人痛苦的恐惧中得救了。
答案 2 :(得分:0)
mysqldump -u user -h host.example.com -p database table1 table2 table3
答案 3 :(得分:0)
您可以在这里找到所需内容:
http://www.electrictoolbox.com/mysqldump-selectively-dump-data/
使用where语句可能是实现您尝试的最简单方法。