ฉันจะย้ายฐานข้อมูล MySQL ไปยังไดรฟ์อื่นได้อย่างไร


34

ฉันใช้ MySQL 5.5 บนเครื่องท้องถิ่นเพื่อวิเคราะห์ข้อมูลรัฐบาลจำนวนมาก ฉันได้สร้างฐานข้อมูลท้องถิ่นที่อยู่ในไดรฟ์เริ่มต้นของฉัน (Win7 C: ไดรฟ์) ฉันต้องการจัดเก็บข้อมูลในไดรฟ์ E: ไดรฟ์ภายนอกขนาดใหญ่ eSATA

ฉันควรทำตามขั้นตอนอะไรบ้าง

mysql 

คุณไม่สามารถส่งออก dB เป็นไฟล์ sql, จากนั้นบันทึกไฟล์ do e: จากนั้นในอนาคตหากคุณต้องการกู้คืน dB คุณสามารถนำเข้าไฟล์นี้ได้

@tq - ไม่ทำงาน เขาต้องการเปลี่ยนไดเรกทอรีข้อมูลเซิร์ฟเวอร์ MySQL หากเขาส่งออกและนำเข้ามันจะยังคงอยู่ในไดรฟ์เดียวกัน!

คำเตือนเมื่อคุณย้ายไฟล์ฐานข้อมูลไปยังไดรฟ์ภายนอกคุณจะต้องเก็บไว้ในคอมพิวเตอร์ของคุณมิฉะนั้นฐานข้อมูลของคุณจะผิดพลาดเพราะมันจะไม่สามารถค้นหาไฟล์ข้อมูลได้
Stephen Senkomago Musoke

คำตอบ:


35
  1. ปิด mysql
  2. ย้ายไฟล์ทั้งหมดในไดเรกทอรีข้อมูลปัจจุบันของคุณไปยังตำแหน่งใหม่ (ตรวจสอบที่ตั้งในขั้นตอนที่ 3 - datadirพารามิเตอร์)
  3. ค้นหาmy.iniไฟล์ (อยู่ในไดเรกทอรีการติดตั้ง mysql) เปลี่ยนdatadirค่าพารามิเตอร์ให้ชี้ไปที่ตำแหน่งใหม่
  4. เริ่ม mysql

สิ่งนี้ทำให้ฉันมีข้อผิดพลาดเมื่อพยายามเริ่ม mysql (ปัญหาการอนุญาต) ฉันตัดสินโซลูชันที่ฉันโพสต์ที่นี่ซึ่งฉันหวังว่าจะช่วยให้ใครบางคนประหยัดเวลา
snapfractalpop

1
@snapfractalpop คำถามสำหรับ windows
adam

@adam windows ถูกกล่าวถึงในเนื้อความของคำถาม แต่ไม่ได้ติดแท็กเป็นคำถามเฉพาะ windows เท่านั้นและไม่มีการกล่าวถึง windows ในพาดหัว ฉันโพสต์ลิงก์ในความคิดเห็นเพราะอาจเป็นไปได้ว่าผู้ใช้อื่นที่ไม่ใช่ windows อาจสะดุดกับคำถามนี้เช่นกัน
snapfractalpop

ผมพบว่าผมมีการใช้/และไม่ได้ \ datadirเป็นตัวคั่นไดเรกทอรีในเส้นทางไดเรกทอรีสำหรับ ฉันใช้ WAMPserver บน Windows 10
Steve

ไดเรกทอรี ProgramData อาจถูกซ่อนอยู่ใน file explorer ของคุณ ฉันคิดว่ามันไม่มีอยู่จนกว่าฉันจะเปลี่ยนการตั้งค่าเพื่อแสดงไฟล์ที่ซ่อน
WestAce

6

แม้ว่าคุณจะขอ Windows แต่นี่เป็นคำแนะนำที่ดีสำหรับผู้ที่จบลงด้วยการมองหาเส้นทาง linux / ubuntu:

สมมติฐาน:

  • คุณมีข้อมูล mysql ในไดรฟ์ภายนอก / usb / สำรอง/mountpoint/var/lib/mysqlอาจมาจากคอมพิวเตอร์ที่เสียชีวิตหรือติดตั้งเก่า
  • คุณต้องการย้ายไปยังการติดตั้ง Ubuntu ใหม่ในเครื่อง /var/lib/mysql
  • หยุด MySQL ด้วย:
    sudo /etc/init.d/mysql stop.
  • สำรองข้อมูลปัจจุบัน (สะอาด) MySQL
    sudo cp -Rp /var/lib/mysql /var/lib/mysql.backupไดเรกทอรีข้อมูลด้วย:
  • จากนั้นคัดลอกไดเรกทอรีข้อมูลเก่าจากไดรฟ์เก่าด้วย:
    sudo cp -Rp /mountpoint/var/lib/mysql /var/lib/mysql
    ที่mountpointเป็นเส้นทางไปที่เมานท์
  • รีสตาร์ท MySQL ด้วย:
    sudo /etc/init.d/mysql start

โชคดีที่ MySQL ควรทำการรีสตาร์ทและคุณควรจะคืนค่าฐานข้อมูลเก่าของคุณ

แหล่งที่มา mb_webguy@ubuntuforums.org


3
(!) สิ่งนี้จะไม่ทำงานเนื่องจากการกำหนดค่ายังคงชี้ไปที่ตำแหน่งเดิม
ADOConnection

4

โซลูชันที่ 1:

  1. ก่อนอื่นสำรองข้อมูลของคุณโดยใช้ `mysqldump
  2. หากคุณติดตั้ง Mysql Server จากแพ็คเกจอย่างเป็นทางการคุณสามารถทำได้โดยเรียกใช้โปรแกรม MySQLINstanceConfig.exe จากไดเรกทอรี bin ของเซิร์ฟเวอร์ของคุณ
  3. นำเข้าข้อมูล

MySQLINstanceConfig.exe

วิธีที่สอง (ไม่แนะนำ แต่ทำงานบนเครื่องเดียวกัน)

  1. หยุดเซิร์ฟเวอร์ Mysql
  2. คัดลอกข้อมูลจากไดเรกทอรีข้อมูลของคุณไปยังไดเรกทอรีใหม่ของคุณ
  3. เปิดไฟล์ my.cnf (ในกรณีของฉัน "C: \ ProgramData \ MySQL \ MySQL เซิร์ฟเวอร์ 5.5 \ my.ini")
  4. find row like datadir = "C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data \" และเปลี่ยนเส้นทางไปยังตำแหน่งใหม่ของคุณ
  5. เริ่มเซิร์ฟเวอร์ของคุณ

ในฐานะของรุ่น 5.6 MySQLInstanceConfig.exe จะไม่กระจายอีกต่อไป ฟังก์ชันนี้จะถูกแทนที่ด้วยตัวติดตั้ง http://bugs.mysql.com/bug.php?id=66306


มีโปรแกรม Linux ที่เทียบเท่าสำหรับการย้ายข้อมูลหรือไม่
Ron Piggott

หลังจากย้ายข้อมูลด้วยวิธีที่สองฉันไม่สามารถเริ่ม MariaDB (เวอร์ชั่น 5.5) ได้ หลังจากอนุญาตให้ผู้ใช้บริการเข้าถึงดาต้าแดร์ใหม่บริการจะเริ่มขึ้นและฉันรู้สึกอึดอัดใจที่จะเชื่อมต่อกับฐานข้อมูล อย่างไรก็ตามการเข้าถึงตารางใด ๆ ยังคงล้มเหลว: [ERROR] Cannot find or open table <db>/<table> from the internal data dictionary of InnoDB though the .frm file for the table exists.. ฉันจะมั่นใจได้อย่างไรว่าการตั้งค่าการอนุญาตถูกต้อง?
Bram

2

สำหรับ Windows ในฐานะของตัวติดตั้ง MySQL 1.4.6 (2015-04-07)ตำแหน่งข้อมูลอาจถูกระบุในรีจิสตรีคีย์ที่ระบุตำแหน่งของmy.iniไฟล์ดังนั้นหากข้อมูลถูกติดตั้งครั้งแรกในตำแหน่งที่ไม่ใช่ค่าเริ่มต้นไฟล์จะไม่อยู่ในmy.iniC:\ProgramData\MySQL\MySQL Server x.x\

ตำแหน่งของค่ารีจิสตรีคือ (อย่างน้อยเท่ากับ MySQL 5.6):

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MySQL AB\MySQL Server x.x\

Locationเป็นไฟล์REG_SZที่ชี้ไปยังโฟลเดอร์ที่มีไฟล์แอปพลิเคชัน MySQL อยู่ โดยค่าเริ่มต้น:C:\Program Files\MySQL\MySQL Server x.x\

DataLocationเป็นREG_SZจุดที่ชี้ไปยังโฟลเดอร์ที่my.iniตั้งอยู่ โดยค่าเริ่มต้นยัง:C:\Program Files\MySQL\MySQL Server x.x\

นอกจากนี้my.iniเส้นทางของไฟล์จะรวมอยู่ในคำสั่งบริการภายใต้คีย์รีจิสทรีนี้: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MySQLXXในImagePath REG_EXPAND_SZค่า

ค่าเริ่มต้นของสายนี้คือ: "C:/Program Files/MySQL/MySQL Server 5.6/bin\mysqld" --defaults-file="C:\Program Files\MySQL\MySQL Server x.x\my.ini" MySQLXX

ดังนั้นบรรทัดล่างคือเพื่อที่จะย้ายไฟล์ข้อมูลในสถานการณ์นี้คุณต้องทำตามขั้นตอนที่โพสต์โดย @ ITCuties ด้วยการเพิ่มบางอย่าง

นี่คือขั้นตอนเต็มรูปแบบ:

  1. ปิด mysql
  2. ค้นหาค่าDataLocationรีจิสทรีด้านบนเพื่อค้นหาตำแหน่งmy.iniไฟล์ปัจจุบันและหากคุณต้องการย้ายmy.iniไฟล์ให้อัปเดตDataLocationพา ธ และย้ายmy.iniไฟล์ไปยังพา ธ ใหม่นี้
  3. หากคุณกำลังเปลี่ยนตำแหน่งของmy.iniไฟล์คุณจะต้องอัปเดตพา ธ ในคีย์รีจิสทรีของคำสั่งบริการตามรายการด้านบน
  4. เปิดmy.iniไฟล์ค้นหาdatadirพารามิเตอร์ ย้ายไฟล์จากdatadirพา ธนี้ไปยังพา ธ ที่คุณต้องการให้ข้อมูลอยู่จากนั้นอัพเดตdatadirพารามิเตอร์ด้วยพา ธ ใหม่นี้
  5. เริ่ม mysql
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.