49

MySQLにデータなしでデータベース構造をコピーする方法はありますか?そのため、新しいデータベースはコピー元と同じになりますが、テーブルは空になります。

いくつかの提案を受け取った後、コマンドを試しましたが、構文エラー、myusername = rootおよび。が表示されますpassword = nothing。私はデフォルトのものを推測します。私は次のコマンドを試しています、

mysqldump -u root -p -d xyz_db | mysql -u root -p -Dnew_db

コマンドに何が欠けているか、置き忘れていますか?

4

7 に答える 7

77
mysqldump -u user -ppass -d olddb | mysql -u user -ppass -D newdb

新しいデータベースはすでに存在している必要があります。mysqldumpコマンドの-dフラグは、データのコピーを防ぎます。

-pフラグとパスワードの間にスペースはありません。

于 2013-01-01T04:59:07.157 に答える
10

mysqldumpを使用してバックアップを取り、コマンドラインを使用してmysqlで復元できます。

バックアップデータベース用

$ mysqldump -u root-pPassword -P3309 --routines --no-data testdb > "d:\dbwithnodata.sql"

データベースの復元用

$ mysql -u root-pPassword -P3309 newdb < "d:\dbwithnodata.sql"
于 2013-01-01T05:40:43.450 に答える
3

MYSQLデータベース構造をバックアップできます

mysqldump -u username –p  -d database_name > backup.sql

(セキュリティリスクにつながるため、コマンドラインでパスワードを指定しないでください。MYSQLはデフォルトでパスワードを要求します。)そして、データベースに作成テーブルを作成できます。

mysql -u username -p new_database < backup.sql

これで、パイプを使用して最初のコマンドの出力を2番目のコマンドの出力として提供できるようになり、不要になります。backup.sql

mysqldump -u username –p  -d database_name|mysql -u username -p new_database

のすべてのテーブルは、new_databaseデータなしで作成されます。

于 2013-09-09T16:58:48.173 に答える
2

electrictboolbox.com/mysqldump-schemaからのみ:

データのないすべてのテーブルのデータベース構造のダンプ-dフラグを追加して、出力にデータを含めないことを示します。ここで、「mydatabase」はダンプするデータベースの名前、「someuser」はログイン名です。データベースへの接続に使用されます。次のコマンドは、指定されたMySQLデータベース内のすべてのテーブルのテーブル構造をダンプします。

$ mysqldump -d -u someuser -p mydatabase

-dフラグは、ダンプにデータを含めないことを示します。または、覚えやすい場合は、代わりに--no-dataを使用できます。

$ mysqldump --no-data -u someuser -p mydatabase

-uフラグはユーザー名を示し、-pフラグはパスワードが提供されることを示します。を押すと、パスワードの入力を求められます。

または、コマンドラインでパスワードを指定することもできますが、-pフラグとパスワードの間にスペースを入れないでください。たとえば、パスワードが「apples」の場合は、次のようにします。

$ mysqldump --no-data -u someuser -papples mydatabase
$ mysqldump -d -u someuser -p mydatabase > mydatabase.sql # This will output to a sql file
于 2013-01-01T05:00:23.533 に答える
1

これを試してください:

$ mysqldump --no-data -h localhost -u root -p database_name > imported_db_name.sql
于 2018-02-08T09:43:32.253 に答える
0

mysqldump -d'old_db'.tb_nameトリガー、手順などでは、そのような参照を次のように置き換える必要があるため、十分ではありません。'new_db'.tb_name

mysql -u user -ppass -e "CREATE DATABASE new_db" 

mysqldump -u user -ppass -d old_db |     # pull structure  -d flag  
sed "s/\`old_db\`\./\`new_db\`\./g" |    # solve foreign_keys, triggers etc 
sed 's/AUTO_INCREMENT=[0-9]\+/''/g' |    # reset indexes
mysql -u user -ppass new_db              # push structure

以下は、ターゲットデータベースを作成し、いくつかのチェックを実行するbashスクリプトです。

#。/ db_clone.sh   old_db  new_db

/root/.mysqlcnx (-u root -pPassを使用する代わりに)資格情報を持つファイルを使用します

[client]
user = root # or powerfull_user with GRANTS 
password = pass_string
host = localhost

そして、データベースのクローンを作成するための次のスクリプト [自信を持って仮想マシンで実験してください]

#!/bin/bash

if [ $# -lt 2 ]; then
   echo "syntax:\n.\db_clone.sh source_db_name target_db_name [--drop]\n"
exit 1
fi

    # checking target database $2 exits
tg_db=$(mysql --defaults-extra-file=~/.mysqlcnx -s -N -e "SELECT count(*)>0 FROM 
         information_schema.SCHEMATA where SCHEMA_NAME='${2}'")
if [ $tg_db = '1' ]; then
    # checking target database has tables
    tg_tb=$(mysql --defaults-extra-file=~/.mysqlcnx -s -N -e " SELECT count(*) > 0 
            FROM information_schema.TABLES WHERE TABLE_SCHEMA='${2}'")
  if [ $tg_tb = '1' ]; then
     if [ $# -eq 3 ] && [ "$3" = '--drop' ]; then
        echo "TYPE 'YES' (case sensitive) TO OVERRIDE"
        read opt # request confirmation 
        if [ "$opt" != "YES" ]; then
            echo "OPERATION CANCELED!"
            exit 1
        fi
     else
       printf "DATABASE \"${2}\" EXISTS AND HAS TABLES\nUSE --drop as 3rd arg to override!\n"
       exit 1
     fi
  fi
else 
  mysql --defaults-extra-file=~/.mysqlcnx -e "CREATE DATABASE \`${2}\`" 
fi

echo "CREATING ${2}"
mysqldump --defaults-extra-file=~/.mysqlcnx -d $1 | # dump source
sed "s/\`${1}\`\./\`${2}\`\./g" |  #  solving `source_db`.tb_name       
sed 's/AUTO_INCREMENT=[0-9]\+/''/g' | # solving  AUTO_INCREMENT=1
mysql --defaults-extra-file=~/.mysqlcnx $2  # populating target_db 
echo "DONE"
于 2020-09-25T23:34:16.173 に答える
0

マニュアルに「データベースのコピー」で記載されているように、ダンプをmysqlクライアントに直接パイプできます。

mysqldump db_name | mysql new_db_name 

MyISAMを使用している場合は、ファイルをコピーできますが、お勧めしません。それは少し危険です。

さまざまな他の良い答えから統合

mysqldumpコマンドとmysqlコマンドはどちらも、次のような接続の詳細(およびその他)を設定するためのオプションを受け入れます。

mysqldump -u <user name> --password=<pwd> <original db> | mysql -u <user name> -p <new db>

例 :mysqldump -u root -pmypassword old_database | mysql -u root -pmypassowrd new_database

ブログリンク

于 2021-05-14T06:55:47.817 に答える