ค้นหาเว็บไซต์

วิธีการเปลี่ยนไดเร็กทอรีข้อมูล MySQL/MariaDB เริ่มต้นใน Linux


หลังจากติดตั้งส่วนประกอบของ LAMP Stack บนเซิร์ฟเวอร์ CentOS/RHEL 7 แล้ว มีบางสิ่งที่คุณอาจต้องการทำ

บางส่วนเกี่ยวข้องกับการเพิ่มความปลอดภัยของ Apache และ MySQL/MariaDB ในขณะที่บางส่วนอาจใช้งานได้หรือไม่ตามการตั้งค่าหรือความต้องการของเรา

ตัวอย่างเช่น ขึ้นอยู่กับการใช้งานที่คาดหวังของเซิร์ฟเวอร์ฐานข้อมูล เราอาจต้องการเปลี่ยนไดเร็กทอรี data เริ่มต้น (/var/lib/mysql) เป็นตำแหน่งอื่น เป็นกรณีที่คาดว่าไดเร็กทอรีดังกล่าวจะขยายเนื่องจากมีการใช้งานสูง

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

ด้วยเหตุนี้ ในบทความนี้ เราจะอธิบายวิธีเปลี่ยนไดเร็กทอรีข้อมูล MySQL/MariaDB เริ่มต้นเป็นพาธอื่นบนเซิร์ฟเวอร์ CentOS/RHEL 7 และการกระจาย Ubuntu/Debian

แม้ว่าเราจะใช้ MariaDB แต่แนวคิดที่อธิบายและขั้นตอนที่ดำเนินการในบทความนี้ใช้ได้กับทั้ง MySQL และ MariaDB เว้นแต่จะระบุไว้เป็นอย่างอื่น

การเปลี่ยนไดเร็กทอรีข้อมูล MySQL/MariaDB เริ่มต้น

หมายเหตุ: เราจะถือว่าไดเรกทอรีข้อมูลใหม่ของเราคือ /mnt/mysql-data สิ่งสำคัญคือต้องทราบว่าไดเร็กทอรีนี้ควรเป็นของ mysql:mysql

mkdir /mnt/mysql-data
chown -R mysql:mysql /mnt/mysql-data

เพื่อความสะดวกของคุณ เราได้แบ่งกระบวนการออกเป็น 5 ขั้นตอนที่ง่ายต่อการปฏิบัติตาม:

ขั้นตอนที่ 1: ระบุไดเรกทอรีข้อมูล MySQL ปัจจุบัน

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

mysql -u root -p -e "SELECT @@datadir;"

หลังจากที่คุณป้อนรหัสผ่าน MySQL ผลลัพธ์ควรจะคล้ายกัน

ขั้นตอนที่ 2: คัดลอกไดเรกทอรีข้อมูล MySQL ไปยังตำแหน่งใหม่

เพื่อหลีกเลี่ยงความเสียหายของข้อมูล ให้หยุดบริการหากบริการทำงานอยู่ก่อนดำเนินการต่อ ใช้คำสั่ง systemd ที่รู้จักเพื่อดำเนินการดังกล่าว:

------------- On SystemD ------------- 
systemctl stop mariadb
systemctl is-active mariadb

------------- On SysVInit ------------- 
service mysqld stop
service mysqld status

OR

service mysql stop
service mysql status

หากบริการหยุดทำงาน ผลลัพธ์ของคำสั่งสุดท้ายควรเป็นดังนี้:

จากนั้นคัดลอกเนื้อหาของ /var/lib/mysql ซ้ำไปยัง /mnt/mysql-data โดยรักษาสิทธิ์ดั้งเดิมและการประทับเวลา:

cp -R -p /var/lib/mysql/* /mnt/mysql-data

ขั้นตอนที่ 3: กำหนดค่าไดเร็กทอรีข้อมูล MySQL ใหม่

แก้ไขไฟล์การกำหนดค่า (my.cnf) เพื่อระบุไดเร็กทอรีข้อมูลใหม่ (/mnt/mysql-data ในกรณีนี้)

vi /etc/my.cnf
OR
vi /etc/mysql/my.cnf

ค้นหาส่วน [mysqld] และ [client] และทำการเปลี่ยนแปลงต่อไปนี้:

Under [mysqld]:
datadir=/mnt/mysql-data
socket=/mnt/mysql-data/mysql.sock

Under [client]:
port=3306
socket=/mnt/mysql-data/mysql.sock

บันทึกการเปลี่ยนแปลงแล้วดำเนินการขั้นตอนต่อไป

ขั้นตอนที่ 4: ตั้งค่าบริบทความปลอดภัยของ SELinux เป็น Data Directory

ขั้นตอนนี้ใช้ได้กับ RHEL/CentOS และอนุพันธ์ของมันเท่านั้น

เพิ่มบริบทความปลอดภัยของ SELinux ไปที่ /mnt/mysql-data ก่อนที่จะรีสตาร์ท MariaDB

semanage fcontext -a -t mysqld_db_t "/mnt/mysql-data(/.*)?"
restorecon -R /mnt/mysql-data

ถัดไปรีสตาร์ทบริการ MySQL

------------- On SystemD ------------- 
systemctl stop mariadb
systemctl is-active mariadb

------------- On SysVInit ------------- 
service mysqld stop
service mysqld status

OR

service mysql stop
service mysql status

ตอนนี้ ให้ใช้คำสั่งเดียวกับในขั้นตอนที่ 1 เพื่อตรวจสอบตำแหน่งของไดเร็กทอรีข้อมูลใหม่:

mysql -u root -p -e "SELECT @@datadir;"

ขั้นตอนที่ 5: สร้างฐานข้อมูล MySQL เพื่อยืนยันไดเร็กทอรีข้อมูล

เข้าสู่ระบบ MariaDB สร้างฐานข้อมูลใหม่ จากนั้นตรวจสอบ /mnt/mysql-data:

mysql -u root -p -e "CREATE DATABASE tecmint;"

ยินดีด้วย! คุณเปลี่ยนไดเร็กทอรีข้อมูลสำหรับ MySQL หรือ MariaDB สำเร็จแล้ว

สรุป

ในโพสต์นี้ เราได้กล่าวถึงวิธีการเปลี่ยนไดเร็กทอรีข้อมูลในเซิร์ฟเวอร์ MySQL หรือ MariaDB ที่ทำงานบน CentOS/RHEL 7 และ Ubuntu/Debian

คุณมีคำถามหรือความคิดเห็นเกี่ยวกับบทความนี้หรือไม่? โปรดแจ้งให้เราทราบโดยใช้แบบฟอร์มด้านล่าง เรายินดีเสมอที่ได้รับการติดต่อจากคุณ!