X

MySQL 的 mysqldump 移除 AUTO_INCREMENT=* 字串

MySQL 備份或者資料庫架構的匯出, 都會使用 mysqldump 來匯, 備份資料/還原都很方便, 但是匯出資料庫架構這方面, 對於 AUTO_INCREMENT 的處理就有點小麻煩了.

MySQL 匯出 DB Schema 的參數:(不匯出資料)

mysqldump -u root -d DB_NAME # "-d" 就不會將資料一起匯出來

Database Schema 匯出範例

因為 DB Schema 匯出的動作, 若有資料, 且資料內容有自動累加值(AUTO_INCREMENT)的欄位, 匯出的內容在 Create Table 的結尾, 會紀錄下一筆新資料要從第幾個序號開始, 所以不會從 1 號開始(若 AUTO_INCREMENT=9, 新增那筆就會由 9 開始).

Schema 匯出的範例:

CREATE TABLE `table_name` (
  `id` bigint(20) unsigned NOT NULL auto_increment,
  PRIMARY KEY  (`id`),
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

mysqldump 移除 AUTO_INCREMENT=* 字串

通常都是 mysqldump -u root -d DB_NAME 匯出後, 再手動將 AUTO_INCREMENT=* 移除.

man mysqldump 想要找匯出的內容中, 是否能 不要包含 AUTO_INCREMENT 的資訊, 找不到可以用的參數, 只好於匯出時用 sed 來取代囉~

下面這兩個都是將匯出內容的 AUTO_INCREMENT=* 移除的指令, 看喜歡用哪個囉~(我習慣用第一個)

  • mysqldump -u root -d DB_NAME | sed 's/AUTO_INCREMENT=[0-9]*\s//g'
  • mysqldump -u root -d DB_NAME --compact | sed 's/\(.*ENGINE.*AUTO_INCREMENT=\).*/\10;/g'

相關網頁

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post