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

อ้างอิง

Loading

Facebook Comments

Leave a reply