MySQL là 1 trong những hệ quản trị CSDL phổ biến nhất trên thế giới. Nó là 1 phần không thể thiếu khi xây dựng các ứng dụng web với nhiều ngôn ngữ như PHP, Python, Ruby… Trong bài viết thuộc serial DevOps, mình sẽ hướng dẫn các bạn docker hóa CSDL MySQL.
Để tiến hành Docker hóa MySQL cho môi trường phát triển ứng dụng, các bạn cần các tiền đề sau:
- Đã cài đặt Docker và Docker Compose
- Tham khảo trang Docker chính thức của MySQL tại đây
Tạo và khởi động MySQL container
Đây là lệnh tạo và chạy 1 docker container đơn giản nhất.
docker run --name <mysql_name> -e MYSQL_ROOT_PASSWORD=<root_password> -d mysql:<tag>
Với
- <mysql_name> là tên của mysql container
- <root_password> là mật khẩu của user root
- <tag> là version của mysql. mysql:latest là sẽ sử dụng version mới nhất của MySQL
VD:
docker run --name vinasupport_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:lastest
Truy cập vào MySQL Container
docker exec -it <mysql_name> bash
Chỉ định thư mục MySQL Config
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-v để map thư mục /etc/mysql/conf.d ra ngoài.
Chỉ định thư mục Data của MySQL Container
Để khi mỗi lần tạo và xóa container không làm mất dữ liệu, chúng ta cần mount thư mục data ra ngoài như sau:
docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
Backup và khôi phục Dữ liệu từ MySQL
Để backup dữ liệu
docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
Để khôi phục dữ liệu
docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
Còn Khởi động, tạm dừng, xóa MySQL container vui lòng tham khảo bài viết sau:
Sử dụng Docker Compose để tạo MySQL Container
Tạo file docker-compose.yml có chứa nội dung sau:
version: '3.1' services: db: image: mysql container_name: mysql-server command: --default-authentication-plugin=mysql_native_password restart: always environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_USER=vinasupport - MYSQL_PASSWORD=123456 - MYSQL_DATABASE=vinasupport ports: - "3307:3306" volumes: - ./mysql-data:/var/lib/mysql
Chú ý:
- Port 3306 trong container sẽ được map ra ngoài host là 3307
- Nó sẽ tạo 1 volume cho thư mục data /var/lib/mysql ra thư mục ./mysql-data ở host
Để tạo và khởi động container chúng ta sử dụng command sau:
docker-compose up
Nếu bấm ctrl + c thì nó sẽ stop container vì vậy để chạy background sử dụng command bên dưới.
docker-compose up -d