MySQLデータベースがあり、自動インクリメント値なしで、その構造のみをエクスポートする方法を見つけようとしています。 mysqldump --no-data
はほとんど仕事をしますが、auto_increment値を保持します。 PHPMyAdminを使用せずにそれを行う方法はありますか(それができることを知っています)?
あなたはこれを行うことができます :
mysqldump -u root -p -h <db-Host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//' > <filename>.sql
他の人が述べたように、sed
が適切に機能するようにしたい場合は、次のようにg
(g lobal replacementの場合)パラメーターを追加します。
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
)
JoDevの答えは、sedの正規表現を少し調整するだけで、私にとっては完璧に機能しました。
mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
--create-optionsは、デフォルトで--optに含まれており、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
この投稿のおかげで、質問に答えることができました。
データベースでバージョン管理を行うにはどうすればよいですか?
次に、このスクリプトを作成しました: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
次に、リポジトリに結果を追加しました、db_structure.sql
gitに変更をprodにプッシュする前に、すべてのデータベースで行うのを忘れた構造的な変更があるかどうかを常に確認します。