วิธีติดตั้ง MariaDB บน Ubuntu (20.04 / 22.04 / 24.04) – คู่มือการตั้งค่าและความปลอดภัยแบบครบถ้วน

目次

วิธีที่เร็วที่สุดในการติดตั้ง MariaDB บน Ubuntu (รองรับ 20.04 / 22.04 / 24.04)

หากคุณต้องการเริ่มใช้ MariaDB บน Ubuntu ทันที เพียงทำตามขั้นตอนด้านล่างเพื่อทำการติดตั้งและตรวจสอบการเริ่มต้น หากไม่มีเหตุผลพิเศษ การติดตั้งจากที่เก็บข้อมูลเริ่มต้นของ Ubuntu เป็นตัวเลือกที่ปลอดภัยและเสถียรที่สุด

① อัปเดตข้อมูลแพ็กเกจ

sudo apt update
sudo apt upgrade -y

② ติดตั้ง MariaDB

sudo apt install -y mariadb-server mariadb-client

ไม่จำเป็นต้องกำหนดค่าพิเศษใด ๆ ระหว่างการติดตั้ง หลังจากเสร็จสิ้น บริการ MariaDB จะเริ่มทำงานโดยอัตโนมัติ

③ ตรวจสอบว่า MariaDB กำลังทำงาน

sudo systemctl status mariadb

หากแสดง active (running) แสดงว่า MariaDB ทำงานอย่างถูกต้อง

④ เปิดใช้งานการเริ่มต้นอัตโนมัติ (โดยปกติไม่จำเป็นแต่แนะนำให้ยืนยัน)

sudo systemctl enable mariadb

⑤ เชื่อมต่อไปยัง MariaDB และตรวจสอบการทำงาน

sudo mysql

หากคุณเห็นพรอมต์ต่อไปนี้ การติดตั้งสำเร็จแล้ว:

MariaDB [(none)]>

เพื่อออกจากระบบ ให้พิมพ์ exit;.

การกำหนดค่าความปลอดภัยขั้นพื้นฐานหลังการติดตั้ง

ทันทีหลังการติดตั้ง MariaDB จะมีการตั้งค่าความปลอดภัยขั้นพื้นฐานเพียงเล็กน้อยเท่านั้น อย่าลืมรันคำสั่งต่อไปนี้:

sudo mysql_secure_installation

โดยทั่วไป คำตอบต่อไปนี้เป็นที่แนะนำ:

  • ลบผู้ใช้แบบไม่ระบุชื่อ → Y
  • ปฏิเสธการเข้าสู่ระบบ root จากระยะไกล → Y
  • ลบฐานข้อมูลทดสอบ → Y
  • โหลดตารางสิทธิ์ใหม่ → Y

ขั้นตอนนี้เสร็จสิ้นการตั้งค่าสภาพแวดล้อม MariaDB ที่ปลอดภัยบน Ubuntu

เวอร์ชัน MariaDB ที่ติดตั้งตามเวอร์ชันของ Ubuntu

  • Ubuntu 20.04 → MariaDB รุ่น 10.3
  • Ubuntu 22.04 → MariaDB รุ่น 10.6
  • Ubuntu 24.04 → MariaDB รุ่น 10.11 (LTS)

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

การตรวจสอบอย่างรวดเร็วหากการติดตั้งล้มเหลวหรือบริการไม่เริ่มทำงาน

  • ตรวจสอบข้อผิดพลาดด้วย sudo systemctl status mariadb
  • ตรวจสอบบันทึกโดยละเอียดด้วย sudo journalctl -xe
  • ตรวจสอบพื้นที่ดิสก์ด้วย df -h

ในหลาย ๆ กรณี ปัญหามักเป็นเนื่องจากพื้นที่ดิสก์ไม่พอหรือการพิมพ์ผิดในไฟล์กำหนดค่า

การเลือกเวอร์ชัน MariaDB ที่เหมาะสมสำหรับเวอร์ชัน Ubuntu ของคุณ

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

เวอร์ชันจากที่เก็บข้อมูลเริ่มต้นของ Ubuntu (แนะนำ)

  • Ubuntu 20.04 → MariaDB รุ่น 10.3
  • Ubuntu 22.04 → MariaDB รุ่น 10.6
  • Ubuntu 24.04 → MariaDB รุ่น 10.11 (LTS)

หากไม่มีความต้องการเฉพาะ เวอร์ชันเหล่านี้เหมาะสมอย่างเต็มที่สำหรับการใช้งานในสภาพแวดล้อมการผลิต

หากคุณต้องการเวอร์ชันล่าสุด (เพิ่มที่เก็บข้อมูลอย่างเป็นทางการของ MariaDB)

หากคุณต้องการฟีเจอร์ใหม่ล่าสุด คุณสามารถเพิ่มที่เก็บข้อมูลอย่างเป็นทางการของ MariaDB ได้ เนื่องจาก apt-key ถูกยกเลิกการใช้งาน วิธีนี้จึงใช้วิธี signed-by

① บันทึกคีย์ GPG

sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSL https://mariadb.org/mariadb_release_signing_key.asc \
  | sudo gpg --dearmor -o /etc/apt/keyrings/mariadb.gpg

② ตรวจสอบรหัสชื่อ Ubuntu ของคุณ

lsb_release -cs

ตัวอย่าง:

  • 20.04 → focal
  • 22.04 → jammy
  • 24.04 → noble

③ เพิ่มที่เก็บข้อมูลอย่างเป็นทางการ (ตัวอย่าง: รุ่น 10.11)

echo "deb [signed-by=/etc/apt/keyrings/mariadb.gpg] \
https://mirror.mariadb.org/repo/10.11/ubuntu \
$(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/mariadb.list

④ อัปเดตแพ็กเกจและติดตั้ง

sudo apt update
sudo apt install mariadb-server mariadb-client

หมายเหตุเมื่อใช้ที่เก็บข้อมูลอย่างเป็นทางการ

  • คุณสามารถใช้ฟีเจอร์ใหม่กว่ารุ่นเริ่มต้นของ Ubuntu
  • มีความเสี่ยงในอนาคตของความขัดแย้งของการพึ่งพา
  • จำเป็นต้องทดสอบอย่างละเอียดสำหรับเซิร์ฟเวอร์การผลิต

สำหรับการผลิต ควรตัดสินใจอย่างชัดเจนว่าคุณให้ความสำคัญกับความเสถียรหรือฟีเจอร์ล่าสุด

วิธีตรวจสอบเวอร์ชัน MariaDB ที่ติดตั้งอยู่ในปัจจุบัน

mysql --version

ตัวอย่าง:

mysql  Ver 15.1 Distrib 10.6.16-MariaDB

โดยการยืนยันเวอร์ชันอย่างชัดเจน การแก้ไขปัญหาและการย้ายข้อมูลจะง่ายขึ้นมาก.

คู่มือเต็มสำหรับการตั้งค่าความปลอดภัยเริ่มต้นของ MariaDB (mysql_secure_installation)

ทันทีหลังจากติดตั้ง MariaDB จะมีการตั้งค่าความปลอดภัยขั้นพื้นฐานเท่านั้น เพื่อการทำงานอย่างปลอดภัย โปรดรันคำสั่งต่อไปนี้:

sudo mysql_secure_installation

เมื่อรันแล้ว จะมีการแสดงคำถามหลายรายการ ในกรณีส่วนใหญ่ คำตอบต่อไปนี้เป็นที่แนะนำ.

คำตอบที่แนะนำ

  • Enter current password for root: → กด Enter (ไม่ได้ตั้งค่าในการรันครั้งแรก)
  • Switch to unix_socket authentication? → Y (แนะนำบน Ubuntu)
  • Change the root password? → N (หากใช้การยืนยันแบบ unix_socket)
  • Remove anonymous users? → Y
  • Disallow root login remotely? → Y
  • Remove test database and access to it? → Y
  • Reload privilege tables now? → Y

ขั้นตอนการตั้งค่าความปลอดภัยพื้นฐานเสร็จสมบูรณ์.

ทำไมคุณไม่สามารถเข้าสู่ระบบเป็น root (ข้อผิดพลาด Access Denied)

บน Ubuntu ผู้ใช้ root จะใช้ unix_socket authentication เป็นค่าเริ่มต้น ดังนั้นการเข้าสู่ระบบด้วยรหัสผ่านแบบปกติจะไม่ทำงาน.

อาการตัวอย่าง

mysql -u root -p

Access denied for user 'root'@'localhost'

วิธีการเข้าสู่ระบบที่ถูกต้อง (ค่าเริ่มต้นของ Ubuntu)

sudo mysql

นี่เป็นวิธีที่ปลอดภัยที่สุดและแนะนำ.

วิธีเปลี่ยน root ให้ใช้การยืนยันด้วยรหัสผ่าน (เฉพาะเมื่อจำเป็น)

เปลี่ยนวิธีการยืนยันเฉพาะเมื่อคุณจำเป็นต้องเชื่อมต่อเป็น root จากเครื่องมือหรือแอปพลิเคชันภายนอก.

① เชื่อมต่อไปยัง MariaDB

sudo mysql

② เปลี่ยนปลั๊กอินการยืนยัน

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

FLUSH PRIVILEGES;

③ ยืนยันการเปลี่ยนแปลง

SELECT user, host, plugin FROM mysql.user;

หากแสดง mysql_native_password การเปลี่ยนแปลงสำเร็จ.

วิธีตรวจสอบวิธีการยืนยันปัจจุบัน

sudo mysql -e "SELECT user, host, plugin FROM mysql.user;"

วิธีการยืนยันหลัก:

  • unix_socket → ค่าเริ่มต้นของ Ubuntu, ปลอดภัย
  • mysql_native_password → การยืนยันด้วยรหัสผ่าน

ยกเว้นกรณีที่มีเหตุผลเฉพาะ การใช้ unix_socket authentication สำหรับ root ยังคงเป็นวิธีที่ปลอดภัยที่สุด.

ข้อผิดพลาดทั่วไปและวิธีแก้

ERROR 1698 (28000): Access denied for user ‘root’@’localhost’

  • สาเหตุ: พยายามเข้าสู่ระบบด้วยรหัสผ่าน
  • วิธีแก้: เข้าสู่ระบบโดยใช้ sudo mysql

ไม่พบ mysql_secure_installation

  • ตรวจสอบด้วย which mysql_secure_installation
  • หากยังไม่ได้ติดตั้ง ให้รัน sudo apt install mariadb-server

ตั้งค่าการเข้ารหัสอักขระเป็น utf8mb4 (ป้องกันข้อความแสดงผลผิดพลาด)

เพื่อจัดการข้อความหลายภาษาและอีโมจิใน MariaDB อย่างปลอดภัย แนะนำให้ใช้ utf8mb4 หากไม่มีการตั้งค่านี้ คุณอาจเจอปัญหาการเข้ารหัสหรือข้อมูลสูญหาย.

① แก้ไขไฟล์การกำหนดค่า

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

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

[mysqld]
character-set-server = utf8mb4
collation-server     = utf8mb4_general_ci

② รีสตาร์ท MariaDB

sudo systemctl restart mariadb

③ ตรวจสอบการตั้งค่า

sudo mysql -e "SHOW VARIABLES LIKE 'character_set%';"

หากแสดง utf8mb4 การตั้งค่าสำเร็จ.

ระบุ utf8mb4 เมื่อสร้างฐานข้อมูล (แนะนำ)

หากต้องการกำหนดชุดอักขระอย่างชัดเจนโดยไม่คำนึงถึงการตั้งค่าทั่วไป ให้ระบุขณะสร้างฐานข้อมูล.

CREATE DATABASE sample_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

ตารางทั้งหมดที่สร้างภายในฐานข้อมูลนี้จะสืบทอด utf8mb4.

สร้างผู้ใช้แอปพลิเคชันและมอบสิทธิ์

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

① Log in to MariaDB

เข้าสู่ระบบ MariaDB

sudo mysql

② Create a User (Local Connection)

สร้างผู้ใช้ (การเชื่อมต่อภายในเครื่อง)

CREATE USER 'app_user'@'localhost'
IDENTIFIED BY 'StrongPasswordHere';

③ Grant Database Privileges

ให้สิทธิ์ฐานข้อมูล

GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'localhost';

FLUSH PRIVILEGES;

Create a Remote Access User (Only If Needed)

สร้างผู้ใช้เข้าถึงระยะไกล (เฉพาะเมื่อจำเป็น)

Configure this only if you need to connect from an external server or cloud environment. กำหนดค่านี้เฉพาะเมื่อคุณต้องการเชื่อมต่อจากเซิร์ฟเวอร์ภายนอกหรือสภาพแวดล้อมคลาวด์

CREATE USER 'app_user'@'%'
IDENTIFIED BY 'StrongPasswordHere';

GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'%';

FLUSH PRIVILEGES;

Note: The “%” wildcard allows connections from any host. In production environments, specifying a particular IP address is safer. หมายเหตุ: อักขระแทน “%” อนุญาตการเชื่อมต่อจากโฮสต์ใดก็ได้ ในสภาพแวดล้อมการผลิต การระบุที่อยู่ IP เฉพาะจะปลอดภัยกว่า

How to Check Current Users and Privileges

วิธีตรวจสอบผู้ใช้และสิทธิ์ปัจจุบัน

SELECT user, host FROM mysql.user;

SHOW GRANTS FOR 'app_user'@'localhost';

Common Permission Errors and Solutions

ข้อผิดพลาดสิทธิ์ทั่วไปและวิธีแก้

Access denied for user ‘app_user’

การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ ‘app_user’

  • Incorrect host specification (difference between localhost and %)
  • การระบุโฮสต์ไม่ถูกต้อง (ความแตกต่างระหว่าง localhost และ %)
  • FLUSH PRIVILEGES was not executed
  • ไม่ได้เรียกใช้ FLUSH PRIVILEGES
  • Incorrect database name during connection
  • ชื่อฐานข้อมูลไม่ถูกต้องระหว่างการเชื่อมต่อ

Unknown database

ฐานข้อมูลไม่รู้จัก

  • Database name typo
  • พิมพ์ชื่อฐานข้อมูลผิด
  • No privileges granted for the target database
  • ไม่ได้ให้สิทธิ์กับฐานข้อมูลเป้าหมาย

How to Allow Remote Connections in MariaDB (Fix When External Access Fails)

วิธีอนุญาตการเชื่อมต่อระยะไกลใน MariaDB (แก้ไขเมื่อการเข้าถึงภายนอกล้มเหลว)

By default, MariaDB allows local connections only. If you need to connect from an external server or cloud environment, configure the following settings. โดยค่าเริ่มต้น MariaDB อนุญาต การเชื่อมต่อภายในเครื่องเท่านั้น หากคุณต้องการเชื่อมต่อจากเซิร์ฟเวอร์ภายนอกหรือสภาพแวดล้อมคลาวด์ ให้กำหนดค่าตามต่อไปนี้

① Change bind-address

เปลี่ยน bind-address

Edit the configuration file: แก้ไขไฟล์กำหนดค่า:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Find the following line: ค้นหาบรรทัดต่อไปนี้:

bind-address = 127.0.0.1

To allow external connections, change it to: เพื่ออนุญาตการเชื่อมต่อภายนอก ให้เปลี่ยนเป็น:

bind-address = 0.0.0.0

After saving, restart MariaDB: บันทึกแล้วรีสตาร์ท MariaDB:

sudo systemctl restart mariadb

② Open Port 3306 in the Firewall

เปิดพอร์ต 3306 ในไฟร์วอลล์

If you are using UFW on Ubuntu: หากคุณใช้ UFW บน Ubuntu:

sudo ufw allow 3306
sudo ufw reload

For improved security, specify the source IP address: เพื่อความปลอดภัยที่ดีขึ้น ให้ระบุที่อยู่ IP แหล่งที่มา:

sudo ufw allow from 192.168.1.10 to any port 3306

③ Create a Remote Access User

สร้างผู้ใช้เข้าถึงระยะไกล

CREATE USER 'app_user'@'%'
IDENTIFIED BY 'StrongPasswordHere';

GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'%';

FLUSH PRIVILEGES;

For better security: เพื่อความปลอดภัยที่ดียิ่งขึ้น:

CREATE USER 'app_user'@'192.168.1.10'
IDENTIFIED BY 'StrongPasswordHere';

Checklist If You Cannot Connect Externally

รายการตรวจสอบหากคุณไม่สามารถเชื่อมต่อจากภายนอกได้

1. Is MariaDB Running?

MariaDB กำลังทำงานหรือไม่?

sudo systemctl status mariadb

2. Is Port 3306 Listening?

พอร์ต 3306 กำลังฟังหรือไม่?

sudo ss -tulnp | grep 3306

If it shows 0.0.0.0:3306, it is correctly listening on all interfaces. หากแสดง 0.0.0.0:3306 หมายความว่าฟังอย่างถูกต้องบนทุกอินเทอร์เฟซ

3. If Using a Cloud Environment (AWS / GCP / VPS)

หากใช้สภาพแวดล้อมคลาวด์ (AWS / GCP / VPS)

  • Ensure port 3306 is open in the security group
  • ตรวจสอบให้แน่ใจว่าพอร์ต 3306 เปิดอยู่ใน security group
  • Confirm that no external firewall is blocking the connection
  • ยืนยันว่าไม่มีไฟร์วอลล์ภายนอกบล็อกการเชื่อมต่อ

4. Causes by Error Message

สาเหตุจากข้อความแสดงข้อผิดพลาด

Can’t connect to MySQL server

ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL

  • Port is closed
  • พอร์ตปิดอยู่
  • bind-address not changed
  • ไม่ได้เปลี่ยน bind-address
  • Firewall blocking the connection
  • ไฟร์วอลล์บล็อกการเชื่อมต่อ

Access denied for user

การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้

  • Incorrect user host specification
  • การระบุโฮสต์ของผู้ใช้ไม่ถูกต้อง
  • Incorrect password
  • รหัสผ่านไม่ถูกต้อง
  • Privileges not granted
  • ไม่ได้ให้สิทธิ์

Connection timed out

การเชื่อมต่อหมดเวลา

  • Cloud-side security settings
  • การตั้งค่าความปลอดภัยด้านคลาวด์
  • Network routing issues
  • ปัญหาเส้นทางเครือข่าย

Important Security Notes

หมายเหตุด้านความปลอดภัยที่สำคัญ

  • Avoid using “%” in production environments
  • หลีกเลี่ยงการใช้ “%” ในสภาพแวดล้อมการผลิต
  • Use VPN access whenever possible
  • ใช้การเข้าถึง VPN เมื่อเป็นไปได้
  • Consider enabling SSL/TLS connections
  • พิจารณาเปิดใช้งานการเชื่อมต่อ SSL/TLS
  • Never allow remote root login
  • อย่าอนุญาตให้ล็อกอิน root จากระยะไกล

Troubleshooting When MariaDB Fails to Start (failed Error)

การแก้ไขปัญหาเมื่อ MariaDB ไม่สามารถเริ่มทำงาน (ข้อผิดพลาดล้มเหลว)

① Check Service Status

ตรวจสอบสถานะบริการ

sudo systemctl status mariadb

② Check Detailed Logs

ตรวจสอบบันทึกโดยละเอียด

sudo journalctl -xe
sudo cat /var/log/mysql/error.log

③ Common Causes

สาเหตุทั่วไป

  • Configuration file syntax errors
  • ข้อผิดพลาดไวยากรณ์ไฟล์กำหนดค่า
  • Insufficient disk space
  • พื้นที่ดิสก์ไม่เพียงพอ
  • Port conflict (MySQL already running)
  • ขัดแย้งพอร์ต (MySQL กำลังทำงานอยู่แล้ว)

④ Check Disk Space

ตรวจสอบพื้นที่ดิสก์

df -h

Summary of Access Denied Error Causes

สรุปสาเหตุของข้อผิดพลาดการเข้าถึงถูกปฏิเสธ

  • Incorrect password
  • รหัสผ่านไม่ถูกต้อง
  • Incorrect host specification (difference between localhost and %)
  • การระบุโฮสต์ไม่ถูกต้อง (ความแตกต่างระหว่าง localhost และ %)
  • FLUSH PRIVILEGES not executed
  • ไม่ได้เรียกใช้ FLUSH PRIVILEGES
  • Attempting standard login for root (requires sudo mysql )
  • พยายามล็อกอินมาตรฐานสำหรับ root (ต้องใช้ sudo mysql )

Basic Performance Improvements (For Beginners)

การปรับปรุงประสิทธิภาพพื้นฐาน (สำหรับผู้เริ่มต้น)

Advanced tuning is not required, but at minimum, confirm the following settings.

① เปิดใช้งาน Slow Query Log

เพิ่มสิ่งต่อไปนี้ลงใน 50-server.cnf:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

รีสตาร์ท MariaDB:

sudo systemctl restart mariadb

② ตรวจสอบการใช้งานดัชนี

คำสั่ง SQL ช้าอาจขาดดัชนีที่เหมาะสม

EXPLAIN SELECT * FROM sample_table WHERE column_name = 'value';

③ ตรวจสอบทรัพยากรเซิร์ฟเวอร์

top
htop

หากหน่วยความจำไม่เพียงพอ พิจารณาอัปเกรดแผนเซิร์ฟเวอร์ของคุณ

คำถามที่พบบ่อย (FAQ)

ฉันสามารถล็อกเวอร์ชัน MariaDB บน Ubuntu 22.04 ได้อย่างไร?

ใช้ apt-mark hold mariadb-server

ฉันจะรีเซ็ตรหัสผ่าน root ได้อย่างไรหากลืม?

คุณสามารถรีเซ็ตได้โดยเริ่มในโหมดปลอดภัยและกำหนดรหัสผ่านใหม่ ดูคู่มือเฉพาะของเราสำหรับขั้นตอนโดยละเอียด

ฉันจะเปลี่ยนหมายเลขพอร์ต MariaDB ได้อย่างไร?

แก้ไข 50-server.cnf เป็นเช่น port = 3307 จากนั้นรีสตาร์ทบริการ

สรุป: การใช้ MariaDB อย่างปลอดภัยบน Ubuntu

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

โดยการทำตามขั้นตอนเหล่านี้ คุณสามารถสร้างสภาพแวดล้อม MariaDB ที่ปลอดภัยและพร้อมใช้งานจริงบน Ubuntu