2013-03-27 10 views
59

私はMySQLデータベースを持っていますが、自動インクリメント値なしで構造体をエクスポートする方法を探しています。 mysqldump --no-dataはほとんど仕事をしますが、auto_increment値を保持します。 PHPMyAdminを使用せずにそれを行う方法はありますか?mysqldump - 自動インクリメントのない構造体をエクスポートする

+0

MySQL 5.5(サーバ)のように、 '--no-data'はデフォルトでauto_incrementの値を省略します。 –

+0

@JoeyAdamsあなたは確かですか?これは私が経験する動作ではありません – aland

+2

@JoeyAdams MySQL 5.7。* --no-dataを使用すると、mysqldumpはauto_incrementを無視しません。 –

答えて

49

あなたはこれを行うことができます。

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//' > <filename>.sql 

はあなたが適切作品にsedをしたい場合は、他の人が述べたように、このようgためのグラムローブ交換)のパラメータを追加します。

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//g' > <filename>.sql 

(これはGUIツールがインストールされている場合のみ有効です:mysqldump --skip-auto-increment

+0

最後の1つは素晴らしい仕事。ありがとう。 – Paris

+10

'--skip-auto-increment'は本当の選択肢ではないと思います。私は[documentation](http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html)で見つけることができません。この問題に関する2つのMySQLバグのいずれにも言及していません:[20786](http://bugs.mysql.com/bug.php?id=20786)、[30957](http://bugs.mysql.com/bug .php?id = 30957)。どのバージョンのmysqldumpがこのオプションを持っていますか? – Rich

+1

'--skip-auto-increment'は、正しく覚えていれば、MySQL GUIツールに追加されたオプションです。 (わからない^^)実際にはそれは本当に解決策ではありません! しかし、2番目のinlineコマンドは正しいです、私は[ここ](http://bugs.mysql。com/bug.php?id = 20786)ここでは、** autoincrement **の問題について話し、 'sed'フィルタリングのアイデアを提供しています! – JoDev

-1

mysq ldump -u [USER] -p [パスワード] -d --skip-opt - 単独トランザクション[DB_SCHEMA]> [FILE.ESTENSIONE]

+6

これにより、最後にauto_increment値だけでなく、有効になっているフィールドのauto_incrementフラグも削除されます。 – Aquarion

+0

'--skip-opt'については、[こちら](http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option_mysqldump_opt)と[ここをクリック](http://bugs.mysql .com/bug.php?id = 22941) – Chris

3

これは--create-optionsであり、デフォルトでは、AUTO_INCREMENTテーブル定義を生成します。

あなただけのベーステーブルをしたい場合は、

mysql -hlocalhost -uuser -ppass --skip-column-names --batch \ 
    -e "select table_name from tables where table_type = 'BASE TABLE' and table_schema = 'schemaname'" INFORMATION_SCHEMA \ 
| xargs mysqldump -hlocalhost -uuser -ppass \ 
    --no-data --skip-triggers --skip-opt --no-create-db \ 
    schemaname 

あなたが意見をしたい場合は、あまりにもトリガーやルーチン、

mysqldump -hlocalhost -uuser -ppass \ 
    --skip-opt --events --routines --no-data \ 
    schemaname 
+2

これはまた、自動増分フィールド、 'ドロップテーブル'、文字セットなどを削除することに注意してください。 – Deanna

32

JoDevの答えは、SEDの正規の小さな調整で私のために完璧に働きました式:

mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql 
0

この投稿のおかげで、私は質問に答えることができました:

データベースのバージョン管理はどうすればできますか?

その後、私はちょうどこのスクリプトを作成しました:db_bkp.sh

#!/bin/sh 
filename="db_structure.sql" 
backupfolder="/var/www/" 
fpath="$backupfolder/$filename" 
usr="DBUSER" 
pass="DBPASS" 
db="DBNAME" 
mysqldump --user=$usr --password=$pass --no-data $db | sed 's/ AUTO_INCREMENT=[0-9]*//g' > "$fpath" 

それから私は、crontabファイルにこれを追加しました:

30 5 * * * sh /home/scripts/db_bkp.sh 

その後、私のレポで、私はgitのためにdb_structure.sql、結果を追加し、プッシュする前にprodに変更私はすべてのdbsで何かするのを忘れた構造上の変更があるかどうかを常にチェックします。

関連する問題