Docker MariaDB Container ระบุที่เก็บ Data
โดยปกติ MariaDB จะเก็บข้อมูลไว้ที่ /var/lib/mysql ถ้าเราสร้าง MariaDB container โดยไม่ระบุที่เก็บข้อมูล ข้อมูลก็จะถูกเก็บไว้ในโครงสร้างไดเรกทอดีของ Docker อยูใน /var/lib/docker/volumes แต่ถ้าเราต้องการเก็บข้อมูลเอาไว้นอกโครงสร้างไดเรกทอรีของ Docker ก็ทำได้เช่นกัน โดยที่ในขั้นตอนการสร้าง container ก็ให้ระบุ option -v
ตัวอย่างคำสั่ง
docker run --name some-mariadb -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:tag
ผมได้สร้างไดเรกทอรี mysql ไว้ใน /data ซึ่งจะใช้เป็นที่เก็บข้อมูล
[root@docker-test ~]# cd /data/ [root@docker-test data]# ls conf.d mysql [root@docker-test data]# cd mysql/ [root@docker-test mysql]# ls [root@docker-test mysql]# pwd /data/mysql
สร้าง Container
[root@docker-test mysql]# docker run --name mariadb10.1_data -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mariadb:10.1 cfa3f3be0e2db85ff4c277ad3385ee76c747cd9baf668951cff5bab591e15f79 [root@docker-test mysql]# docker exec -it mariadb10.1_data bash root@cfa3f3be0e2d:/# mysql -u root -p123456 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 10.1.19-MariaDB-1~jessie mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
แล้วมันย้ายที่เก็บข้อมูลจริงหรือเปล่า
[root@docker-test mysql]# pwd /data/mysql [root@docker-test mysql]# ls -l total 110640 -rw-rw---- 1 systemd-bus-proxy input 16384 Dec 3 08:17 aria_log.00000001 -rw-rw---- 1 systemd-bus-proxy input 52 Dec 3 08:17 aria_log_control -rw-rw---- 1 systemd-bus-proxy input 12582912 Dec 3 08:17 ibdata1 -rw-rw---- 1 systemd-bus-proxy input 50331648 Dec 3 08:17 ib_logfile0 -rw-rw---- 1 systemd-bus-proxy input 50331648 Dec 3 08:17 ib_logfile1 -rw-rw---- 1 systemd-bus-proxy input 0 Dec 3 08:17 multi-master.info drwx------ 2 systemd-bus-proxy input 4096 Dec 3 08:17 mysql drwx------ 2 systemd-bus-proxy input 19 Dec 3 08:17 performance_schema -rw-rw---- 1 systemd-bus-proxy input 24576 Dec 3 08:17 tc.log
กรณีที่ต้องการใช้ my.cnf และระบุที่เก็บข้อมูล ก็ใช้ option -v 2 ครั้ง
[root@docker-test mysql]# docker run --name mariadb10.1_data2 -v /data/mysql2:/var/lib/mysql -v /data/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mariadb:10.1 7bd2d705324fcebc34e252d81d6314e9ad1bf0aa801e5dd437bac4d8a0504258
-v /data/conf.d:/etc/mysql/conf.d ให้อ่าน my.cnf
-v /data/mysql2:/var/lib/mysql ระบุที่เก็บข้อมูลที่ /data/mysql2
อ้างอิง
- https://hub.docker.com/_/mariadb/
- https://mariadb.com/kb/en/mariadb/installing-and-using-mariadb-via-docker/