วิธีติดตั้ง MySQL บน Ubuntu 20.04

Install MySQL Ubuntu20.04

MySQL เป็นระบบจัดการฐานข้อมูล open-source เป็นส่วนหนึ่งของ stack ซึ่ง LAMP (Linux, Apache, MySQL, PHP/Python/Perl) เป็นที่นิยมอย่างมาก ใช้โมเดลเชิงสัมพันธ์และใช้ Structured Query Language (รู้จักกันดีในชื่อ SQL) เพื่อจัดการข้อมูล คู่มือนี้ จะเป็นการติดตั้ง MySQL เวอร์ชั่น 8.0 บน Ubuntu 20.04 หากดำเนินการติดตั้งเรียบร้อยแล้ว จะสามารถใช้ฐานข้อมูลในการทำเว็บไซต์หรือสร้างแอปพลิเคชั่นได้ ก่อนที่จะดำเนินการติดตั้ง แนะนำให้ ตั้งค่า server เบื้องต้นด้วย Ubuntu 20.04 ให้เรียบร้อยก่อน

ขั้นตอนที่ 1 – ดำเนินการติดตั้ง MySQL

สำหรับบน Ubuntu 20.04 สามารถติดตั้ง MySQL โดยการใช้พื้นที่เก็บข้อมูล APT package โดยเวอร์ชั่นมาตรฐานคือ 8.0.34 หากต้องการติดตั้ง ให้อัปเดต package บนเซิร์ฟเวอร์ หากยังไม่ได้ดำเนินการเมื่อเร็ว ๆ นี้ ให้ใช้คำสั่ง

sudo apt update

จากนั้นติดตั้ง MySQL-server package ด้วยคำสั่ง

sudo apt install mysql-server

ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์กำลังทำงานโดยใช้คำสั่ง systemctl start

sudo systemctl start mysql.service

คำสั่งเหล่านี้จะทำให้ MySQL เริ่มติดตั้ง แต่จะไม่แจ้งให้ตั้งรหัสผ่านหรือทำการเปลี่ยนแปลงการกำหนดค่าอื่น ๆ เนื่องจากจะทำให้การติดตั้ง MySQL ของคุณไม่ปลอดภัย

ขั้นตอนที่ 2 – กำหนดค่า MySQL

สำหรับการติดตั้ง MySQL ใหม่ จะต้องเรียกใช้สคริปต์ความปลอดภัยที่รวมอยู่ใน DBMS สคริปต์นี้เปลี่ยนตัวเลือกเริ่มต้นที่มีความปลอดภัยน้อยกว่าสำหรับสิ่งต่างๆ เช่น การเข้าสู่ระบบ root

คำเตือน: ตั้งแต่เดือนกรกฎาคม 2022 ข้อผิดพลาดจะเกิดขึ้นเมื่อคุณเรียกใช้สคริปต์ mysql_secure_installation โดยไม่มีการกำหนดค่าเพิ่มเติม เหตุผลก็คือสคริปต์นี้จะพยายามตั้งรหัสผ่านสำหรับบัญชี MySQL รูทของการติดตั้ง แต่ตามค่าเริ่มต้นในการติดตั้ง Ubuntu บัญชีนี้ไม่ได้รับการกำหนดค่าให้เชื่อมต่อโดยใช้รหัสผ่าน

เนื่องจากสคริปต์ mysql_secure_installation จะมีส่วนช่วยดำเนินการต่างๆ มากมายที่เป็นประโยชน์ในการรักษาความปลอดภัยให้กับการติดตั้ง MySQL จึงขอแนะนำให้รันสคริปต์ก่อนที่จะเริ่มใช้ MySQL เพื่อจัดการข้อมูลและเพื่อหลีกเลี่ยงการเข้าสู่ลูปแบบเรียกซ้ำนี้ จะต้องปรับวิธีการตรวจสอบสิทธิ์ผู้ใช้ root MySQL ของคุณก่อน

อันดับแรก เปิด MySQL

sudo mysql

จากนั้นรันคำสั่ง ALTER USER ต่อไปนี้เพื่อเปลี่ยนวิธีการตรวจสอบสิทธิ์ของผู้ใช้ root เป็นวิธีที่ใช้รหัสผ่าน ตัวอย่างต่อไปนี้เปลี่ยนวิธีการรับรองความถูกต้องเป็น mysql_native_password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

หลังจากดำเนินการเรียบร้อยแล้ว ให้ออกจาก MySQL

exit

จากนั้นรันคำสั่งต่อไปนี้เพื่อดำเนินการติดตั้ง

sudo mysql_secure_installation

หลังจากดำเนินการแล้ว จะนำไปสู่ตัวเลือกความปลอดภัยของการติดตั้ง MySQL ข้อความแรกจะถามว่าต้องการตั้งค่า Validate Password Plugin หรือไม่ ซึ่งสามารถใช้เพื่อทดสอบความปลอดภัยของรหัสผ่านของผู้ใช้ MySQL ใหม่ หากเลือกที่จะตั้งค่า Validate Password Plugin ผู้ใช้ MySQL ใดๆ ที่คุณสร้างต้องมีรหัสผ่านที่ตรงกัน ซึ่งเป็นระดับนโยบายที่เข้มงวดที่สุด จะกำหนดให้รหัสผ่านมีความยาวอย่างน้อยแปดตัวอักษรและประกอบด้วยตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก ตัวเลข และอักขระพิเศษผสมกัน และไม่ว่าคุณจะเลือกตั้งค่า Validate Password Plugin หรือไม่ก็ตาม ข้อความแจ้งถัดไปคือการตั้งรหัสผ่านสำหรับผู้ใช้ root ของ MySQL ป้อนแล้วยืนยันรหัสผ่านที่ปลอดภัยที่คุณเลือก

หากใช้ Validate Password Plugin คุณจะได้รับแจ้งของรหัสผ่านใหม่ จากนั้นสคริปต์จะถามว่าต้องการดำเนินการต่อด้วยรหัสผ่านที่คุณเพิ่งป้อนหรือต้องการป้อนรหัสผ่านใหม่ สมมติว่าพอใจกับรหัสผ่านที่เพิ่งป้อน ให้พิมพ์ Y เพื่อดำเนินการต่อ จากนั้น คุณสามารถกด Y แล้วกด ENTER เพื่อยอมรับค่าเริ่มต้นสำหรับคำถามต่อๆ ไปทั้งหมด การดำเนินการนี้จะลบผู้ใช้ที่ไม่ระบุชื่อบางส่วนและฐานข้อมูลทดสอบ ปิดใช้งานการเข้าสู่ระบบ remote root และจะเห็นกฎใหม่เพื่อให้ MySQL มีการเปลี่ยนแปลงตามที่ดำเนินการไป เมื่อสคริปต์เสร็จสิ้น การติดตั้ง MySQL ถือว่าปลอดภัย ตอนนี้สามารถก้าวไปสู่การสร้างผู้ใช้ฐานข้อมูลเฉพาะด้วย MySQL client  ได้แล้ว

ขั้นตอนที่ 3 – การสร้างผู้ใช้ MySQL และการให้สิทธิ์

เมื่อติดตั้ง MySQL จะมีการสร้างบัญชี root ซึ่งสามารถใช้จัดการฐานข้อมูลได้ ผู้ใช้รายนี้มีสิทธิ์เต็มรูปแบบบนเซิร์ฟเวอร์ MySQL ซึ่งหมายความว่าจะสามารถควบคุมฐานข้อมูล ตาราง ผู้ใช้และอื่น ๆ ได้อย่างสมบูรณ์ ในระบบ Ubuntu ที่ใช้ MySQL 5.7 (และเวอร์ชันใหม่กว่า) ผู้ใช้ MySQL root จะถูกตั้งค่าให้ตรวจสอบสิทธิ์โดยใช้ปลั๊กอิน auth_socket ตามค่าเริ่มต้น แทนที่จะใช้รหัสผ่าน ปลั๊กอินนี้ต้องให้ชื่อของผู้ใช้ระบบปฏิบัติการ MySQL client ตรงกับชื่อของผู้ใช้ MySQL ที่ระบุในคำสั่ง ดังนั้นต้องเรียกใช้ mysql ด้วยสิทธิ์ sudo เพื่อเข้าถึงผู้ใช้ root MySQL

sudo mysql

หมายเหตุ: หากมีการติดตั้ง MySQL ด้วยคู่มืออื่นและต้องการเปิดใช้งานการตรวจสอบสิทธิ์รหัสผ่านสำหรับ root จะต้องใช้คำสั่งอื่นเพื่อเข้าถึง MySQL shell ต่อไปนี้จะเรียกใช้ MySQL client ของคุณด้วยสิทธิ์ผู้ใช้ปกติ และจะได้รับสิทธิ์ผู้ดูแลระบบภายในฐานข้อมูลโดยการตรวจสอบสิทธิ์เท่านั้น

mysql -u root -p

เมื่อคุณเข้าถึง MySQL prompt แล้ว คุณสามารถสร้างผู้ใช้ใหม่ด้วยคำสั่ง CREATE USER ดังนี้ (ทางเราใช้ชื่อผู้ใช้ว่า john)

CREATE USER 'john'@'localhost' IDENTIFIED BY 'password';

ข้อแนะนำ

หากวางแผนที่จะใช้ฐานข้อมูลนี้กับแอปพลิเคชัน PHP เช่น phpMyAdmin อาจต้องสร้างผู้ใช้ที่อนุญาตให้เข้าถึงปลั๊กอินด้วยวิธี mysql_native_password แบบเดิมที่ยังคงปลอดภัยแทน

CREATE USER 'john'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

แต่ถ้าหากยังไม่มั่นใจว่าจะใช้กับอะไร สามารถสร้างผู้ใช้ด้วย caching_sha2_plugin ได้ตลอดเวลา แล้วจึงแก้ไขในภายหลังด้วยคำสั่งนี้

ALTER USER 'john'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

หลังจากสร้างผู้ใช้ใหม่แล้ว คุณสามารถกำหนดสิทธิ์ที่เหมาะสมได้เลยโดยใช้คำสั่งดังนี้

GRANT PRIVILEGE ON database.table TO 'username'@'host';

ค่า PRIVILEGE จะกำหนดสิทธิ์ที่ผู้ใช้ได้รับอนุญาตให้ดำเนินการบนฐานข้อมูลและตารางที่ระบุ คุณสามารถให้สิทธิ์หลายรายการแก่ผู้ใช้คนเดียวกันได้ในคำสั่งเดียวโดยคั่นแต่ละรายการด้วยเครื่องหมายจุลภาค(,) คุณยังสามารถให้สิทธิ์ผู้ใช้อื่น ๆ ได้โดยการป้อนเครื่องหมายดอกจัน (*) แทนชื่อฐานข้อมูลและตาราง ใน SQL เครื่องหมายดอกจันเป็นอักขระพิเศษที่ใช้แทนฐานข้อมูลหรือตาราง “ทั้งหมด”

คำสั่งต่อไปนี้ให้สิทธิ์ผู้ใช้อื่น ๆ ในการดำเนินการใด ๆ กับฐานข้อมูล เช่น CREATE, ALTER และ DROP, ตารางและผู้ใช้ ตลอดจนอำนาจในการ INSERT, UPDATE และ DELETE ข้อมูลจากตารางใดๆ บนเซิร์ฟเวอร์ นอกจากนี้ยังให้ผู้ใช้สามารถสืบค้นข้อมูลด้วย SELECT สร้างคีย์นอกด้วยคีย์เวิร์ด REFERENCES และดำเนินการ FLUSH ด้วยสิทธิ์ RELOAD ดังนั้นควรกำหนดสิทธิ์ของผู้ใช้ให้ชัดเจน สามารถดูคำสั่ง อื่น ๆ  ได้ที่นี่

เรียกใช้คำสั่ง GRANT นี้ โดยแทนที่ Johnด้วยชื่อผู้ใช้ MySQL ของคุณเอง เพื่อให้สิทธิ์เหล่านี้แก่ผู้ใช้

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, DELETE, SELECT, REFERENCES, RELOAD on *.* TO john@'localhost' WITH GRANT OPTION;

อย่าลืมว่าคำสั่งนี้ยังรวมถึง WITH GRANT OPTION ด้วย ซึ่งจะช่วยให้ผู้ใช้ MySQL สามารถให้สิทธิ์ใด ๆ ที่มีแก่ผู้ใช้รายอื่นในระบบได้

คำเตือน ไม่ควรให้สิทธิ์ ALL PRIVILEGES แก่ผู้ใช้ MySQL คล้าย ๆ กับสิทธิ์ root เนื่องจากใครก็ตามที่สามารถเข้าถึงผู้ใช้ MySQL นี้จะสามารถควบคุมทุกฐานข้อมูลบนเซิร์ฟเวอร์ได้

แนะนำให้รันคำสั่ง FLUSH PRIVILEGES สิ่งนี้จะเพิ่มหน่วยความจำใด ๆ จากแคชของเซิร์ฟเวอร์ที่เป็นผลมาจากคำสั่ง CREATE USER และ GRANT ก่อนหน้านี้

FLUSH PRIVILEGES;

จากนั้นให้ออกจากหน้า MySQL

exit

ขั้นตอนที่ 4 – ทดสอบ MySQL

ไม่ว่าจะติดตั้งอย่างไร MySQL ควรเริ่มทำงานโดยอัตโนมัติ หากต้องการทดสอบ ให้ตรวจสอบด้วยคำสั่ง

systemctl status mysql.service

จะเห็นผลลัพธ์ดังนี้

หาก MySQL ไม่ทำงาน คุณสามารถเริ่มต้นด้วยคำสั่ง

sudo systemctl start mysql

สำหรับการตรวจสอบเพิ่มเติม คุณสามารถลองเชื่อมต่อกับฐานข้อมูลโดยใช้เครื่องมือ mysqladmin ตัวอย่างเช่น คำสั่งนี้บอกว่าให้เชื่อมต่อในฐานะผู้ใช้ MySQL ชื่อ john (-u john) ให้ขอรหัสผ่าน (-p) และส่งคืนเวอร์ชัน อย่าลืมเปลี่ยน john เป็นชื่อผู้ใช้ MySQL ของคุณ และป้อนรหัสผ่านของผู้ใช้นั้นเมื่อได้รับแจ้ง

sudo mysqladmin -p -u john version

Was this article helpful?

Related Articles