mysqldumpに適切なテーブル作成オプション[存在しない場合]を追加する方法があるかどうか疑問に思っています。何か案は?
8 に答える
SQLファイルでこれを使用してみてください:
sed 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path>
または保存する
sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path>
理想的ではありませんが、機能します:P
ある情報源によると、mysqldump にはこのオプションがありません。
このオプションは、ダンプ ファイルをインポートして戻すときに使用できます。この--force
場合、MySQL は、重複するテーブルを作成しようとして生成されたエラーを無視します。ただし、この方法では、他のエラーも無視されることに注意してください。
CREATE TABLE
それ以外の場合は、出現するすべての を に置き換えるスクリプトを使用してダンプ ファイルを実行できますCREATE TABLE IF NOT EXISTS
。
@Pawelsed
で説明されているように使用するとうまくいきます。それにもかかわらず、絶対に必要な以上の潜在的なエラー ソースを介してデータをパイプするという考えが気に入らないかもしれません。この場合、2 つの別々のダンプを使用できます。
- テーブル定義を含む最初のダンプ (
--no-data --skip-add-drop-table
) - データのみの 2 番目のダンプ (
--no-create-info --skip-add-drop-table
)
ただし、注意すべき点が他にもいくつかあります (例: トリガー)。詳細はマニュアルを確認してください。
あなたが望むものではありませんが、--add-drop-table
すべての CREATE には対応する DROP TABLE ステートメントがプレフィックスとして付けられています。
それ以外の場合は、単純な検索/置換 (たとえば、sed
) を使用します。
これでbashスクリプトを作成します...必ず実行可能にしてください。(chmod 0777 dump.sh)
ダンプ.sh
#!/bin/bash
name=$HOSTNAME
name+="-"
name+=$(date +"%Y-%m-%d.%H:%M")
name+=".sql"
echo $name;
mysqldump --replace --skip-add-drop-table --skip-comments izon -p > "$name"
sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' "$name"
sed は、末尾に「g」(グローバル) を付けないと、はるかに高速になります。
例えば:
mysqldump -e <database> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /' > <database>.sql