Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

docker cam kết mysql không lưu

Một số điều đang xảy ra ở đây:

Đầu tiên, docker commit là một mùi mã. Nó có xu hướng được sử dụng bởi những người tạo hình ảnh bằng quy trình thủ công, thay vì tự động hóa các bản dựng của họ bằng Dockerfile sẽ cho phép tạo lại dễ dàng. Nếu có thể, tôi khuyên bạn nên chuyển sang Dockerfile để tạo hình ảnh.

Tiếp theo, một docker commit sẽ không ghi lại những thay đổi được thực hiện đối với một tập. Và vấn đề tương tự cũng xảy ra nếu bạn cố gắng cập nhật ổ đĩa bằng RUN bước trong Dockerfile. Cả hai cách này nắm bắt các thay đổi đối với hệ thống tệp vùng chứa và lưu trữ những thay đổi đó dưới dạng một lớp trong hình ảnh docker và các ổ đĩa không phải là một phần của hệ thống tệp vùng chứa. Điều này cũng hiển thị nếu bạn chạy docker diff chống lại một thùng chứa. Trong trường hợp này, hình ảnh ngược dòng đã xác định khối lượng trong Dockerfile của chúng:

VOLUME /var/lib/mysql

Và docker không có lệnh để hoàn tác một ổ đĩa đã tạo từ Dockerfile. Bạn sẽ cần phải trực tiếp sửa đổi định nghĩa hình ảnh từ bên ngoài docker (không được khuyến nghị) hoặc xây dựng hình ảnh ngược dòng của riêng bạn với bước đó đã bị loại bỏ (được khuyến nghị).

Những gì hình ảnh mysql cung cấp là khả năng đưa các tập lệnh tạo cơ sở dữ liệu của riêng bạn vào /docker-entrypoint-initdb.d , mà bạn có thể thêm bằng hình ảnh của riêng mình để mở rộng mysql hoặc gắn kết dưới dạng một ổ đĩa. Đây là nơi bạn sẽ đưa vào lược đồ của mình hoặc khởi tạo từ một bản sao lưu đã biết để phát triển.

Cuối cùng, nếu mục tiêu là duy trì lâu dài, bạn nên lưu trữ dữ liệu của mình trong một ổ đĩa, không phải bằng cách lưu trữ các vùng chứa:

docker run -v mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

Ổ đĩa cho phép bạn tạo lại vùng chứa, nâng cấp lên phiên bản mysql mới hơn khi các bản vá được phát hành (ví dụ:các bản sửa lỗi bảo mật) mà không làm mất dữ liệu của bạn.

Để sao lưu ổ đĩa, tệp này sẽ xuất sang tgz:

docker run --rm -v mysql-data:/source busybox tar -cC /source . >backup.tgz

Và để khôi phục một ổ, điều này tạo một ổ từ tgz:

docker run --rm -i -v mysql-data:/target busybox tar -xC /target <backup.tgz



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP - MySQL - Xóa hàng

  2. Nỗ lực Đọc không hợp lệ khi trình đọc bị đóng

  3. Tên bảng phân biệt chữ hoa chữ thường MySQL trên MacOS với hệ thống tệp phân biệt chữ hoa chữ thường

  4. Cách viết nhiều cột trong mệnh đề với sqlalchemy

  5. Làm thế nào để cung cấp giá trị được tạo bằng Trigger vào Hibernate ValueObject?