ย้ายข้อมูล MariaDB 10 ไปใช้งาน MySQL 8
บล็อกที่ท่านกำลังอ่านทำงานอยู่บน Ghost CMS ซึ่งก่อนหน้านี้ใช้งาน MariaDB ในการจัดเก็บข้อมูล แต่เนื่องด้วย Ghost 5+ (เวอร์ชั่นใหม่) แนะนำให้ไปใช้งาน MySQL 8
ของเดิมบล็อกรันด้วย docker compose โดยจะมี ghost + mariadb รันคู่กัน
version: "2.1"
services:
ghost:
image: ghost:latest
container_name: ghost
restart: unless-stopped
ports:
- 8081:2368
environment:
- database__client=mysql
- database__connection__host=mariadb
- database__connection__user=ghost
- database__connection__password=ghost
- database__connection__database=ghost
- url=http://localhost:8081
volumes:
- /ghost:/var/lib/ghost/content
links:
- mariadb
mariadb:
image: mariadb:latest
container_name: mariadb
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=ghost
- MYSQL_DATABASE=ghost
- MYSQL_USER=ghost
- MYSQL_PASSWORD=ghost
volumes:
- /mariadb:/var/lib/mysql
เราทำการ backup database ของเก่าออกมาเป็นไฟล์ก่อน โดยใช้คำสั่ง
docker exec mariadb /usr/bin/mysqldump -u ghost --password=ghost ghost > backup.sql
ก็จะได้ไฟล์ backup.sql จากนั้นทำการสร้าง service mysql ต่อจาก docker compose เดิม
mysql:
image: mysql:latest
container_name: mysql
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=ghost
- MYSQL_DATABASE=ghost
- MYSQL_USER=ghost
- MYSQL_PASSWORD=ghost
volumes:
- /mysql:/var/lib/mysql
จากนั้นทำการ restoreไฟล์ backup.sql ไปที่ docker mysql ด้วยคำสั่ง
cat backup.sql | docker exec -i mysql /usr/bin/mysql -u ghost --password=ghost ghost
ไม่ผ่านเจอ error message
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OCI runtime exec failed: exec failed: unable to start container process: exec: "' at line 1
ติดปัญหานี้อยู่พักนึง ลองหาวิธีแก้หลายๆวิธีก็ไม่ผ่าน งั้นลองวิธีแบบบ้านๆเลยแระกัน สร้าง service phpmyadmin ต่อจาก docker compose เดิม แล้วทำการ links: mariadb (database ตัวเก่า)
phpmyadmin:
image: phpmyadmin
container_name: phpmyadmin
ports:
- 8080:80
environment:
PMA_HOST: mariadb
MYSQL_ROOT_PASSWORD: ghost
PMA_USER: ghost
PMA_PASSWORD: ghost
links:
- mariadb
จากนั้นเปิด phpmyadmin ผ่านทางเว็บ แล้วทำการ export database ghost ออกมาเป็นไฟล์ ghost.sql (format: SQL)
ทำการแก้ไข docker compose ส่วนของ service phpmyadmin ให้เปลี่ยนจากเดิม
- PMA_HOST: mariadb แก้เป็น PMA_HOST: mysql
- links: mariadb แก้เป็น links: mysql
เปิด phpmyadmin อีกครั้ง แล้วทำการ import ไฟล์ ghost.sql
แก้ไข docker compose เพื่อจะรัน ghost + mysql อีกครั้ง
version: "2.1"
services:
ghost:
image: ghost:latest
container_name: ghost
restart: unless-stopped
ports:
- 8081:2368
environment:
- database__client=mysql
- database__connection__host=mysql
- database__connection__user=ghost
- database__connection__password=ghost
- database__connection__database=ghost
- url=http://localhost:8081
volumes:
- /ghost:/var/lib/ghost/content
links:
- mysql
mysql:
image: mysql:latest
container_name: mysql
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=ghost
- MYSQL_DATABASE=ghost
- MYSQL_USER=ghost
- MYSQL_PASSWORD=ghost
volumes:
- /root/ghost-mysql:/var/lib/mysql
ตอนนี้ตัว Ghost CMS ได้เปลี่ยนมาใช้งาน mysql8 เรียบร้อยแล้ว