Pertanyaan Bagaimana cara cepat mengganti nama database MySQL (mengubah nama skema)?


Panduan MySQL di MySQL mencakup ini.

Biasanya saya hanya membuang database dan memasukkan kembali dengan nama baru. Ini bukan pilihan untuk database yang sangat besar. Tampaknya RENAME {DATABASE | SCHEMA} db_name TO new_db_name;  melakukan hal-hal buruk, hanya ada dalam beberapa versi, dan merupakan ide yang buruk secara keseluruhan.

Ini perlu dikerjakan InnoDB, yang menyimpan hal-hal yang sangat berbeda dari MyISAM.


801


asal


Jawaban:


Untuk InnoDB, berikut ini tampaknya berfungsi: buat database kosong baru, kemudian ganti nama setiap tabel secara bergantian menjadi database baru:

RENAME TABLE old_db.table TO new_db.table;

Anda perlu menyesuaikan izin setelah itu.

Untuk membuat skrip dalam shell, Anda dapat menggunakan salah satu dari berikut ini:

mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \ 
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done

Atau

for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;

Catatan: tidak ada ruang di antara opsi -p dan kata sandinya. Jika database Anda tidak memiliki kata sandi, hapus -u username -ppassword bagian.

Juga, jika Anda memiliki prosedur tersimpan, Anda dapat menyalinnya setelah itu:

mysqldump -R old_db | mysql new_db

689



Gunakan beberapa perintah sederhana ini:

mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql

Atau untuk mengurangi I / O gunakan yang berikut ini seperti yang disarankan oleh @Pablo Marin-Garcia:

mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase

396



Saya pikir solusinya lebih sederhana dan disarankan oleh beberapa pengembang. phpMyAdmin memiliki operasi untuk ini.

Dari phpMyAdmin, pilih database yang ingin Anda pilih. Di tab ada yang disebut Operasi, buka bagian ganti nama. Itu saja.

Memang, seperti yang banyak disarankan, buat database baru dengan nama baru, buang semua tabel dari database lama ke dalam database baru dan jatuhkan database lama.

Enter image description here


189



Anda dapat menggunakan SQL untuk menghasilkan skrip SQL untuk mentransfer setiap tabel di database sumber Anda ke database tujuan.

Anda harus membuat database tujuan sebelum menjalankan skrip yang dihasilkan dari perintah.

Anda dapat menggunakan salah satu dari dua skrip ini (awalnya saya menyarankan yang pertama dan seseorang "memperbaiki" jawaban saya untuk digunakan GROUP_CONCAT. Silakan pilih, tapi saya lebih suka yang asli):

SELECT CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name, '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

atau

SELECT GROUP_CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name SEPARATOR '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

($ 1 dan $ 2 adalah sumber dan target masing-masing)

Ini akan menghasilkan perintah SQL yang harus Anda jalankan.

Perhatikan itu GROUP_CONCAT memiliki batas panjang default yang dapat dilampaui untuk database dengan sejumlah besar tabel. Anda dapat mengubah batas itu dengan menjalankan SET SESSION group_concat_max_len = 100000000; (atau sejumlah besar lainnya).


92



Tiga opsi:

  1. Buat database baru, turunkan server, pindahkan file dari satu folder database ke yang lain, dan restart server. Perhatikan bahwa ini hanya akan berfungsi jika SEMUA tabel Anda adalah MyISAM.

  2. Buat database baru, gunakan CREATE TABLE ... LIKE statements, dan kemudian gunakan INSERT ... SELECT * FROM statements.

  3. Gunakan mysqldump dan muat ulang dengan file itu.


24



Cara yang sederhana

Ubah ke direktori database:

cd /var/lib/mysql/

Matikan MySQL ... Ini penting!

/etc/init.d/mysql stop

Oke, cara ini tidak berfungsi untuk InnoDB atau BDB-Database.

Ganti nama basis data:

mv old-name new-name

... atau meja ...

cd database/

mv old-name.frm new-name.frm

mv old-name.MYD new-name.MYD

mv old-name.MYI new-name.MYI

Mulai ulang MySQL

/etc/init.d/mysql start

Selesai ...

OK, cara ini tidak bekerja dengan database InnoDB atau BDB. Dalam hal ini Anda harus membuang database dan mengimpornya kembali.


23



Saya baru saja menemukan cara yang sangat baik untuk melakukannya, bekerja dengan MyISAM dan InnoDB dan sangat cepat:

RENAME TABLE old_db.table TO new_db.table;

Saya tidak ingat di mana saya membacanya tetapi kredit diberikan kepada orang lain bukan saya.


20



Meniru yang hilang RENAME DATABASE perintah di MySQL:

  1. Buat database baru
  2. Buat pertanyaan ganti nama dengan:

    SELECT CONCAT('RENAME TABLE ',table_schema,'.',table_name,
        ' TO ','new_schema.',table_name,';')
    FROM information_schema.TABLES
    WHERE table_schema LIKE 'old_schema';
    
  3. Jalankan output itu

  4. Hapus basis data lama

Itu diambil dari Meniru Perintah DATABASE RENAME yang Hilang di MySQL.


18