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


158

เป็นไปได้ไหมที่จะเปลี่ยนไดเรกทอรีข้อมูล MySQL เริ่มต้นเป็นเส้นทางอื่น? ฉันจะสามารถเข้าถึงฐานข้อมูลจากตำแหน่งเดิมได้หรือไม่


3
มีคำตอบใด ๆ สำหรับคำถามนี้หรือไม่หากระบบใน Win8
Jonathan M

1
สำหรับ windows - ดูที่นี่: dba.stackexchange.com/questions/24403/…
ดร. แอรอน Dishno

สำหรับผู้ใช้ mac สิ่งที่คุณต้องมีคือสิ่งนี้และขั้นตอนที่ 1-4 จากคำตอบของ @ user1341296
shellbye

คำตอบ:


270
  1. หยุด MySQL โดยใช้คำสั่งต่อไปนี้:

    sudo /etc/init.d/mysql stop
  2. คัดลอกไดเรกทอรีข้อมูลที่มีอยู่ (ตั้งอยู่ใน/var/lib/mysql) โดยใช้คำสั่งต่อไปนี้

    sudo cp -R -p /var/lib/mysql /newpath
  3. แก้ไขไฟล์คอนฟิกูเรชัน MySQL ด้วยคำสั่งต่อไปนี้:

    sudo gedit /etc/mysql/my.cnf   # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
  4. ค้นหารายการdatadirและเปลี่ยนเส้นทาง (ซึ่งควรเป็น/var/lib/mysql) ไปยังไดเรกทอรีข้อมูลใหม่

  5. ในเทอร์มินัลป้อนคำสั่ง:

    sudo gedit /etc/apparmor.d/usr.sbin.mysqld
  6. /var/lib/mysqlมองหาเส้นเริ่มต้นด้วย เปลี่ยน/var/lib/mysqlในบรรทัดด้วยเส้นทางใหม่

  7. บันทึกและปิดไฟล์

  8. รีสตาร์ทโปรไฟล์ AppArmor ด้วยคำสั่ง:

    sudo /etc/init.d/apparmor reload
  9. รีสตาร์ท MySQL ด้วยคำสั่ง:

    sudo /etc/init.d/mysql restart
  10. ตอนนี้เข้าสู่ระบบ MySQL และคุณสามารถเข้าถึงฐานข้อมูลเดียวกับที่คุณมีมาก่อน


33
ข้างต้นล้มเหลวในการแก้ปัญหาสำหรับฉันใน Ubuntu 12.04 (แม่นยำ) ฉันพบว่าจำเป็นต้องแก้ไขไฟล์ / etc / apparmor.d/tunables/alias เพื่อรวมบรรทัด "alias / var / lib / mysql / -> / newpath /" ด้วยสิ่งนี้ในสถานที่ฉันไม่ต้องการอะไร การเปลี่ยนแปลงในไฟล์ AppArmor อื่น ๆ มันทำงานได้ทันทีหลังจากรีสตาร์ท AppArmor ด้วย "/etc/init.d/apparmor restart" และ MySQL ด้วย "restart mysql"
ทำให้

2
Apparmor ไม่เกี่ยวข้องกับ CentOS มี SELinux แทน สามารถอ่านวิธีการปิดการใช้งานหรือจัดการที่นี่blogs.oracle.com/jsmyth/entry/selinux_and_mysql
Noam

12
ในฉบับของหมาก (ซึ่งจำเป็น) อย่าลืมเครื่องหมายจุลภาคในตอนท้ายของบรรทัดalias /var/lib/mysql/ -> /newpath/,
Michael

4
ไม่สามารถเน้นได้ว่าความคิดเห็นของ Michel สำคัญแค่ไหน: เพิ่ม TRAILING COMMA และบันทึกเซลล์ประสาทบางส่วน ขออภัยเกี่ยวกับหมวก
ALX

2
ไม่ได้ผลสำหรับฉัน ฉันได้งานจาก mysql.service ดู 'systemctl status mysql.service' และ 'journalctl -xn' เพื่อดูรายละเอียดเมื่อพยายามรีสตาร์ท mysqld และข้อผิดพลาดคือดิสก์เต็ม มันมี 500GB ของพื้นที่ว่าง ...
แฟรงก์เอช

17

รวดเร็วและง่ายต่อการทำ:

# Create new directory for MySQL data
mkdir /new/dir/for/mysql

# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql

# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql

# Stop MySQL before copying over files
service mysql stop

# Copy all files in default directory, to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/

แก้ไข/etc/my.cnfไฟล์และ[mysqld]เพิ่มบรรทัดนี้:

datadir=/new/dir/for/mysql/

หากคุณกำลังใช้ CageFS (มีหรือไม่มี CloudLinux) และต้องการเปลี่ยนไดเรกทอรี MySQL คุณต้องเพิ่มไดเรกทอรีใหม่ลงในไฟล์นี้:

/etc/cagefs/cagefs.mp

จากนั้นเรียกใช้คำสั่งนี้:

cagefsctl --remount-all

1
ดีใจที่ได้ยิน: P
sMyles

ขอบคุณมากและเพื่อเพิ่มถ้าคุณต้องการสคริปต์นี้อย่างสมบูรณ์ฉันไม่ได้คุณสามารถใช้นี้: sed -i 's | datadir = / var / lib / mysql | datadir = / data / var / lib / mysql | g' / etc / my.cnf
berimbolo

สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันลองสิ่งนี้และตัวเลือกอื่น ๆ มากมาย ฉันจะได้ข้อสรุปเช่นเดียวกับผู้ใช้ 3338098 เมื่อเขาบอกว่านี่เป็นวิธีเดียวที่ใช้งานได้: serverfault.com/questions/503887/…
Volksman

@Volksman ทุกลิงก์บอกว่าเขาต้องลบและติดตั้งใหม่ ... โอกาสที่คุณทั้งคู่มีปัญหาเฉพาะเซิร์ฟเวอร์อื่น ๆ เนื่องจากทั้ง MySQL และ MariaDB รองรับการกำหนดค่าข้อมูลและฉันเพิ่งทำสิ่งนี้เมื่อ 6 เดือนก่อน เซิร์ฟเวอร์ที่ไม่มีปัญหา
sMyles

@sMyles ใช่มันถูกลบและติดตั้ง แต่หลังจากการติดตั้ง / var / lib / mysql ที่อื่นเช่นพาร์ติชั่นเมกะไม่เหมือนหนึ่ง / var ถูกเมานต์ก่อนหน้านี้ หากมีปัญหาเฉพาะกับระบบของเรามันจะดีมากถ้าได้ผล นี่คือการติดตั้ง Centos 7 OS มาตรฐานใหม่พร้อม RAID 10 พร้อม 8x HDD แต่โดยปกติแล้วรายละเอียดของอาร์เรย์ดิสก์นั้นจะมีความโปร่งใสต่อซอฟต์แวร์
Volksman

15

คุณจะต้องคัดลอกข้อมูลปัจจุบันไปยังไดเรกทอรีใหม่และเปลี่ยนmy.cnfMySQL ของคุณ

[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/

คุณต้องคัดลอกฐานข้อมูลเมื่อเซิร์ฟเวอร์ที่ไม่ได้ทำงาน


นั่นคือสิ่งที่ฉันทำไม่ได้ ฉันต้องการเปลี่ยนไดเรกทอรี แต่ฉันต้องการสร้างฐานข้อมูลใหม่ในไดเรกทอรีใหม่ และต้องการเข้าถึงทั้งไดเรกทอรีเก่าและฐานข้อมูลไดเรกทอรีใหม่
MySQL DBA

1
@ MySQL DBA: ถ้าคุณใช้ln -sคมสัญลักษณ์แบบคงที่จะไม่ทำให้มันได้หรือไม่
RageZ

ฉันสับสนเล็กน้อยกับการใช้คำสั่งนี้ ตามที่ฉันอธิบายก่อนฉันต้องการสร้างฐานข้อมูลใหม่ในไดเรกทอรีใหม่ เป็นไปได้ด้วย symlink
MySQL DBA

1
คุณสามารถสร้างไดเรกทอรีใหม่ใช้ลิงก์สัญลักษณ์เพื่อให้ไฟล์ปรากฏใน dir ใหม่และเปลี่ยนของคุณmy.cnf
RageZ

2
ลงคะแนนเนื่องจากไม่ทำงานตามรายละเอียดที่serverfault.com/a/733998/279553
3338098

14

ก่อนอื่นคุณควรหยุดเซิร์ฟเวอร์ mysql เช่น

# /etc/init.d/mysql stop

หลังจากนั้นคุณควรคัดลอกไดเรกทอรีข้อมูลเก่า (เช่น / var / lib / mysql) รวม สิทธิ์ในไดเรกทอรีใหม่ของคุณผ่าน

# cp -R -p /var/lib/mysql /new/data/dir

ตอนนี้คุณสามารถเปลี่ยนแปลง/etc/mysql/my.cnfข้อมูลใหม่และรีสตาร์ทเซิร์ฟเวอร์

# /etc/init.d/mysql restart

5
ลงคะแนนเนื่องจากไม่สามารถใช้งานได้ตามรายละเอียดที่serverfault.com/a/733998/279553
user3338098

7

ถ้าชอบฉันคุณอยู่ใน debian และคุณต้องการย้าย mysql dir ไปที่บ้านของคุณหรือเส้นทางบน / home / ... วิธีการแก้ปัญหาคือ:

  • หยุด mysql ด้วย "sudo service mysql stop"
  • เปลี่ยนตัวแปร "datadir" เป็นพา ธ ใหม่ใน "/etc/mysql/mariadb.conf.d/50-server.cnf"
  • ทำสำเนาสำรองของ / var / lib / mysql: "cp -R -p / var / lib / mysql / path_to_my_backup"
  • ลบ dir นี้: "sudo rm -R / var / lib / mysql"
  • ย้ายข้อมูลไปยัง dir ใหม่: "cp -R -p / path_to_my_backup / path_new_dir
  • เปลี่ยนการเข้าถึงโดย "sudo chown -R mysql: mysql / path_new_dir"
  • เปลี่ยนตัวแปร "ProtectHome" โดย "false" บน "/etc/systemd/system/mysqld.service"
  • โหลด systemd โดย "sudo systemctl daemon-reload"
  • รีสตาร์ท mysql โดย "service mysql restart"

อยู่มาวันหนึ่งเพื่อหาทางออกให้ฉันในเอกสาร mariadb หวังว่านี่จะช่วยได้บ้าง!


ไฟล์/etc/systemd/system/mysqld.serviceไม่ได้อยู่ที่นี่ ความคิดใดที่ฉันจะดู?
Ron Piggott

1
สำหรับผู้ที่ใช้MariaDB บริการไฟล์จะอยู่ที่/lib/systemd/system/mariadb@.service
รอน Piggott

5

ฉันต้องการเก็บฐานข้อมูลในเครื่องของฉัน แต่ยังมีข้อมูลในฮาร์ดไดรฟ์ภายนอกของฉันและสลับระหว่างการใช้ทั้งสอง

หากคุณอยู่บน Mac และติดตั้ง MySQL โดยใช้ Homebrew สิ่งนี้น่าจะเหมาะกับคุณ มิฉะนั้นคุณจะต้องแทนที่ตำแหน่งที่เหมาะสมสำหรับ MySQL datadirบนเครื่องของคุณ

#cd to my data dir location
cd /usr/local/var/

#copy contents of local data directory to the new location
cp -r mysql/ /Volumes/myhd/mydatadir/

#temporarily move the old datadir
mv mysql mysql.local

#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql

จากนั้นถึงเมื่อคุณต้องการเปลี่ยนกลับมาทำได้ง่ายๆ:

mv mysql mysql.remote

mv mysql.local mysql

และคุณกำลังใช้ฐานข้อมูลท้องถิ่นของคุณอีกครั้ง หวังว่าจะช่วย


1
นี่ไม่ใช่การตอบคำถามตามที่ระบุไว้อย่างแน่นอน - แต่นี่เป็นสิ่งที่ฉันกำลังมองหา - และมันก็เป็นวิธีการจัดการกรณีขอบ / บั๊กที่เรียบร้อยที่ my.cnf ไม่จัดการช่องว่างได้ดี: bugs.mysql.com /bug.php?id=26033 ฉันจะเชื่อมโยงวิธีแก้ปัญหานี้ในรายงานข้อผิดพลาดนั้น
gabe

ลงคะแนนเนื่องจากไม่สามารถใช้งานได้ตามรายละเอียดที่serverfault.com/a/733998/279553
user3338098

5

หยุด mysqld ก่อน

mysql_install_db --user=mysql \
                 --basedir=/opt/mysql/mysql \
                 --datadir=/opt/mysql/mysql/data

จากนั้นเปลี่ยนข้อมูลใน/etc/mysql/my.cnf
Start mysqld ของคุณ

หมายเหตุ:
# 1: คุณอาจต้องปรับการตั้งค่า SELinux ของคุณ (ลองปิดการใช้งาน SELinux ในกรณีที่มีปัญหา) Apparmor (Ubuntu) อาจมีปัญหา

# 2: ดูการอ้างอิงฐานข้อมูล MySQL ติดตั้ง


4

หยุด mysql ของคุณก่อน

sudo service mysql stop

คัดลอกข้อมูล mysql ไปยังตำแหน่งใหม่

sudo cp -rp /var/lib/mysql /yourdirectory/

หากคุณใช้ apparmor ให้แก้ไขไฟล์ต่อไปนี้และทำสิ่งต่อไปนี้

sudo vim /etc/apparmor.d/usr.sbin.mysqld

แทนที่ตำแหน่ง / var / lib / by / yourdirectory / จากนั้นเพิ่ม follwoing หากไม่มีอยู่ในไฟล์

    /yourdirectory/mysql/ r,
    /yourdirectory/mysql/** rwk,

บันทึกไฟล์ด้วยคำสั่ง

:wq

แก้ไขไฟล์ my.cnf

sudo vim /etc/mysql/my.cnf

แทนที่ตำแหน่ง / var / lib / by / yourdirectory / จากนั้นบันทึกด้วยคำสั่ง

:wq

ในที่สุดก็เริ่ม mysql

sudo service mysql start

@ ดูข้อมูลเพิ่มเติมเกี่ยวกับ raid0, การเพิ่มประสิทธิภาพici


ลงคะแนนเนื่องจากไม่ทำงานตามรายละเอียดที่serverfault.com/a/733998/279553
3338098

บางทีนี่อาจใช้ไม่ได้กับการแจกจ่ายอื่น ๆ แต่ถ้าคุณใช้ Ubuntu มันก็ใช้ได้ดีสำหรับฉันและฉันเปลี่ยนพา ธ สำหรับทุกเซิร์ฟเวอร์ใหม่ที่ติดตั้ง Ubuntu เพื่อเปิดใช้งาน raid0
naddame

2
ฉันรู้ว่าผู้คนกำลัง downvoting นี้ แต่ฉันต้องการจะบอกคุณว่าสิ่งนี้ได้บันทึกวันของฉัน ขอบคุณ!
Daniel Loureiro

3

วิธีนี้ใช้ได้กับ Windows 7 โดยใช้ Workbench คุณจะต้องมีสิทธิ์ผู้ดูแลระบบในการทำเช่นนี้ มันสร้างทางแยก (เช่นทางลัด) ไปทุกที่ที่คุณต้องการจัดเก็บข้อมูลของคุณ

เปิด Workbench แล้วเลือก INSTANCE - Startup / Shutdown หยุดเซิร์ฟเวอร์

ติดตั้ง Junction Master จากhttps://bitsum.com/junctionmaster.php

นำทางไปยังเซิร์ฟเวอร์ C: \ ProgramData \ MySQL \ MySQL 5.6

คลิกขวาที่ข้อมูลและเลือก "ย้ายแล้วเชื่อมโยงโฟลเดอร์ไปที่ ... " ยอมรับปลายทางของคำเตือนไปที่ "ไดเรกทอรีข้อมูลใหม่ของคุณที่นี่โดยไม่ต้องใส่เครื่องหมาย" คลิกย้ายและเชื่อมโยง

ตอนนี้ไปที่ "ไดเรกทอรีข้อมูลใหม่ของคุณที่นี่โดยไม่มีเครื่องหมาย"

คลิกขวาที่ข้อมูลไปที่แท็บความปลอดภัยคลิกแก้ไขคลิกเพิ่มประเภทบริการเครือข่ายแล้วตรวจสอบชื่อคลิกตกลงคลิกช่องทำเครื่องหมายอนุญาตการควบคุมทั้งหมดแล้วตกลง

กลับไปที่ Workbench และเริ่มเซิร์ฟเวอร์

วิธีนี้ใช้ได้กับฉันโดยใช้ MySQL Workbench 6.2 บน Windows 7 Enterprise


2

ทุกอย่างที่ @ user1341296 กล่าวพร้อม ...

คุณไม่ควรเปลี่ยน/etc/mysql/my.cnf แทนคุณต้องการสร้างไฟล์ใหม่/etc/mysql/conf.d/ext.cnf(ชื่อใด ๆ แต่ควรมีนามสกุลcnf)

และใส่ไว้ในการเปลี่ยนแปลงของคุณ:

[mysqld]
datadir=/vagrant/mq/mysql

ทางนี้

  • คุณไม่จำเป็นต้องเปลี่ยนไฟล์ที่มีอยู่ (สคริปต์สคริปต์อัตโนมัติทำได้ง่ายขึ้น)
  • ไม่มีปัญหากับการอัพเดทเวอร์ชั่น MySQL (และมันเป็น configs!)

2

ในกรณีที่คุณเป็นผู้ใช้ Windows และมาที่นี่เพื่อค้นหาว่าคำตอบทั้งหมดสำหรับผู้ใช้งาน Linux อย่าผิดหวัง! ฉันจะไม่ปล่อยให้คุณเสียเวลาอย่างที่ฉันทำ

พูดพล่ามเล็กน้อยก่อนที่จะแก้ปัญหา:

MySQL ใช้ไดเรกทอรีข้อมูลเพื่อเก็บข้อมูลของฐานข้อมูลต่าง ๆ ที่คุณสร้าง ท้ายที่สุดก็ต้องเก็บไว้ในรูปแบบของไฟล์ที่มี jugglery ที่เพิ่มเข้ามาในแอพพลิเคชั่นและรูปแบบไฟล์เพื่อให้มั่นใจว่าฐานข้อมูลสัญญาว่าคุณได้เรียนรู้ในชั้นเรียนฐานข้อมูลไม่เป็นอันตราย

ตอนนี้คุณต้องการตรวจสอบให้แน่ใจว่ามีพื้นที่เพียงพอในการจัดเก็บฐานข้อมูลขนาดใหญ่ซึ่งคุณอาจสร้างขึ้นในอนาคตและดังนั้นคุณจึงคิดเฮ้! ฉันต้องการใส่ลงในไดรฟ์อื่นซึ่งมีพื้นที่เพิ่มขึ้น

ดังนั้นคุณทำดังต่อไปนี้

ขั้นตอนที่ 1 : การหยุดบริการ MySQL

  Window Key + R - will open Run
  servies.msc    - will open services manager
  Locate MySQL80 (80 is for version 8.0, look for the one you've).
  Stop it.       (Right click, Stop)

ขั้นตอนที่ 2 : ค้นหาไดเรกทอรีข้อมูลปัจจุบัน

 Goto C:\ProgramData\MySQL\MySQL Server 8.0

โดยค่าเริ่มต้นควรมีชื่อโฟลเดอร์ที่นี่ Data MySQL ใช้ในการตั้งค่าเริ่มต้น (หากพวกเขาไม่พบตำแหน่งอื่นที่ดีกว่า) แต่ลองตรวจสอบดู

ค้นหาmy.iniไฟล์ควรอยู่ที่นั่น

เปิดในโปรแกรมแก้ไข (อาจเป็น Notepad ++)

ทำ CTRL + F เพื่อค้นหา datadirไฟล์

อะไรก็ตามที่กล่าวถึงในที่นี้คือตำแหน่งที่แท้จริงที่ MySQL กำลังใช้งานอยู่ในขณะนี้ นี่คือสิ่งที่คุณต้องการเปลี่ยน

ขั้นตอน - 3 : การแทนที่ด้วยไดเรกทอรีข้อมูลใหม่

สมมติว่าคุณต้องการให้ไดเรกทอรีข้อมูลใหม่ของคุณเป็น W: __ MySQL_Data ลองเปลี่ยน datadirค่าในmy.iniไฟล์เป็นค่านี้ เก็บค่าก่อนหน้านี้แสดงความคิดเห็นเพื่อให้คุณไม่ต้องจำ

 # Path to the database root
 # datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
   datadir=W:/__MySQL_Data

ตอนนี้ใช้xcopyเพื่อคัดลอกเริ่มต้นที่จะdatadir W:\เรียกใช้พรอมต์คำสั่ง (หน้าต่าง + R, cmd, Enter)

 >> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X

และเปลี่ยนชื่อโฟลเดอร์ที่คัดลอกเป็นdatadirค่าใหม่ที่คุณเปลี่ยน ที่นี่:W:/__MySQL_Data

ทำไมไม่คัดลอก? ดีเพราะนั่นไม่ใช่ COOL! ซึ่งจะช่วยให้คุณไม่สูญเสียสิทธิ์ในโฟลเดอร์ที่คัดลอกดังนั้นเมื่อคุณเริ่มต้นใหม่MySQL80มันจะไม่เกิดข้อผิดพลาดโง่ ๆ : "บริการ MySQL80 บน Local Computer เริ่มแล้วหยุดทำงานบางบริการหยุดโดยอัตโนมัติหาก ไม่ได้ใช้งานโดยบริการหรือโปรแกรมอื่น ๆ " - มารยาท: Microsoft

ขั้นตอน - 4 : การเริ่มบริการใหม่

 Well, go back to the Services Manager to Start again, 
 "MySQL80" that you stopped, to restart it again.

ขั้นตอน - 5 : เสร็จสิ้น! ตอนนี้กลับไปทำงาน !!


1
ขอบคุณที่มีประโยชน์ แต่คำเตือน: my.ini ไม่สามารถเขียนได้โดยผู้ใช้ปกติเว้นแต่คุณจะเปลี่ยนการอนุญาต โอ้และ ProgramData เป็นโฟลเดอร์ที่ซ่อนอยู่ดังนั้นคุณต้องเปลี่ยนการตั้งค่าโฟลเดอร์ Explorer เพื่อดู
JonP

1

ฉันมักจะต้องทำสิ่งนี้เมื่ออัพเกรดเครื่องย้ายจากกล่องหนึ่งไปอีกกล่อง นอกเหนือจากการย้าย / var / lib / mysql ไปยังตำแหน่งที่ดีกว่าฉันมักจะต้องเรียกคืนตารางฐานข้อมูลเก่าจากการติดตั้ง MySQL แบบเก่า เพื่อที่จะทำสิ่งนี้ ...

  1. หยุด mysql ทำตามคำแนะนำข้างต้นจำเป็น
  2. คัดลอกไดเรกทอรีฐานข้อมูล - จะมีหนึ่งไดเรกทอรีสำหรับฐานข้อมูลการติดตั้งเก่าของคุณ - ไปยังตำแหน่ง DATADIR ใหม่ แต่ไม่ใช้ไดเรกทอรี "mysql" และ "performance_schema"
  3. สิทธิ์ที่ถูกต้องระหว่างไดเรกทอรีฐานข้อมูลที่คัดลอก ความเป็นเจ้าของควรเป็น mysql: mysql, ไดเรกทอรีควรเป็น 700 และไฟล์ควรเป็น 660
  4. รีสตาร์ท mysql ควรอัพเดตไฟล์ DB เวอร์ชันเก่าทั้งนี้ขึ้นอยู่กับการติดตั้งของคุณ

ขออภัยสำหรับการลงคะแนนเสียงโซลูชั่นนี้อาจถูกต้องยังไม่ได้ลอง
user3338098

1

เราต้องย้าย MySQL ไปยัง/homeไดเรกทอรีเพราะมันถูกแมปจากแผ่นดิสก์อื่น เพื่อที่จะทำให้การถ่ายทอดสดง่ายขึ้นแทนที่จะเปลี่ยนไดเรกทอรีใน my.cnf เราได้แมปไดเรกทอรีใหม่/home/mysqlแทนที่ไดเรกทอรีเดิม/var/lib/mysqlในสถานที่ของไดเรกทอรีเดิมมันใช้งานได้สำหรับเราเหมือนมีเสน่ห์ (ทดสอบบน CentOS 7.1)

สร้าง dir ใหม่และตั้งค่าการอนุญาตที่ถูกต้อง

mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql

หยุด MySQL ถ้าทำงาน

systemctl stop mysql

ย้ายข้อมูล dir

mv -f /var/lib/mysql/* /home/mysql

สร้างการติดตั้งถาวรและดำเนินการ

echo "/home/mysql /var/lib/mysql none    bind   0 0" >> /etc/fstab
mount -a

รีสตาร์ทเซิร์ฟเวอร์

systemctl start mysql

1

หากคุณต้องการทำสิ่งนี้โดยทางโปรแกรม (ไม่มีการป้อนข้อความด้วยตนเองด้วย gedit) นี่เป็นเวอร์ชั่นสำหรับ Dockerfile ตามคำตอบของผู้ใช้ 1341296 ด้านบน:

FROM spittet/ruby-mysql
MAINTAINER you@gmail.com

RUN cp -R -p /var/lib/mysql /dev/shm && \
    rm -rf /var/lib/mysql && \
    sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g' /etc/mysql/my.cnf && \
    /etc/init.d/mysql restart

มีให้ที่ Hub Docker ที่นี่: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/


0

ก่อนอื่นคุณควรทราบว่าไฟล์ config ของคุณอยู่ที่ไหน? ไฟล์กำหนดค่าของคุณอยู่ที่ไหน

หากคุณติดตั้งด้วยการติดตั้ง apt-get หรือ yum 。

ไฟล์ config อาจปรากฏขึ้นมา

/etc/mysql/my.cnf

ดาต้าไฟล์อาจปรากฏขึ้น

/ var / lib / MySQL

และสิ่งที่คุณควรทำคือ

  1. หยุด mysql
  2. เปลี่ยนข้อมูล mysql เป็น dirctory ใหม่
  3. เปลี่ยนไฟล์กำหนดค่า
  4. โหลดไฟล์ config อีกครั้ง
  5. รีสตาร์ท mysql

แล้วงานก็เสร็จ

แต่ถ้าคุณไม่ได้ติดตั้งด้วย apt หรือ yum, direcotry อาจไม่เป็นเช่นนี้และคุณสามารถค้นหาไฟล์ mysql ด้วย

โดยที่ mysql


ลงคะแนนเนื่องจากไม่ทำงานตามรายละเอียดที่serverfault.com/a/733998/279553
3338098

0

ภายใต้ SuSE 13.1 มันใช้งานได้ดีในการย้ายไดเรกทอรีข้อมูล mysql ที่อื่นเช่นไปที่ / home / example_user / และให้ชื่อที่ให้ข้อมูลเพิ่มเติม:

ใน / var / lib /:

# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql

ฉันเริ่ม mysql ใหม่:

# systemctl restart mysql.service

แต่สงสัยว่าแม้ไม่จำเป็น


0

หนึ่งในสภาพแวดล้อมที่ฉันเปลี่ยนไดเรกทอรีข้อมูล mysql ไปยังตำแหน่งใหม่ แต่ในระหว่างการรีสตาร์ทเซิร์ฟเวอร์ mysql มันใช้เวลานาน ดังนั้นฉันจึงตรวจสอบพอร์ตและพบว่ากระบวนการอื่นกำลังฟังพอร์ต mysql ดังนั้นฉันจึงฆ่ากระบวนการและรีสตาร์ทเซิร์ฟเวอร์ mysql และทำงานได้ดี

ฉันทำตามขั้นตอนด้านล่างเพื่อเปลี่ยนไดเรกทอรีข้อมูลที่ใช้งานได้ดี เปลี่ยนไดเรกทอรีข้อมูล mysql ใน Linux


ยินดีต้อนรับสู่ Stack Overflow! ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
ทิม Diekmann

0

ขั้นตอนข้างต้นเป็นพื้นฐานและขั้นพื้นฐาน ฉันติดตามพวกเขาและยังคงมีข้อผิดพลาดของ "mysql ล้มเหลวในการเริ่มต้น"

สำหรับโฟลเดอร์ใหม่เพื่อเก็บข้อมูล mysql คุณต้องตรวจสอบให้แน่ใจว่าโฟลเดอร์นั้นมีสิทธิ์และความเป็นเจ้าของ mysql: mysql

นอกจากนี้ยังต้องตรวจสอบการอนุญาตและความเป็นเจ้าของไดเรกทอรีหลักของ mysql หากมี, พูด, / data / mysql / ที่นี่ / data / directory ควรเป็น root: root ฉันแก้ไขข้อผิดพลาดของ "mysql ไม่สามารถเริ่มต้น" หลังจากเปลี่ยนความเป็นเจ้าของไดเรกทอรีหลักของ / mysql ระบบปฏิบัติการใน VM ของฉันคือ RHEL 7.6


ฉันลอง selinux ใน RHEL7.6 โดยเปลี่ยน SELINUX = บังคับใช้กับ SELINUX = อนุญาตไม่ได้ผลสำหรับฉัน
user3325137William

0

นอกจากนี้ยังเป็นไปได้ที่จะเชื่อมโยง datadir อย่างน้อยใน macOS, สภาพแวดล้อม dev

(homebrew) เช่น

# make sure you're not overwriting anything important, backup existing data
mv /usr/local/var/mysql [your preferred data directory] 
ln -s [your preferred data directory] /usr/local/var/mysql

รีสตาร์ท mysql


-1

หากคุณใช้ SE linux ให้ตั้งค่าเป็นโหมดอนุญาตโดยการแก้ไข / etc / selinux / config และเปลี่ยน SELINUX = บังคับใช้กับ SELINUX = อนุญาต


รายละเอียดที่นี่serverfault.com/questions/503887/… selinux ไม่ใช่ความผิดมีปัญหาอื่น ๆ ที่ทำให้ไม่สามารถเปลี่ยนdatadirคุณสมบัติได้
user3338098
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.