การติดตั้ง MySQL บน Cloud VPS CentOS

CentOS และ RHEL เป็นระบบปฏิบัติการยอดนิยมสำหรับเซิร์ฟเวอร์ในองค์กร เนื่องจากความเสถียรและการสนับสนุนระยะยาว การติดตั้งระบบจัดการฐานข้อมูลบนระบบเหล่านี้จึงเป็นทักษะพื้นฐานที่ผู้ดูแลเซิร์ฟเวอร์ควรรู้

บทความนี้จะแนะนำขั้นตอนการติดตั้งระบบจัดการฐานข้อมูลยอดนิยมตัวนี้บน Cloud VPS ที่ใช้ CentOS Stream 9, AlmaLinux 9 หรือ Rocky Linux 9 ตั้งแต่การเพิ่ม YUM/DNF Repository, ติดตั้ง Package, ตั้งค่าเบื้องต้น ไปจนถึงการรัน Secure Installation เพื่อให้พร้อมใช้งานอย่างปลอดภัย

ความต้องการของระบบ

ก่อนเริ่มติดตั้ง ให้ตรวจสอบว่าเซิร์ฟเวอร์มีคุณสมบัติดังนี้ — CentOS Stream 9, AlmaLinux 9 หรือ Rocky Linux 9, RAM อย่างน้อย 512 MB (แนะนำ 1 GB ขึ้นไปสำหรับ Production), พื้นที่ดิสก์ว่างอย่างน้อย 1 GB และสิทธิ์ root หรือ sudo

อัพเดต Package ของระบบ

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

sudo dnf update -y

เพิ่ม Official Repository

ต่างจาก Ubuntu ที่มีระบบจัดการฐานข้อมูลนี้อยู่ใน Default Repository แล้ว CentOS Stream 9 และ Distro ตระกูล RHEL จำเป็นต้องเพิ่ม Official Repository จาก Oracle ก่อน ดาวน์โหลดและติดตั้ง RPM Package สำหรับ Repository ด้วยคำสั่ง

sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm -y

หลังติดตั้ง RPM แล้ว ตรวจสอบว่า Repository ถูกเพิ่มเรียบร้อย

sudo dnf repolist enabled | grep mysql

ผลลัพธ์ควรแสดง mysql80-community ในรายการ Repository ที่เปิดใช้งานอยู่

ปิด Module ที่ขัดแย้ง

บาง Distro อาจมี Module ของระบบจัดการฐานข้อมูลตัวอื่น (เช่น MariaDB) ที่เปิดอยู่โดย Default ซึ่งอาจขัดแย้งกับการติดตั้ง ให้ปิด Module นี้ก่อน

sudo dnf module disable mysql -y

ติดตั้ง Server Package

เมื่อ Repository พร้อมแล้ว ติดตั้ง Server Package ด้วยคำสั่ง

sudo dnf install mysql-community-server -y

คำสั่งนี้จะติดตั้งทั้ง Server, Client และ Library ที่จำเป็นทั้งหมด

เปิด Service และตรวจสอบสถานะ

หลังติดตั้งเสร็จ ให้ Start Service และเปิด Auto-start เมื่อบูตเครื่อง

sudo systemctl start mysqld
sudo systemctl enable mysqld

ตรวจสอบสถานะว่า Service ทำงานอยู่

sudo systemctl status mysqld
mysql --version

ผลลัพธ์ควรแสดงสถานะ “active (running)” และเวอร์ชัน 8.0.x สังเกตว่าชื่อ Service บน CentOS คือ mysqld (มี d ต่อท้าย) ต่างจาก Ubuntu ที่ไม่มี

ดึง Temporary Root Password

เมื่อติดตั้งจาก Official Repository ระบบจะสร้างรหัสผ่าน Root ชั่วคราวไว้ให้อัตโนมัติ ดึงรหัสผ่านนี้จาก Log File ด้วยคำสั่ง

sudo grep 'temporary password' /var/log/mysqld.log

จดรหัสผ่านชั่วคราวที่แสดงไว้ เพราะต้องใช้ในขั้นตอนถัดไป รหัสผ่านนี้จะหมดอายุหลัง Login ครั้งแรก

รัน Secure Installation

ใช้ Script ตั้งค่าความปลอดภัยเบื้องต้น ซึ่งจะถามให้เปลี่ยนรหัสผ่าน Root, ลบ Anonymous Users, ปิด Remote Root Login, ลบ Test Database และ Reload Privilege Tables

sudo mysql_secure_installation

เมื่อระบบถามรหัสผ่าน Root ปัจจุบัน ให้ใส่รหัสผ่านชั่วคราวที่ดึงมาจาก Log จากนั้นตั้งรหัสผ่านใหม่ที่แข็งแกร่ง (ตัวเล็ก ตัวใหญ่ ตัวเลข อักขระพิเศษ อย่างน้อย 12 ตัว) แนะนำให้ตอบ Yes ทุกข้อเพื่อความปลอดภัยสูงสุด

ทดสอบเข้าใช้งาน

ทดสอบ Login เข้าสู่ Database Shell ด้วยรหัสผ่านใหม่ที่ตั้งไว้

mysql -u root -p

หลัง Login สำเร็จ ลองสร้างฐานข้อมูลทดสอบ

CREATE DATABASE test_db;
SHOW DATABASES;
DROP DATABASE test_db;

หากแสดงฐานข้อมูลที่สร้างได้ แสดงว่าระบบพร้อมใช้งานแล้ว พิมพ์ EXIT เพื่อออกจาก Shell

สร้าง User สำหรับแอปพลิเคชัน

ไม่ควรใช้ Root User สำหรับการเชื่อมต่อจากแอปพลิเคชัน ให้สร้าง User แยกที่มีสิทธิ์เฉพาะฐานข้อมูลที่ต้องการ

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
CREATE DATABASE myapp_db;
GRANT ALL PRIVILEGES ON myapp_db.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

คำสั่งข้างต้นสร้าง User ชื่อ appuser ที่เข้าถึงได้เฉพาะจาก localhost และมีสิทธิ์เต็มเฉพาะฐานข้อมูล myapp_db เท่านั้น หากต้องการให้เข้าถึงจากเครื่องอื่น ให้เปลี่ยน ‘localhost’ เป็น ‘%’ หรือ IP Address ที่ต้องการ

ปรับ Firewall ให้เปิดพอร์ต 3306

CentOS ใช้ firewalld เป็น Firewall หลัก หากต้องการให้ Remote Client เชื่อมต่อได้ ต้องเปิดพอร์ต 3306 แต่แนะนำให้จำกัดเฉพาะ IP ที่ต้องการด้วย Rich Rule

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.50" port protocol="tcp" port="3306" accept'
sudo firewall-cmd --reload

เปลี่ยน 203.0.113.50 เป็น IP ของเครื่องที่ต้องการเชื่อมต่อ นอกจากนี้ต้องแก้ไข bind-address ในไฟล์ Configuration ด้วย

sudo vi /etc/my.cnf

เพิ่มหรือแก้ไขบรรทัดต่อไปนี้ใน Section [mysqld]

bind-address = 0.0.0.0

บันทึกไฟล์แล้ว Restart Service

sudo systemctl restart mysqld

ปรับ SELinux สำหรับ Remote Connection

CentOS เปิดใช้ SELinux โดย Default ซึ่งอาจบล็อกการเชื่อมต่อจากภายนอก หากเปิดพอร์ตแล้วยังเชื่อมต่อไม่ได้ ให้ตรวจสอบและอนุญาตด้วย

sudo setsebool -P mysql_connect_any 1

คำสั่งนี้อนุญาตให้ระบบจัดการฐานข้อมูลรับการเชื่อมต่อจาก Network ได้ โดยไม่ต้องปิด SELinux ทั้งหมด

สรุป

การติดตั้งระบบจัดการฐานข้อมูลบน CentOS ต่างจาก Ubuntu ในหลายจุด ตั้งแต่การใช้ DNF แทน APT, ชื่อ Service ที่เป็น mysqld แทน mysql, การมี Temporary Password ที่ต้องดึงจาก Log และการจัดการ Firewall ผ่าน firewalld แทน UFW รวมถึง SELinux ที่ต้องตั้งค่าเพิ่ม สิ่งสำคัญที่ไม่ควรข้ามคือการรัน mysql_secure_installation, สร้าง User แยกสำหรับแอปพลิเคชัน และจำกัดการเข้าถึงจากภายนอกให้เฉพาะ IP ที่จำเป็น

แนะนำบริการ DE

หากต้องการเซิร์ฟเวอร์ที่รองรับ CentOS, AlmaLinux หรือ Rocky Linux พร้อม Root Access เต็มรูปแบบ Cloud VPS ของ DE ให้เลือกติดตั้ง OS ได้หลากหลาย มาพร้อม SSD Storage ที่ให้ IOPS สูง เหมาะกับ Database Workload ที่ต้องการความเร็วในการอ่านเขียน

สำหรับผู้ที่ต้องการฐานข้อมูลพร้อมใช้งานโดยไม่ต้องจัดการเซิร์ฟเวอร์เอง Cloud Hosting ของ DE มาพร้อมระบบจัดการฐานข้อมูลและ phpMyAdmin ที่ตั้งค่าให้เรียบร้อย เหมาะกับเว็บแอปพลิเคชันทั่วไป