เป็นไปได้ไหมที่จะเปลี่ยนไดเรกทอรีข้อมูล MySQL เริ่มต้นเป็นเส้นทางอื่น? ฉันจะสามารถเข้าถึงฐานข้อมูลจากตำแหน่งเดิมได้หรือไม่
เป็นไปได้ไหมที่จะเปลี่ยนไดเรกทอรีข้อมูล MySQL เริ่มต้นเป็นเส้นทางอื่น? ฉันจะสามารถเข้าถึงฐานข้อมูลจากตำแหน่งเดิมได้หรือไม่
คำตอบ:
หยุด MySQL โดยใช้คำสั่งต่อไปนี้:
sudo /etc/init.d/mysql stop
คัดลอกไดเรกทอรีข้อมูลที่มีอยู่ (ตั้งอยู่ใน/var/lib/mysql
) โดยใช้คำสั่งต่อไปนี้
sudo cp -R -p /var/lib/mysql /newpath
แก้ไขไฟล์คอนฟิกูเรชัน MySQL ด้วยคำสั่งต่อไปนี้:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
ค้นหารายการdatadir
และเปลี่ยนเส้นทาง (ซึ่งควรเป็น/var/lib/mysql
) ไปยังไดเรกทอรีข้อมูลใหม่
ในเทอร์มินัลป้อนคำสั่ง:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
/var/lib/mysql
มองหาเส้นเริ่มต้นด้วย เปลี่ยน/var/lib/mysql
ในบรรทัดด้วยเส้นทางใหม่
บันทึกและปิดไฟล์
รีสตาร์ทโปรไฟล์ AppArmor ด้วยคำสั่ง:
sudo /etc/init.d/apparmor reload
รีสตาร์ท MySQL ด้วยคำสั่ง:
sudo /etc/init.d/mysql restart
ตอนนี้เข้าสู่ระบบ MySQL และคุณสามารถเข้าถึงฐานข้อมูลเดียวกับที่คุณมีมาก่อน
alias /var/lib/mysql/ -> /newpath/,
รวดเร็วและง่ายต่อการทำ:
# 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
คุณจะต้องคัดลอกข้อมูลปัจจุบันไปยังไดเรกทอรีใหม่และเปลี่ยนmy.cnf
MySQL ของคุณ
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
คุณต้องคัดลอกฐานข้อมูลเมื่อเซิร์ฟเวอร์ที่ไม่ได้ทำงาน
ln -s
คมสัญลักษณ์แบบคงที่จะไม่ทำให้มันได้หรือไม่
my.cnf
ก่อนอื่นคุณควรหยุดเซิร์ฟเวอร์ 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
ถ้าชอบฉันคุณอยู่ใน debian และคุณต้องการย้าย mysql dir ไปที่บ้านของคุณหรือเส้นทางบน / home / ... วิธีการแก้ปัญหาคือ:
อยู่มาวันหนึ่งเพื่อหาทางออกให้ฉันในเอกสาร mariadb หวังว่านี่จะช่วยได้บ้าง!
ฉันต้องการเก็บฐานข้อมูลในเครื่องของฉัน แต่ยังมีข้อมูลในฮาร์ดไดรฟ์ภายนอกของฉันและสลับระหว่างการใช้ทั้งสอง
หากคุณอยู่บน 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
และคุณกำลังใช้ฐานข้อมูลท้องถิ่นของคุณอีกครั้ง หวังว่าจะช่วย
หยุด 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) อาจมีปัญหา
หยุด 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
วิธีนี้ใช้ได้กับ 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
ทุกอย่างที่ @ user1341296 กล่าวพร้อม ...
คุณไม่ควรเปลี่ยน/etc/mysql/my.cnf
แทนคุณต้องการสร้างไฟล์ใหม่/etc/mysql/conf.d/ext.cnf
(ชื่อใด ๆ แต่ควรมีนามสกุลcnf
)
และใส่ไว้ในการเปลี่ยนแปลงของคุณ:
[mysqld]
datadir=/vagrant/mq/mysql
ทางนี้
ในกรณีที่คุณเป็นผู้ใช้ 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 : เสร็จสิ้น! ตอนนี้กลับไปทำงาน !!
ฉันมักจะต้องทำสิ่งนี้เมื่ออัพเกรดเครื่องย้ายจากกล่องหนึ่งไปอีกกล่อง นอกเหนือจากการย้าย / var / lib / mysql ไปยังตำแหน่งที่ดีกว่าฉันมักจะต้องเรียกคืนตารางฐานข้อมูลเก่าจากการติดตั้ง MySQL แบบเก่า เพื่อที่จะทำสิ่งนี้ ...
เราต้องย้าย 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
หากคุณต้องการทำสิ่งนี้โดยทางโปรแกรม (ไม่มีการป้อนข้อความด้วยตนเองด้วย 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/
ก่อนอื่นคุณควรทราบว่าไฟล์ config ของคุณอยู่ที่ไหน? ไฟล์กำหนดค่าของคุณอยู่ที่ไหน
หากคุณติดตั้งด้วยการติดตั้ง apt-get หรือ yum 。
ไฟล์ config อาจปรากฏขึ้นมา
/etc/mysql/my.cnf
ดาต้าไฟล์อาจปรากฏขึ้น
/ var / lib / MySQL
และสิ่งที่คุณควรทำคือ
แล้วงานก็เสร็จ
แต่ถ้าคุณไม่ได้ติดตั้งด้วย apt หรือ yum, direcotry อาจไม่เป็นเช่นนี้และคุณสามารถค้นหาไฟล์ mysql ด้วย
โดยที่ mysql
ภายใต้ 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
แต่สงสัยว่าแม้ไม่จำเป็น
หนึ่งในสภาพแวดล้อมที่ฉันเปลี่ยนไดเรกทอรีข้อมูล mysql ไปยังตำแหน่งใหม่ แต่ในระหว่างการรีสตาร์ทเซิร์ฟเวอร์ mysql มันใช้เวลานาน ดังนั้นฉันจึงตรวจสอบพอร์ตและพบว่ากระบวนการอื่นกำลังฟังพอร์ต mysql ดังนั้นฉันจึงฆ่ากระบวนการและรีสตาร์ทเซิร์ฟเวอร์ mysql และทำงานได้ดี
ฉันทำตามขั้นตอนด้านล่างเพื่อเปลี่ยนไดเรกทอรีข้อมูลที่ใช้งานได้ดี เปลี่ยนไดเรกทอรีข้อมูล mysql ใน Linux
ขั้นตอนข้างต้นเป็นพื้นฐานและขั้นพื้นฐาน ฉันติดตามพวกเขาและยังคงมีข้อผิดพลาดของ "mysql ล้มเหลวในการเริ่มต้น"
สำหรับโฟลเดอร์ใหม่เพื่อเก็บข้อมูล mysql คุณต้องตรวจสอบให้แน่ใจว่าโฟลเดอร์นั้นมีสิทธิ์และความเป็นเจ้าของ mysql: mysql
นอกจากนี้ยังต้องตรวจสอบการอนุญาตและความเป็นเจ้าของไดเรกทอรีหลักของ mysql หากมี, พูด, / data / mysql / ที่นี่ / data / directory ควรเป็น root: root ฉันแก้ไขข้อผิดพลาดของ "mysql ไม่สามารถเริ่มต้น" หลังจากเปลี่ยนความเป็นเจ้าของไดเรกทอรีหลักของ / mysql ระบบปฏิบัติการใน VM ของฉันคือ RHEL 7.6
นอกจากนี้ยังเป็นไปได้ที่จะเชื่อมโยง 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
หากคุณใช้ SE linux ให้ตั้งค่าเป็นโหมดอนุญาตโดยการแก้ไข / etc / selinux / config และเปลี่ยน SELINUX = บังคับใช้กับ SELINUX = อนุญาต
datadir
คุณสมบัติได้