2011-04-13 66 views
0

mysqldump是否有可能每行轉儲一個查詢?可以mysqldump每行做一個查詢嗎?

例如,目前轉儲創建表表達式,像這樣:

-- 
-- Table structure for table `post` 
-- 

CREATE TABLE IF NOT EXISTS `post` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(160) NOT NULL, 
    `slug` varchar(255) NOT NULL, 
    `url` varchar(600) NOT NULL, 
    `domain` varchar(90) NOT NULL, 
    `author` int(11) NOT NULL, 
    `description` text, 
    `category` int(11) DEFAULT NULL, 
    `score` int(11) NOT NULL, 
    `ip` varchar(255) DEFAULT NULL, 
    `created` datetime NOT NULL, 
    `comment_count` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `uc_slug` (`slug`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `users` 
-- 

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `login` varchar(12) NOT NULL, 
    `password` varchar(45) NOT NULL, 
    `email` varchar(150) NOT NULL, 
    `about` varchar(300) DEFAULT NULL, 
    `last_visit` datetime DEFAULT NULL, 
    `ip` varchar(255) DEFAULT NULL, 
    `created` datetime NOT NULL, 
    `perm_mod` int(11) DEFAULT NULL, 
    `perm_admin` int(11) DEFAULT NULL, 
    `post_count` int(11) NOT NULL DEFAULT '0', 
    `comment_count` int(11) NOT NULL DEFAULT '0', 
    `vote_count` int(11) NOT NULL DEFAULT '0', 
    `voted_count` int(11) NOT NULL DEFAULT '0', 
    `forgot_key` varchar(150) DEFAULT NULL, 
    `cookie_key` varchar(40) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; 

相反,我希望它傾倒這樣的:

-- 
-- Table structure for table `post` 
-- 

CREATE TABLE IF NOT EXISTS `post` (`id` int(11) NOT NULL AUTO_INCREMENT,`title` varchar(160) NOT NULL,`slug` varchar(255) NOT NULL,`url` varchar(600) NOT NULL,`domain` varchar(90) NOT NULL,`author` int(11) NOT NULL,`description` text,`category` int(11) DEFAULT NULL,`score` int(11) NOT NULL,`ip` varchar(255) DEFAULT NULL,`created` datetime NOT NULL,`comment_count` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),UNIQUE KEY `uc_slug` (`slug`) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `users` 
-- 

CREATE TABLE IF NOT EXISTS `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`login` varchar(12) NOT NULL,`password` varchar(45) NOT NULL,`email` varchar(150) NOT NULL,`about` varchar(300) DEFAULT NULL,`last_visit` datetime DEFAULT NULL,`ip` varchar(255) DEFAULT NULL,`created` datetime NOT NULL,`perm_mod` int(11) DEFAULT NULL,`perm_admin` int(11) DEFAULT NULL,`post_count` int(11) NOT NULL DEFAULT '0',`comment_count` int(11) NOT NULL DEFAULT '0',`vote_count` int(11) NOT NULL DEFAULT '0',`voted_count` int(11) NOT NULL DEFAULT '0',`forgot_key` varchar(150) DEFAULT NULL,`cookie_key` varchar(40) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; 

我一直在經歷的args作爲的mysqldump ,並且找不到任何可以做到這一點的事情。

+2

爲什麼? – zerkms 2011-04-13 04:24:39

+0

需要成爲mysql_query()的一行;逐行處理 – samJL 2011-04-13 20:58:40

回答

2

事實上,沒有任何命令行切換來實現這一點。相反,我建議您通常進行轉儲,然後使用像Notepad++這樣的文本編輯器打開轉儲文件。

首先選擇塊轉換爲單行,然後選擇下圖中的菜單選項。

Unwrap Text

這是結果(重複每個塊轉換爲單行):

enter image description here

+0

謝謝,這將工作,有點乏味,但謝天謝地,我的轉儲只有10桌左右 – samJL 2011-04-13 16:12:08

1

我有類似的任務 - 要格式化的mysqldump輸出文件是mysql的init_file選項兼容。這是解決方案:

sed ':a;N;$!ba;s/\n/THISISUNIQUESTRING/g' | sed -e 's/;THISISUNIQUESTRING/;\n/g' | sed -e 's/THISISUNIQUESTRING//g' 

這將替換所有換行字符與一個奇怪的字符串不存在於文件中。下一個sed用分號和換行符代替這個字符串和分號的組合。這是必要的,因爲表數據可以包含包含「;」的字符串值,所以直接刪除所有換行符並在分號後添加它們不是通用的。 之後剩下的怪異字符串剛從文本中刪除。

順便說一句,我運行mysqldump與--comments=false參數,因爲註釋也不允許「init_file」的東西。

1

如果您確實需要單個查詢,我書中最實用的解決方案就是使用mysqldump的內置功能。 --skip-extended-insert標誌是你想要的,它在文檔中並不清楚,但它給你所需的轉儲格式。

相關問題