วิธีการเปลี่ยนไดเร็กทอรีข้อมูล 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
คุณมีคำถามหรือความคิดเห็นเกี่ยวกับบทความนี้หรือไม่? โปรดแจ้งให้เราทราบโดยใช้แบบฟอร์มด้านล่าง เรายินดีเสมอที่ได้รับการติดต่อจากคุณ!