MySQLでデータではなくテーブル構造をバックアップするにはどうすればよいですか


20

データベースのバックアップを作成するためにMySQL Administratorを使用しています。データベース全体とそのすべてのテーブルを完全にバックアップできます。サイズが非常に大きいテーブルがいくつかあるため、テーブルの構造(要素のみ)のみをバックアップし、データはバックアップできないのではないかと考えています。

回答:


40

--no-datamysqldumpでスイッチを使用して、データをダンプせず、テーブル構造のみをダンプするように指示します。

これにより、テーブルのCREATE TABLEステートメントが出力されます。

このようなもの

mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql

特定のテーブルをターゲットにするには、データベース名の後にそれらを入力します。

mysqldump --no-data -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_no-data

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html


+1はほぼ正しいように見えます。
デビッド

LukeRに感謝します。私はそれで管理できました。執筆の時点では、mysqldumpについては何も知りませんでしたが、-no-dataスイッチで問題を解決できました。次に、MySQL Administratorでそのテーブルの「CREATE SCRIPT」も見つけたので、この代替方法でもこの問題を解決できました。

3

LukeRが言ったように、mysqldumpの--no-dataオプションはあなたが望むことをします。

それに加えて、すべてのmysqlデータベースをプレーンテキストファイルにダンプし、各データベースのテーブルスキーマとデータ用に個別のダンプファイルを作成するバックアップスクリプトですデータ。これは、CREATE TABLE / CREATE INDEXなどのコマンドだけで小さなファイルを既に作成している場合に非常に簡単です。

#!/ bin / bash

#backup-mysql.sh
#
#Craig Sanders <cas@taz.net.au>
#このスクリプトはパブリックドメインにあります。好きなことをしてください。

MYUSER = "USERNAME"
MYPWD = "PASSWD"

ARGS = "-single-transaction --flush-logs --complete-insert"

DATABASES = $(mysql -D mysql --skip-column-names -B -e 'show databases;' | egrep -v 'information_schema');


BACKUPDIR = / var / backups / mysql

YEAR = $(date + "%Y")
MONTH = $(date + "%m")
DAY = $(date + "%d")

DATE = "$ YEAR- $ MONTH / $ YEAR- $ MONTH- $ DAY"

mkdir -p $ BACKUPDIR / $ DATE
cd $ BACKUPDIR / $ DATE

for i for $ DATABASES; 行う
  echo -n "$ iのバックアップ:スキーマ..."
  mysqldump $ ARGS --no-data -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql

  echo -n "data ..."
  mysqldump $ ARGS --skip-opt --no-create-db --no-create-info -u $ MYUSER -p $ MYPWD $ i> $ i.data.sql

  echo -n "compressing ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  エコー「完了」。
やった

#30日より古いバックアップファイルを削除する
OLD = $(find $ BACKUPDIR -type d -mtime +30)
if [-n "$ OLD"]; それから
        古いバックアップファイルを削除するエコー:$ OLD
        echo $ OLD | xargs rm -rfv
fi

クレイグ、答えてくれてありがとう!LukeRの回答を最初に選んだだけです。スクリプトをありがとう、それは良いリファレンスです。

--routinesスキーマスクリプトに追加することをお勧めしますか?
ジョナサン

0

また、mysqlコマンドラインインターフェイスを使用して手動で実行しDESCRIBE <tablename>、結果をコピーして貼り付けることもできます。


DESCRIBEは、コピーして貼り付けることができるものを提供しません。SHOW CREATE TABLEがします。
デビッドパシュリー

CREATEステートメントに必要なもののダンプではありませんが、列のタイプとリレーションを示しています
-warren
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.