最近、ステージング データベース サーバーを MySQL 5.0.84 から 5.1.72 にアップグレードしました。アップグレード後に mysqldump を復元しようとしています。ダンプ内のデータベース名は ですgss-app
。ただし、その下のデータベース フォルダー名は/var/lib/mysql
になりましたがgss@022dapp
、 を使用して mysql にログインするとmysql -u root -p
、 と入力するshow databases;
と、データベース名のみが と表示され、 コマンドを使用してテーブルを一覧表示gss-app
できます。Use Database gss-app
show tables
復元はエラーで失敗しましたGot a packet bigger than --max_allowed_packet size
。その時はデータベースが部分的に復元されていたので、その機会を利用してgss@022dapp
フォルダの名前を変更しgss-app
、mysql シェルにログインしました。
データベース名が と表示され@mysql@gss-app
、データベースにアクセスできませんでした。 でデータベースの復元をもう一度実行すると、にフォルダーが作成されたこと--max_allowed_packet_size=1024M
がわかります。gss@022dapp
/var/lib/mysql
内のフォルダ名について考慮する必要がありますか/var/lib/mysql
? または、復元中に別のデータベース名を使用できますか?
答え1
復元中に別の名前を使用するという質問について具体的にお答えします。mysqldump では、またはmysqldump databasename
のいずれかを実行できますmysqldump --databases databasename
。前者でcreate db
はステートメントは挿入されませんが、後者では挿入されます。
前者のステートメントでダンプを作成したら、手動で新しい db を作成し、次のようなコマンドでダンプをロードするだけですmysql newdbname < dump.sql
。後者の場合は、ダンプ ファイルを開いて名前を変更するだけです。
mysqldump
余談ですが、この違いがあるのはMySQL側の設計が悪いと思います。--databases
ステートメントなしでバックアップすると、復元する前にまずデータベースを作成する必要があります。そして、そのデータベースは、元のデータベースとは異なる文字セットまたは照合順序を持つ可能性があります。私の意見では、データベースをダンプする場合は、すべてのデータとメタデータが含まれている必要があります。 と を指定する必要がある場合も同様です--routines
。などのオプションが便利だと--events
思いますが、デフォルトでは--no-routines
ないダンプルーチン?うーん。