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

Di chuyển cơ sở dữ liệu trên sản xuất django

Tôi nghĩ rằng có hai phần cho vấn đề này.

Đầu tiên là quản lý lược đồ cơ sở dữ liệu và những thay đổi của nó. Chúng tôi thực hiện việc này bằng cách sử dụng South, giữ cả các mô hình hoạt động và các tệp di chuyển trong kho lưu trữ SCM của chúng tôi. Để đảm bảo an toàn (hoặc hoang tưởng), chúng tôi sử dụng cơ sở dữ liệu trước khi (và nếu chúng tôi thực sự sợ hãi, sau khi) chạy bất kỳ quá trình di chuyển nào. South đã được đáp ứng đầy đủ cho tất cả các yêu cầu của chúng tôi cho đến nay.

Thứ hai là triển khai thay đổi lược đồ không chỉ chạy tệp di chuyển do South tạo ra. Theo kinh nghiệm của tôi, một thay đổi đối với cơ sở dữ liệu thường yêu cầu thay đổi mã đã triển khai. Nếu bạn thậm chí có một trang trại web nhỏ, việc giữ cho mã đã triển khai đồng bộ với phiên bản hiện tại của giản đồ cơ sở dữ liệu của bạn có thể không phải là chuyện nhỏ - điều này trở nên tồi tệ hơn nếu bạn xem xét các lớp bộ nhớ đệm khác nhau và ảnh hưởng đến người dùng trang đã hoạt động. Các trang web khác nhau xử lý vấn đề này theo cách khác nhau và tôi không nghĩ rằng có một câu trả lời phù hợp cho tất cả.

Giải quyết phần thứ hai của vấn đề này không nhất thiết phải đi thẳng vào phía trước. Tôi không tin rằng có một cách tiếp cận phù hợp với tất cả và không có đủ thông tin về trang web và môi trường của bạn để đề xuất giải pháp phù hợp nhất cho tình huống của bạn. Tuy nhiên, tôi nghĩ rằng có một số cân nhắc cần lưu ý để giúp hướng dẫn triển khai trong hầu hết các tình huống.

Đặt toàn bộ trang web (máy chủ web và cơ sở dữ liệu) ngoại tuyến là một tùy chọn trong một số trường hợp. Đó chắc chắn là cách dễ dàng nhất để quản lý các bản cập nhật. Nhưng thời gian ngừng hoạt động thường xuyên (ngay cả khi đã lên kế hoạch) có thể là một cách tốt để tiến hành công việc kinh doanh của chúng ta một cách nhanh chóng, khiến việc triển khai các thay đổi mã ngay cả nhỏ cũng rất mệt mỏi và có thể mất nhiều giờ nếu bạn có một tập dữ liệu lớn và / hoặc di chuyển phức tạp. Điều đó nói rằng, đối với các trang web mà tôi giúp quản lý (tất cả đều là nội bộ và thường chỉ được sử dụng trong giờ làm việc của các ngày làm việc), phương pháp này hoạt động rất hiệu quả.

Hãy cẩn thận nếu bạn thực hiện các thay đổi trên bản sao của cơ sở dữ liệu chính của mình. Vấn đề chính ở đây là trang web của bạn vẫn hoạt động và có lẽ chấp nhận ghi vào cơ sở dữ liệu. Điều gì xảy ra với dữ liệu được ghi vào cơ sở dữ liệu chính trong khi bạn đang bận di chuyển bản sao để sử dụng sau này? Trang web của bạn phải ngừng hoạt động toàn bộ thời gian hoặc tạm thời đặt ở một số trạng thái chỉ đọc, nếu không bạn sẽ mất chúng.

Nếu các thay đổi của bạn tương thích ngược và bạn có trang trại web, đôi khi bạn có thể cập nhật máy chủ cơ sở dữ liệu sản xuất trực tiếp (mà tôi nghĩ là không thể tránh khỏi trong hầu hết các tình huống) và sau đó cập nhật từng bước các nút trong trang trại bằng cách đưa chúng ra khỏi cân bằng tải trong một thời gian ngắn. Điều này có thể hoạt động tốt - tuy nhiên vấn đề chính ở đây là nếu một nút đã được cập nhật gửi yêu cầu cho một url không được hỗ trợ bởi một nút cũ hơn, bạn sẽ gặp lỗi vì bạn không thể quản lý điều đó ở cấp độ cân bằng tải.

Tôi đã thấy / nghe nói một số cách khác hoạt động tốt.

Đầu tiên là gói tất cả các thay đổi mã trong một khóa tính năng, sau đó có thể định cấu hình tại thời điểm chạy thông qua một số tùy chọn cấu hình trên toàn trang web. Về cơ bản, điều này có nghĩa là bạn có thể phát hành mã khi tất cả các thay đổi của bạn bị tắt và sau đó sau khi bạn đã thực hiện tất cả các cập nhật cần thiết cho máy chủ của mình, bạn thay đổi tùy chọn cấu hình của mình để bật tính năng này. Nhưng điều này làm cho mã khá nặng ...

Thứ hai là cho phép mã quản lý việc di chuyển. Tôi đã nghe nói về các trang web mà các thay đổi đối với mã được viết theo cách mà nó xử lý việc di chuyển trong thời gian chạy. Nó có thể phát hiện phiên bản của lược đồ đang được sử dụng và định dạng của dữ liệu mà nó lấy lại - nếu dữ liệu là từ lược đồ cũ, nó sẽ thực hiện việc di chuyển tại chỗ, nếu dữ liệu đã có từ lược đồ mới thì nó không làm gì cả . Từ việc sử dụng trang web tự nhiên, một phần lớn dữ liệu của bạn sẽ được những người sử dụng trang web di chuyển, phần còn lại bạn có thể thực hiện với tập lệnh di chuyển bất cứ khi nào bạn muốn.

Nhưng tôi nghĩ tại thời điểm này, Google trở thành bạn của bạn, vì như tôi đã nói, giải pháp rất cụ thể theo ngữ cảnh và tôi lo rằng câu trả lời này sẽ bắt đầu trở nên vô nghĩa ... Hãy tìm kiếm một thứ gì đó như "triển khai không mất thời gian" và bạn ' Sẽ nhận được các kết quả như cái này với rất nhiều ý tưởng ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng phân trang với laravel DB ::select query

  2. Cách khôi phục / tạo lại cơ sở dữ liệu 'mysql' mặc định của mysql

  3. MySQL &NHibernate. Cách khắc phục lỗi:Cột 'ReservedWord' không thuộc bảng ReservedWords?

  4. Không thể tìm ra cách chạy mysqli_multi_query và sử dụng kết quả từ truy vấn cuối cùng

  5. MySQL CHỌN THÍCH hoặc ĐĂNG KÝ để khớp nhiều từ trong một bản ghi