จะเปลี่ยนชื่อฐานข้อมูล MySQL ได้อย่างไร


48

จะเปลี่ยนชื่อฐานข้อมูล MySQL ได้อย่างไร

คู่มือออนไลน์ MySQL ได้พูดเกี่ยวกับคำสั่ง RENAME DATABASE (หน้าเอกสารคู่มือนี้ได้ถูกลบออกโดย Oracle เมื่อไม่นานมานี้):

คำสั่งนี้ถูกเพิ่มใน MySQL 5.1.7 แต่พบว่าเป็นอันตรายและถูกลบใน MySQL 5.1.23

ดังนั้นจะดำเนินการอย่างไร เหตุผล: เราเริ่มต้นด้วยชื่อรหัสสำหรับโครงการและต้องการชื่อฐานข้อมูลในขณะนี้เพื่อสะท้อนถึงชื่อที่ชัดเจนของโครงการ


คำตอบทั้งสี่นั้นสมเหตุสมผล มันเป็นคำถามที่มีทางออกที่เป็นไปได้มากมาย
ใกล้


คำตอบ:


59

จากโพสต์บล็อกนี้โดย Ilan Hazan:

ใน MySQL ไม่มีการรองรับการเปลี่ยนชื่อฐานข้อมูล ในการเปลี่ยนชื่อฐานข้อมูล MySQL คุณสามารถเลือกทำอย่างใดอย่างหนึ่งต่อไปนี้:

  1. สร้างฐานข้อมูลใหม่และเปลี่ยนชื่อตารางทั้งหมดในฐานข้อมูลเก่าให้อยู่ในฐานข้อมูลใหม่:

    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 shell ใช้ mysqldump เพื่อสำรองฐานข้อมูลเก่าจากนั้นกู้คืนฐานข้อมูลที่ถูกทิ้งภายใต้ชื่อใหม่โดยใช้ยูทิลิตี้ MySQL สุดท้ายใช้คำสั่งฐานข้อมูลการปล่อยเพื่อวางฐานข้อมูลเก่า ตัวเลือกนี้สามารถทำงานได้ไม่ดีสำหรับฐานข้อมูลขนาดใหญ่

    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. เขียนสคริปต์ Linux อย่างง่าย (โซลูชันที่ฉันโปรดปราน)

    #!/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. หากตารางทั้งหมดของคุณคือ MyISAM คุณสามารถเปลี่ยนชื่อโฟลเดอร์ฐานข้อมูลเก่าได้:

    1. ปิดเซิร์ฟเวอร์ MySQL
    2. เปลี่ยนชื่อชื่อโฟลเดอร์ฐานข้อมูลเป็นชื่อใหม่
    3. เริ่มเซิร์ฟเวอร์ MySQL

นี่คือวิธีอื่นในการสร้างคำสั่งเปลี่ยนชื่อตารางใน SQL ภายใน MySQL โดยตรง: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin

สิ่งนี้จะช่วยในการสร้างแบบสอบถามสำหรับโซลูชันแรก เพียงคัดลอกผลการวางที่อยู่เบื้องหลังตารางชื่อSELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Syclone

แต่ถ้าคุณไม่ใส่ข้อมูลในฐานข้อมูลใหม่พวกเขาจะหายไป
ปั่นฝน

tThanks นี่คือคำตอบที่ดีที่สุด ขอบคุณมาก!
typelogic

สคริปต์นั้นเรียบร้อยดีมากทำงานนอกกรอบบน MariaDB 10.1
Luc

12

MySQL ค่อนข้างแย่สำหรับสิ่งนี้ phpMyAdminทางออกที่น่าเชื่อถือเท่านั้นที่เป็นของแข็งกับการใช้งาน

Login-> click Scheme-> click Operations-> ค้นหาRename database to:-> เขียน>NewNameclick Go

ง่ายเหมือนที่ สิทธิ์ทั้งหมดจะถูกยกขึ้น


6
+1 สำหรับโซลูชัน GUI แต่คำสั่งและสคริปต์ง่าย ๆ ในคำตอบของวิกิชุมชนนั้นยังสมบูรณ์แบบ "มั่นคงและน่าเชื่อถือ"
Will Sheppard

7

ฉันพบโซลูชันที่ง่ายมาก: ปิดระบบ MySQL เปลี่ยนชื่อไดเรกทอรีฐานข้อมูลและเริ่มต้นใหม่ นั่นคือทั้งหมด!

มันค่อนข้างอันตรายหากคุณมีรหัส SQL หรือข้อมูลอ้างอิงชื่อเก่า จากนั้นคุณต้องเปลี่ยนสิ่งนั้นเช่นกันก่อนที่จะรีสตาร์ทแอปพลิเคชัน แต่ฉันไม่จำเป็นต้องทำเช่นนั้น แต่ YMV

Googling ให้ตัวชี้สองสามอย่างเช่นสองสิ่งนี้:

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

ฉันมักจะสร้างฐานข้อมูลใหม่แล้วทิ้งตารางออกจากตารางเก่าไปเป็นไฟล์. sql (พร้อม mysqldump) แก้ไขไฟล์ทำบางประเภทs/old_database/new_database/gแล้วนำเข้าลงในฐานข้อมูลใหม่
อาจไม่ใช่วิธีที่ดีที่สุดที่จะทำ แต่ใช้งานได้


2

หากคุณมีโอกาสใช้เครื่องมือจัดการ MySQL (เช่น phpMyAdmin) คุณสามารถเปลี่ยนชื่อได้อย่างง่ายดายเมื่อพวกเขาสร้างแบบสอบถามให้คุณ

ใน phpMyAdmin พวกเขายังสร้างแต่ละตารางและแทรกข้อมูลด้วย "INSERT INTO ... SELECT * FROM ... " ดังนั้นโดยการผูกมัดพวกเขาจึงคัดลอกข้อมูลไป

หากคุณไม่สามารถทำสิ่งนี้ได้ฉันขอแนะนำให้ทำการดัมพ์และนำเข้าไฟล์ sql-re ลงในฐานข้อมูลใหม่

โชคดี!

ขอแสดงความนับถือเบ็น


2

ฉันใช้วิธีการต่อไปนี้เพื่อเปลี่ยนชื่อฐานข้อมูล

  1. ทำการสำรองไฟล์โดยใช้ mysqldump หรือเครื่องมือ DB ใด ๆ เช่น heidiSQL, mysql administrator เป็นต้น

  2. เปิดไฟล์สำรอง (เช่น backupfile.sql) ในโปรแกรมแก้ไขข้อความ

  3. ค้นหาและแทนที่ชื่อฐานข้อมูลและบันทึกไฟล์

  4. กู้คืนไฟล์ sql ที่แก้ไข

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.