MySQL veritabanını nasıl yeniden adlandırabilirim?


48

MySQL veritabanını nasıl yeniden adlandırabilirim?

MySQL çevrimiçi kılavuzu RENAME DATABASE komutunu anlattı (bu dokümantasyon sayfası bir süre önce Oracle tarafından kaldırıldı):

Bu ifade MySQL 5.1.7'ye eklenmiş ancak tehlikeli olduğu tespit edilmiş ve MySQL 5.1.23'te kaldırılmıştır.

Peki nasıl devam edilir? Gerekçe: Proje için bir kod adı ile başladık ve şimdi veritabanı adının projenin kesin adını yansıtmasını istiyoruz.


Dört cevap da mantıklı geliyor. Birçok olası çözümü olan bir soru.
saat


Yanıtlar:


59

Gönderen bu Ilan Hazan tarafından blog post:

MySQL'de veritabanı yeniden isimlendirmesi için destek yoktur. Bir MySQL veritabanını yeniden adlandırmak için aşağıdakilerden birini yapabilirsiniz:

  1. Yeni veritabanı oluşturun ve eski veritabanındaki tüm tabloları yeni veritabanında olacak şekilde yeniden adlandırın:

    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 kabuğunda, eski veritabanını yedeklemek için mysqldump kullanın, ardından MySQL yardımcı programını kullanarak dumped veritabanını yeni bir adla geri yükleyin. Son olarak, eski veritabanını bırakmak için drop database komutunu kullanın. Bu seçenek büyük veritabanı için kötü performans gösterebilir.

    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. Basit bir Linux betiği yaz (en sevdiğim çözüm)

    #!/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. Tüm tablolarınız MyISAM ise, eski veritabanı klasör adını yeniden adlandırabilirsiniz:

    1. MySQL sunucusunu kapatın,
    2. Veritabanı klasörü adını yeni isimle yeniden adlandırın,
    3. MySQL sunucusunu başlatın.

İşte MySQL içinde doğrudan SQL'de tablo ismini
Yves Martin

Bu, ilk çözüm için bir sorgu oluşturmanıza yardımcı olacaktır. RENAME TABLE'ın arkasındaki yapıştırma sonuçlarını kopyalamanız yeterli SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Syclone,

Ancak veriyi yeni DB'ye
girmezseniz

tThanks. Bu en iyi cevap. Çok teşekkür ederim!
typelogic

Bu senaryo çok temiz, MariaDB 10.1'deki kutudan çıktı.
Luc

12

MySQL biraz bunun için berbat. Tek sağlam güvenilir çözüm kullanmaktır phpMyAdmin.

Login-> click Scheme-> click Operations-> bul Rename database to:-> yaz NewName> click Go.

Kadar basit. Tüm izinler taşınır.


6
GUI çözümü için +1, ancak topluluk wiki yanıtındaki basit komutlar ve komut dosyaları da mükemmel bir şekilde "sağlam ve güvenilir"
Will Sheppard

7

Çok basit bir çözüm buldum: MySQL'i kapatın, veritabanı dizinini yeniden adlandırın ve yeniden başlatın. Bu kadar!

Eski isme atıfta bulunan SQL kodunuz veya verileriniz varsa biraz tehlikeli. Ardından uygulamayı yeniden başlatmadan önce bunu değiştirmeniz gerekir. Ama bunu yapmama gerek yoktu, ama YMV.

Googling, bu ikisi gibi birkaç işaretçi verir:

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

Yeni bir veritabanı yaratma eğilimindeyim ve sonra eskisinden tabloları bir .sql dosyasına (mysqldump ile) atar, dosyayı düzenler, bir çeşit yapar s/old_database/new_database/gve sonra onu yeni db'ye yeniden aktarırım.
Muhtemelen bunu yapmanın en iyi yolu değil, ama işe yarıyor.


2

Bir MySQL Management-Tool kullanma şansınız varsa (örn. PhpMyAdmin) o zaman sorguyu oluşturdukça kolayca yeniden adlandırabilirsiniz.

PhpMyAdmin'de her tabloyu oluştururlar ve verileri "INSERT INTO ... SELECT * FROM ..." ile eklerler. Böylece zincirleme yaparak verileri kopyalarlar.

Bunu yapamazsanız, bir döküm yapmanızı ve sql-File'ı yeni bir veritabanına yeniden içe aktarmanızı öneririm.

İyi şanslar!

Saygılar, Ben.


2

Veritabanını yeniden adlandırmak için aşağıdaki yöntemi kullandım

  1. mysqldump veya herhangi bir DB aracını kullanarak dosyanın yedeğini alın, örneğin heidiSQL, mysql yönetici vb.

  2. Yedekleme (örneğin backupfile.sql) dosyasını bir metin düzenleyicide açın.

  3. Veritabanı adını arayın ve değiştirin ve dosyayı kaydedin.

  4. Düzenlenen sql dosyasını geri yükle

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.