web-dev-qa-db-ja.com

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

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

20
user16629

使用 --no-data mysqldumpで切り替えて、データをダンプしないように指示します。テーブル構造のみです。

これにより、テーブルの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

40
LukeR

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

これに追加するには、すべてのmysqlデータベースをプレーンテキストファイルにダンプし、各データベースのテーブルスキーマとデータに個別のダンプファイルを作成するバックアップスクリプトを次に示します(別のmysqlサーバーでテーブルを復元または作成することはよくあります)データ、そしてCREATE TABLE/CREATE INDEXなどのコマンドだけですでに小さなファイルを持っている場合は、はるかに簡単です)

#! /bin/bash

# backup-mysql.sh 
#
#Craig Sanders <[email protected]> 
#thisスクリプトはパブリックドメインにあります。 
 
 MYUSER = "USERNAME" 
 MYPWD = "PASSWD" 
 
 ARGS = "-single-transaction --flush-logs --complete-insert "
 
 DATABASES = $(mysql -D mysql --skip-column-names -B -e 'データベースを表示;' | 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 in $ DATABASES; do 
 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 
 echo "done。" 
 done 
 
#30日より古いバックアップファイルを削除
 OLD = $(find $ BACKUPDIR -type d -mtime +30)
 if [-n "$ OLD"];次に、
古いバックアップファイルの削除をエコーし​​ます:$ OLD 
 echo $ OLD | xargs rm -rfv 
 fi 
3
cas

mysqlコマンドラインインターフェースからDESCRIBE <tablename>と結果をコピーして貼り付けます。

0
warren