32

mysqldumpに適切なテーブル作成オプション[存在しない場合]を追加する方法があるかどうか疑問に思っています。何か案は?

4

8 に答える 8

33

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

于 2010-11-09T11:21:57.907 に答える
20

ある情報源によると、mysqldump にはこのオプションがありません。

このオプションは、ダンプ ファイルをインポートして戻すときに使用できます。この--force場合、MySQL は、重複するテーブルを作成しようとして生成されたエラーを無視します。ただし、この方法では、他のエラーも無視されることに注意してください。

CREATE TABLEそれ以外の場合は、出現するすべての を に置き換えるスクリプトを使用してダンプ ファイルを実行できますCREATE TABLE IF NOT EXISTS

于 2010-02-08T09:17:16.503 に答える
15

@Pawelsedで説明されているように使用するとうまくいきます。それにもかかわらず、絶対に必要な以上の潜在的なエラー ソースを介してデータをパイプするという考えが気に入らないかもしれません。この場合、2 つの別々のダンプを使用できます。

  • テーブル定義を含む最初のダンプ ( --no-data --skip-add-drop-table)
  • データのみの 2 番目のダンプ ( --no-create-info --skip-add-drop-table)

ただし、注意すべき点が他にもいくつかあります (例: トリガー)。詳細はマニュアルを確認してください。

于 2012-11-13T15:20:39.353 に答える
7

あなたが望むものではありませんが、--add-drop-tableすべての CREATE には対応する DROP TABLE ステートメントがプレフィックスとして付けられています。

それ以外の場合は、単純な検索/置換 (たとえば、sed) を使用します。

于 2010-02-08T09:15:03.123 に答える
3

これでb​​ashスクリプトを作成します...必ず実行可能にしてください。(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"
于 2014-12-18T21:51:48.393 に答える
1

sed は、末尾に「g」(グローバル) を付けないと、はるかに高速になります。

例えば:

mysqldump -e <database> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /' > <database>.sql 
于 2017-03-28T14:35:03.780 に答える