Bagaimana cara mengganti nama database MySQL?

48

Bagaimana cara mengganti nama database MySQL?

Manual online MySQL telah mengatakan tentang perintah RENAME DATABASE (halaman dokumentasi ini telah dihapus oleh Oracle beberapa waktu lalu):

Pernyataan ini ditambahkan di MySQL 5.1.7 tetapi ternyata berbahaya dan dihapus di MySQL 5.1.23.

Jadi, bagaimana caranya? Alasannya: Kami mulai dengan nama kode untuk proyek dan ingin nama database sekarang untuk mencerminkan nama pasti proyek.

nekat
sumber
Keempat jawaban itu masuk akal. Ini pertanyaan dengan banyak solusi yang memungkinkan.
nalply

Jawaban:

59

Dari posting blog ini oleh Ilan Hazan:

Di MySQL tidak ada dukungan untuk penggantian nama basis data. Untuk mengganti nama database MySQL Anda dapat melakukan salah satu dari yang berikut:

  1. Buat database baru dan ganti nama semua tabel di database lama menjadi database baru:

    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. Di shell Linux, gunakan mysqldump untuk membuat cadangan database lama, kemudian mengembalikan database yang dibuang di bawah nama baru menggunakan utilitas MySQL. Akhirnya, gunakan perintah drop database untuk menjatuhkan database lama. Opsi ini dapat berkinerja buruk untuk database besar.

    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. Tulis skrip Linux sederhana (solusi favorit saya)

    #!/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. Jika semua tabel Anda adalah MyISAM, Anda dapat mengganti nama nama folder database lama:

    1. Matikan server MySQL,
    2. Ganti nama folder database dengan nama baru,
    3. Mulai server MySQL.
alexeit
sumber
Berikut ini adalah cara alternatif untuk menghasilkan perintah mengubah nama tabel dalam SQL di dalam MySQL secara langsung: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin
Ini akan membantu membuat kueri untuk solusi pertama. Cukup salin hasil tempel di belakang RENAME TABLE SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Syclone
Tetapi Jika Anda tidak memasukkan data dalam DB baru, mereka akan hilang
Rainman
tTerima kasih. Ini jawaban terbaik. Terima kasih banyak!
typelogic
Script itu sangat rapi, bekerja di luar kotak pada MariaDB 10.1.
Luc
12

MySQL agak menyebalkan untuk ini. Satu-satunya solusi yang andal adalah menggunakan phpMyAdmin.

Login-> click Scheme-> click Operations-> cari Rename database to:-> tulis NewName> click Go.

Sesimpel itu. Semua izin dibawa.

spencerthayer
sumber
6
Memberi +1 untuk solusi GUI, tetapi perintah dan skrip sederhana di komunitas menjawab wiki juga sangat "solid dan dapat diandalkan"
Will Sheppard
7

Saya menemukan solusi yang sangat sederhana: Matikan MySQL, ganti nama direktori database dan restart. Itu saja!

Agak berbahaya jika Anda memiliki kode SQL atau data yang merujuk pada nama lama. Maka Anda perlu mengubahnya juga sebelum Anda me-restart aplikasi. Tapi saya tidak perlu melakukan itu, tetapi YMV.

Googling memberikan beberapa petunjuk seperti ini:

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

nekat
sumber
5

Saya cenderung membuat database baru, dan kemudian membuang tabel dari yang lama, ke file .sql (dengan mysqldump), mengedit file, melakukan beberapa jenis s/old_database/new_database/gdan kemudian mengimpornya kembali ke db baru.
Mungkin bukan cara terbaik untuk melakukannya, tetapi itu berhasil.

Tom O'Connor
sumber
2

Jika Anda memiliki kesempatan untuk menggunakan Alat Manajemen MySQL (mis. PhpMyAdmin) maka Anda dapat dengan mudah mengubah nama karena mereka membuat permintaan untuk Anda.

Di phpMyAdmin mereka juga membuat setiap tabel dan memasukkan data dengan "INSERT INTO ... SELECT * FROM ...". Jadi dengan merantai mereka menyalin data.

Jika Anda tidak dapat melakukan ini, saya akan merekomendasikan untuk melakukan dump dan mengimpor kembali sql-File ke database baru.

Semoga berhasil!

Salam, Ben.

Benedikt Niessen
sumber
2

Saya menggunakan metode berikut untuk mengubah nama database

  1. mengambil cadangan file menggunakan mysqldump atau alat DB misalnya heidiSQL, administrator mysql dll

  2. Buka file cadangan (mis. Backupfile.sql) di beberapa editor teks.

  3. Cari dan ganti nama database dan simpan file.

  4. Pulihkan file sql yang diedit

Adarsha
sumber