ハイフン付きのMySQLデータベース名

ハイフン付きのMySQLデータベース名

最近、ステージング データベース サーバーを 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-appshow 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ないダンプルーチン?うーん。

関連情報