Anda dapat mengganti nama database menggunakan perintah berikut tetapi pastikan untuk mengambil cadangan terlebih dahulu
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;
referensi:http://www.rndblog.com/how-to-rename-a-database-in-mysql/https://stackoverflow.com/questions/12190000/rename-mysql-database
Anda dapat melakukan ini menggunakan mysqldump. Di sini tangkapannya:Anda tidak dapat mengirimkan data karena mungkin ada biaya yang terkait dengan pengiriman data.
Untuk contoh ini, katakanlah Anda ingin mengganti nama mydb
ke ourdb
LANGKAH 01 :Buat database baru
mysql> CREATE DATABASE ourdb;
LANGKAH 02 :Dapatkan skema tanpa pemicu
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
LANGKAH 03 :Dapatkan pemicunya
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
LANGKAH 04 :Buat skrip untuk melakukan INSERT ... SELECT
di semua tabel
JIKA ADA KENDALA KUNCI ASING
ETL_DATA_SCRIPT=/tmp/DataTransfer.sql
echo -n > ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@CHARACTER_SET_CLIENT;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@CHARACTER_SET_RESULTS;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@COLLATION_CONNECTION;" >> ${ETL_DATA_SCRIPT}
echo "SET NAMES utf8;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@TIME_ZONE;" >> ${ETL_DATA_SCRIPT}
echo "SET TIME_ZONE='+00:00';" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@SQL_NOTES, SQL_NOTES=0;" >> ${ETL_DATA_SCRIPT}
echo "SET group_concat_max_len = 104857600;" >> ${ETL_DATA_SCRIPT}
SQL="SELECT CONCAT('INSERT INTO ourdb.',table_name,' SELECt * FROM mydb.',table_name,';')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='mydb'"
mysql -hrdshost -uuser -ppassword -ANe"${SQL}" >> ${ETL_DATA_SCRIPT}
JIKA TIDAK ADA KENDALA KUNCI ASING
ETL_DATA_SCRIPT=/tmp/DataTransfer.sql
SQL="SELECT CONCAT('ALTER TABLE mydb.',table_name,' RENAME ourdb.',table_name,';')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='mydb'"
mysql -hrdshost -uuser -ppassword -ANe"${SQL}" > ${ETL_DATA_SCRIPT}
Jika tidak ada batasan kunci asing, ini akan berjalan cepat.
LANGKAH 05 :Gabungkan file menjadi satu skrip
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
LANGKAH 06 :Tinjau skrip
vi -R /tmp/ETL.sql
atau
less /tmp/ETL.sql
LANGKAH 07 :Jalankan skrip
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
LANGKAH 08 :Pastikan semua data ada di database target
Anda bisa melakukannya
Jika tidak ada batasan kunci asing, mydb harus kosong dan ourdb harus memiliki semua tabel.
Jika ada batasan kunci asing, pastikan mydb
dan ourdb
memiliki jumlah tabel yang sama dan jumlah baris yang sama. Pastikan semua pemicu ada dengan menjalankan
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
LANGKAH 09 :Hapus Database Lama Secara Manual
mysql> DROP DATABASE mydb;
Saya tidak memasukkan database dalam skrip, untuk berjaga-jaga. :-)