การสร้าง 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 ONNEW_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% ครับ
อ่านเพิ่มเติม
