การสร้าง Docker container เพื่อ run MariaDB ในการใช้ database
- สร้าง folder เก็บข้อมูลก่อน โดยคำสั่ง
mkdir -p /Users/Shared/Portable/docker-mariadb
- ไปที่ folder
cd /Users/Shared/Portable/docker-mariadb
- สร้างไฟล์
touch docker-compose.yml
- ใส่เนื้อหา
services:
mariadb:
container_name: docker-mariadb
environment:
MARIADB_ROOT_PASSWORD: mVbF58YgwCjh
MARIADB_DATABASE: 63U2k3jmmetY
MARIADB_USER: QQbPM5nzBuXQ
MARIADB_PASSWORD: ggzhUNbNTkcX
image: mariadb:latest
ports:
- "3306:3306"
restart: always
volumes:
- mariadb_data:/var/lib/mysql
volumes:
mariadb_data:
- container_name เช่น docker-mariadb
- MARIADB_ROOT_PASSWORD เช่น mVbF58YgwCjh
- MARIADB_DATABASE เช่น 63U2k3jmmetY
- MARIADB_USER เช่น QQbPM5nzBuXQ
- MARIADB_PASSWORD เช่น ggzhUNbNTkcX
- ports เช่น 3306
- ติดตั้งและรัน
docker compose up -d
ทดสอบ
ใช้คำสั่ง
docker exec -it {container_name} psql -U {MARIADB_USER} -d{MARIADB_PASSWORD}
เข่น
docker exec -it docker-mariadb mariadb -u root -pmVbF58YgwCjh
Important Management Tips
Accessing the CLI: To enter the database shell directly
docker exec -it {container_name} mariadb -u root -p
เข่น
docker exec -it docker-mariadb mariadb -u root -p
Backups
docker exec {container_name} mariadb-dump -u root -p{MARIADB_ROOT_PASSWORD} --all-databases > {filename}
เข่น
docker exec mariadb-db mariadb-dump -u root -pmVbF58YgwCjh --all-databases > backup.sql
ใช้ root สร้าง database, username เพิ่ม
MariaDB กับ MySQL มีพื้นฐานมาจากตระกูลเดียวกัน คำสั่ง (Syntax) เกือบทั้งหมดจึงใช้ร่วมกันได้เลยครับ โดยเฉพาะเรื่องการจัดการ User และ Privileges
- สร้าง Database ใหม่
CREATE DATABASE {NEW_MARIADB_DATABASE} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- สร้าง User ใหม่ (ระบุ Host เป็น ‘%’ เพื่อให้ต่อนอก Container ได้)
CREATE USER ‘{NEW_MARIADB_USER}‘@’%’ IDENTIFIED BY ‘{NEW_MARIADB_PASSWORD}‘;
- มอบสิทธิ์ทั้งหมดให้ User นั้นใน Database ที่สร้าง
GRANT ALL PRIVILEGES ON NEW_MARIADB_DATABASE}.* TO ‘สร้าง User ใหม่ (ระบุ Host เป็น ‘%’ เพื่อให้ต่อนอก Container ได้)
- ยืนยันสิทธิ์
FLUSH PRIVILEGES;
จุดที่ MariaDB เหมือนและต่างกับ MySQL (ใน Docker)
- Initialization: เหมือนกันครับ! ตัวแปร
MARIADB_USER และ MARIADB_DATABASE จะทำงาน “ครั้งแรกครั้งเดียว” เท่านั้น ถ้ามี Folder ./data อยู่แล้ว มันจะไม่สร้าง User/DB ให้ใหม่ตามที่ระบุใน YAML
- Default Plugin: MariaDB มักจะใช้
mysql_native_password หรือ unix_socket เป็นค่าเริ่มต้นอยู่แล้ว ซึ่งต่างจาก MySQL 8.0 ที่เปลี่ยนไปใช้ caching_sha2_password ดังนั้น MariaDB มักจะไม่มีปัญหาเรื่อง Client รุ่นเก่าเชื่อมต่อไม่ได้
- ความยืดหยุ่น: MariaDB จะค่อนข้างใจดีเรื่อง Syntax มากกว่า MySQL ในบางเวอร์ชัน แต่คำสั่งมาตรฐานที่คุณใช้กับ MySQL จะทำงานบน MariaDB ได้ 100% ครับ
อ่านเพิ่มเติม