Làm cách nào để đổi tên cơ sở dữ liệu MySQL?


48

Làm cách nào để đổi tên cơ sở dữ liệu MySQL?

Hướng dẫn trực tuyến MySQL đã nói về lệnh RENAME DATABASE (trang tài liệu này đã bị Oracle xóa một thời gian trước):

Tuyên bố này đã được thêm vào trong MySQL 5.1.7 nhưng được phát hiện là nguy hiểm và đã bị xóa trong MySQL 5.1.23.

Vậy, làm thế nào để tiến hành? Lý do: Chúng tôi bắt đầu với một tên mã cho dự án và muốn tên cơ sở dữ liệu ngay bây giờ phản ánh tên dứt khoát của dự án.


Tất cả bốn câu trả lời có ý nghĩa. Đó là một câu hỏi với nhiều giải pháp có thể.
nalply


Câu trả lời:


59

Từ bài đăng trên blog này của Ilan Hazan:

Trong MySQL không có hỗ trợ đổi tên cơ sở dữ liệu. Để đổi tên cơ sở dữ liệu MySQL, bạn có thể thực hiện một trong các thao tác sau:

  1. Tạo cơ sở dữ liệu mới và đổi tên tất cả các bảng trong cơ sở dữ liệu cũ thành cơ sở dữ liệu mới:

    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. Trong Linux shell, sử dụng mysqldump để sao lưu cơ sở dữ liệu cũ, sau đó khôi phục cơ sở dữ liệu bị kết xuất dưới tên mới bằng tiện ích MySQL. Cuối cùng, sử dụng lệnh thả cơ sở dữ liệu để thả cơ sở dữ liệu cũ. Tùy chọn này có thể thực hiện không tốt cho cơ sở dữ liệu lớn.

    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. Viết một tập lệnh Linux đơn giản (giải pháp yêu thích của tôi)

    #!/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. Nếu tất cả các bảng của bạn là MyISAM, bạn có thể đổi tên tên thư mục cơ sở dữ liệu cũ:

    1. Tắt máy chủ MySQL,
    2. Đổi tên tên thư mục cơ sở dữ liệu thành tên mới,
    3. Bắt đầu máy chủ MySQL.

Đây là một cách thay thế để tạo lệnh đổi tên bảng trong SQL trực tiếp trong MySQL: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin

Điều này sẽ giúp tạo một truy vấn cho giải pháp đầu tiên. Chỉ cần sao chép kết quả dán phía sau BẢNG RENAME SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Lốc xoáy

Nhưng nếu bạn không chèn dữ liệu vào DB mới, chúng sẽ bị mất
mưa

Cảm ơn. Đây là câu trả lời tốt nhất. Cảm ơn bạn rất nhiều!
typelogic

Kịch bản đó siêu gọn gàng, hoạt động tốt trên MariaDB 10.1.
Luc

12

MySQL kinda hút cho điều này. Giải pháp đáng tin cậy duy nhất là sử dụng phpMyAdmin.

Login-> click Scheme-> click Operations-> tìm Rename database to:-> viết NewName> click Go.

Đơn giản vậy thôi. Tất cả các quyền được thực hiện.


6
+1 cho giải pháp GUI, nhưng các lệnh và tập lệnh đơn giản trong câu trả lời wiki cộng đồng cũng hoàn toàn "chắc chắn và đáng tin cậy"
Will Sheppard

7

Tôi tìm thấy một giải pháp rất đơn giản: Tắt MySQL, đổi tên thư mục cơ sở dữ liệu và khởi động lại. Đó là tất cả!

Sẽ hơi nguy hiểm nếu bạn có mã SQL hoặc dữ liệu đề cập đến tên cũ. Sau đó, bạn cần phải thay đổi điều đó trước khi bạn khởi động lại ứng dụng. Nhưng tôi không cần phải làm điều đó, nhưng YMV.

Googling đưa ra một vài gợi ý như hai:

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

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


5

Tôi có xu hướng tạo một cơ sở dữ liệu mới, sau đó kết xuất các bảng ra khỏi cơ sở dữ liệu cũ, vào một tệp .sql (với mysqldump), chỉnh sửa tệp, thực hiện một số loại s/old_database/new_database/gvà sau đó nhập lại vào db mới.
Có lẽ không phải là cách tốt nhất để làm điều đó, nhưng nó làm việc.


2

Nếu bạn có cơ hội sử dụng Công cụ quản lý MySQL (ví dụ: phpMyAdmin) thì bạn có thể đổi tên dễ dàng khi họ tạo truy vấn cho bạn.

Trong phpMyAdmin, họ cũng tạo từng bảng và chèn dữ liệu bằng cách "XÁC NHẬN VÀO ... CHỌN * TỪ ...". Vì vậy, bằng cách xâu chuỗi họ sao chép dữ liệu trên.

Nếu bạn không thể làm điều này, tôi khuyên bạn nên tạo một bãi chứa và nhập lại tệp sql vào cơ sở dữ liệu mới.

Chúc may mắn!

Trân trọng, Ben.


2

Tôi đã sử dụng phương pháp sau để đổi tên cơ sở dữ liệu

  1. sao lưu tệp bằng mysqldump hoặc bất kỳ công cụ DB nào, ví dụ: heidiSQL, quản trị viên mysql, v.v.

  2. Mở tệp sao lưu (ví dụ: backupfile.sql) trong một số trình soạn thảo văn bản.

  3. Tìm kiếm và thay thế tên cơ sở dữ liệu và lưu tập tin.

  4. Khôi phục tập tin sql đã chỉnh sửa

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.