MySQLデータベースの名前を変更する方法は?


48

MySQLデータベースの名前を変更する方法は?

MySQLのオンラインマニュアルには、RENAME DATABASEコマンドについての記述があります(このドキュメントのページは、しばらく前にOracleによって削除されました)。

このステートメントはMySQL 5.1.7で追加されましたが、危険であることが判明し、MySQL 5.1.23で削除されました。

だから、どのように進めるのですか?理論的根拠:プロジェクトのコード名から始め、データベース名にプロジェクトの決定的な名前を反映させたいと考えています。


4つの答えはすべて理にかなっています。多くの解決策が考えられる質問です。
-nalply


回答:


59

Ilan Hazanによるこのブログ投稿から:

MySQLでは、データベース名の変更はサポートされていません。MySQLデータベースの名前を変更するには、次のいずれかを実行できます。

  1. 新しいデータベースを作成し、古いデータベースのすべてのテーブルの名前を新しいデータベースに変更します。

    CREATE database new_db_name;
    RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
    DROP database db_name;
    
  2. Linuxシェルでは、mysqldumpを使用して古いデータベースをバックアップし、MySQLユーティリティを使用して、ダンプされたデータベースを新しい名前で復元します。最後に、drop databaseコマンドを使用して、古いデータベースを削除します。このオプションは、大規模なデータベースではパフォーマンスが低下する可能性があります。

    mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "CREATE DATABASE new_db_name"
    mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "DROP DATABASE db_name"
    
  3. シンプルなLinuxスクリプトを書く(私のお気に入りのソリューション)

    #!/bin/bash
    
    dbuser=xxxx
    dbpass=xxxx
    olddb=xxxx
    newdb=xxxx
    
    mysqlconn="mysql -u $dbuser -p$dbpass -h localhost"
    
    $mysqlconn -e "CREATE DATABASE $newdb"
    params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='$olddb'")
    
    for name in $params; do
          $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
          echo "Renamed $olddb.$name to $newdb.$name";
    done;
    
    #$mysqlconn -e "DROP DATABASE $olddb"
    
  4. すべてのテーブルがMyISAMの場合、古いデータベースフォルダー名を変更できます。

    1. MySQLサーバーをシャットダウンし、
    2. データベースフォルダー名を新しい名前に変更します。
    3. MySQLサーバーを起動します。

MySQL内のSQLで直接テーブル名変更コマンドを生成する別の方法を次に示します。blog.marceloaltmann.com
Yves Martin

これは、最初のソリューションのクエリを作成するのに役立ちます。RENAME TABLEの後ろに貼り付け結果をコピーするだけSELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';です。
シクローン

しかし、新しいDBにデータを挿入しないと、データは失われます
レインマン

ありがとう。これが最良の答えです。どうもありがとうございます!
typelogic

このスクリプトは非常にきれいで、MariaDB 10.1でそのまま使用できます。
リュック

12

MySQLはこれをちょっと嫌いです。唯一の堅実で信頼できる解決策は使用することphpMyAdminです。

Login-> click Scheme-> click Operations->検索Rename database to:->書き込みNewName> click Go

それと同じくらい簡単。すべての許可が引き継がれます。


6
コミュニティのwikiの答えでGUIソリューションのための+1が、簡単なコマンドやスクリプトも完全に「固体と信頼性の高い」です
ウィル・シェパード

7

非常に簡単な解決策を見つけました。MySQLをシャットダウンし、データベースディレクトリの名前を変更して再起動します。それで全部です!

古い名前を参照するSQLコードまたはデータがある場合、少し危険です。次に、アプリケーションを再起動する前に、これも変更する必要があります。しかし、私はそれをする必要はありませんでしたが、YMV。

グーグルは、これらの2つのようないくつかのポインタを提供します:

https://stackoverflow.com/questions/67093/how-do-i-quickly-rename-a-mysql-database-change-schema-name

http://www.delphifaq.com/faq/databases/mysql/f574.shtml


5

私は新しいデータベースを作成し、テーブルを古いデータベースから.sqlファイル(mysqldumpを使用)にダンプし、ファイルを編集し、何らかの処理s/old_database/new_database/gを行ってから新しいデータベースに再インポートする傾向があります。
おそらく最善の方法ではありませんが、機能します。


2

MySQL管理ツール(phpMyAdminなど)を使用する機会がある場合は、クエリを作成するときに簡単に名前を変更できます。

phpMyAdminでは、各テーブルを作成し、「INSERT INTO ... SELECT * FROM ...」でデータを挿入します。そのため、連鎖することでデータをコピーします。

これができない場合は、ダンプを作成し、sql-Fileを新しいデータベースに再インポートすることをお勧めします。

幸運を!

よろしく、ベン。


2

私は次の方法を使用してデータベースの名前を変更しました

  1. mysqldumpまたはDBツール(たとえばheidiSQL、mysql管理者など)を使用してファイルのバックアップを取る

  2. 一部のテキストエディタでバックアップ(backupfile.sqlなど)ファイルを開きます。

  3. データベース名を検索して置き換え、ファイルを保存します。

  4. 編集したSQLファイルを復元する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.