Tag Archive มาเรียดีบี

Byphunsanit

Docker: MariaDB Container

การสร้าง Docker container เพื่อ run MariaDB ในการใช้ database

  1. สร้าง folder เก็บข้อมูลก่อน โดยคำสั่ง
    mkdir -p /Users/Shared/Portable/docker-mariadb
  2. ไปที่ folder
    cd /Users/Shared/Portable/docker-mariadb
  3. สร้างไฟล์
    touch docker-compose.yml
  4. ใส่เนื้อหา
    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
  5. ติดตั้งและรัน
    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

  1. สร้าง Database ใหม่
    CREATE DATABASE {NEW_MARIADB_DATABASE} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  2. สร้าง User ใหม่ (ระบุ Host เป็น ‘%’ เพื่อให้ต่อนอก Container ได้)
    CREATE USER ‘{NEW_MARIADB_USER}‘@’%’ IDENTIFIED BY ‘{NEW_MARIADB_PASSWORD}‘;
  3. มอบสิทธิ์ทั้งหมดให้ User นั้นใน Database ที่สร้าง
    GRANT ALL PRIVILEGES ON NEW_MARIADB_DATABASE}.* TO ‘สร้าง User ใหม่ (ระบุ Host เป็น ‘%’ เพื่อให้ต่อนอก Container ได้)
  4. ยืนยันสิทธิ์
    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% ครับ

อ่านเพิ่มเติม