92

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

4

5 に答える 5

76

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

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:)

コメントのおかげで新しいUPDATE。

これ\bは役に立たず、コマンドが壊れることがあります。説明については、このSOトピックを参照してください。したがって、最適化された答えは次のようになります。

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*//g' > <filename>.sql
于 2013-03-27T10:22:20.580 に答える
54

JoDevの答えは、sedの正規表現を少し調整するだけで完璧に機能しました。

mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
于 2014-10-12T18:09:30.157 に答える
4

AUTO_INCREMENTテーブル定義を生成するのは、デフォルトで--optに含まれている--create-optionsです。

ベーステーブルのみが必要な場合は、

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
于 2014-07-08T22:09:49.097 に答える
2

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

データベースでバージョン管理を行うにはどうすればよいですか?

次に、このスクリプトを作成しました。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にプッシュする前に、すべてのデータベースで行うのを忘れた構造上の変更があるかどうかを常に確認します。

于 2016-06-28T19:29:30.787 に答える
-2

mysqldump -u [USER] -p [PASSWORD] -d --skip-opt --single-transaction [DB_SCHEMA]> [FILE.ESTENSIONE]

于 2014-03-14T15:37:44.207 に答える