如何从mysql转储中获取所有完整的CREATE TABLE语句

时间:2017-12-05 15:50:02

标签: mysql regex awk sed

到目前为止我得到了这个:

$ bzcat mysqldump.pplware.sql.bz2 | grep -A 10 "^CREATE TABLE.*"
CREATE TABLE `wp_ak_twitter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tw_id` varchar(255) NOT NULL,
  `tw_text` varchar(255) NOT NULL,
  `tw_reply_username` varchar(255) DEFAULT NULL,
  `tw_reply_tweet` varchar(255) DEFAULT NULL,
  `tw_created_at` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `tw_id` (`tw_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
--
CREATE TABLE `wp_audit_trail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `operation` varchar(40) NOT NULL DEFAULT '',
  `user_id` int(11) NOT NULL,
  `ip` int(11) unsigned NOT NULL DEFAULT '0',
  `happened_at` datetime NOT NULL,
  `item_id` int(11) DEFAULT NULL,
  `data` longtext,
  `title` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9442523 DEFAULT CHARSET=latin1;

..等等。 但是10行限制是任意的,一些CREATE TABLES更短,有些更长。如何获得所有完整的CREATE TABLE定义?

2 个答案:

答案 0 :(得分:1)

如何在模式之间打印行:CREATE TABLE;分号: -

bzcat mysqldump.pplware.sql.bz2 | awk '/CREATE TABLE/{f=1}/\;/{f=0}f||/\;/'

OR

bzcat mysqldump.pplware.sql.bz2 | awk '/CREATE TABLE/,/\;/'

答案 1 :(得分:0)

如何在没有数据的情况下获取定义:

mysqldump ... --no-data ...

(当然,这不会回答问题的问题,但可能在某些情况下提供了一个简单的解决方案。)