Đồng bộ hóa cơ sở dữ liệu giữa dev / staging và sản xuất


36

Tôi gặp vấn đề với việc đồng bộ hóa cơ sở dữ liệu WordPress giữa phát triển và sản xuất và tôi tự hỏi làm thế nào người khác giải quyết nó. Tôi biết về câu hỏi này nhưng nó không thực sự bao gồm trường hợp sử dụng nhanh hơn và thực tế hơn.

Nói rằng tôi có một trang web WordPress trực tiếp. Tôi lấy một đống mọi thứ, sao chép nó trên môi trường dev của chúng tôi. Tôi bắt đầu thay đổi. 1 tuần sau tôi sẵn sàng triển khai các cập nhật của mình. Trong khi đó, cơ sở dữ liệu trên trang sản xuất đã thay đổi (bài viết mới, bình luận mới, v.v.). Làm cách nào để tôi đồng bộ hóa các thay đổi giữa sản xuất và phát triển trong quá trình triển khai và có thể tự động hóa (ít nhất là) quá trình này không?



Câu trả lời:


10

Có thể có một cách tốt hơn mà tôi đang thiếu nhưng tôi sẽ cung cấp cho bạn 2 tùy chọn:

1.Sử dụng Xuất XML để xuất các bài đăng và nhận xét mới của bạn. Sau đó, sử dụng Trình nhập WordPress để nhập các bài đăng và nhận xét mới vào cơ sở dữ liệu dev

Tốt nhất là nhập vào dev sau đó chuyển cơ sở dữ liệu sang sản xuất vì khi bạn nhập, nó sẽ tải xuống tất cả các tệp phương tiện mới từ sản xuất.

Trong khi đó, sản xuất đã thay đổi (bài viết mới, bình luận mới, v.v.)

Điều này sẽ giải quyết vấn đề của bạn về việc đưa vào bất kỳ nội dung thay đổi.

2. Sử dụng lệnh INSERT IGNORE INTO MySql để thêm các bảng mới từ dev. hoặc lệnh REPLACE để ghi đè các hàng trùng lặp trong cùng một bảng.

Trước khi sử dụng MySql, hãy tạo một bản sao lưu của cả hai cơ sở dữ liệu và di chuyển cơ sở dữ liệu gz đến máy chủ sản xuất và tải lên kết xuất (thay đổi tên của dev nếu nó giống như sản xuất.

INSERT IGNORE INTO `_wp_production_db`.`wp_cool_plugin_options`
SELECT *
FROM `_wp_dev_db`.`wp_cool_plugin_options`

Tôi không thoải mái với các lệnh MySql vì vậy tôi sẽ sử dụng tùy chọn 1.


lưu ý các quầy xuất khẩu XML ở đâu đó với số lượng bài đăng, ví dụ như trên blog của tôi, 10.000 bài đăng tôi không thể sử dụng.
edelwater

@edelwater, vâng, điều này phụ thuộc vào cài đặt máy chủ cho max_execut_time (thường là 30 giây), để xuất khẩu rất lớn, giá trị này phải được đặt cao hơn (1-2 phút trở lên)
mike23

2

Nếu đó chỉ là cùng một loại dữ liệu chính xác (một số bài đăng blog mới, bình luận mới) thì tôi không chắc tại sao bạn cần phải đồng bộ hóa nó thực sự. Nó không giống như nó sẽ thay đổi cách mã trên trang web hoạt động vì nó giống nhau hơn. Tôi thường không lo lắng về điều đó trừ khi đó là một loại dữ liệu mới.

Tôi chỉ luôn đảm bảo rằng tôi có một mẫu dữ liệu tốt cho trang web không có mỗi bài đăng, trang, nhận xét từ trang web trực tiếp.


2
Điểm tốt! Tuy nhiên, nếu sản xuất có một số thay đổi trong khu vực nội dung thuần túy (bài đăng, nhận xét) và nhà phát triển có thay đổi trong cài đặt và cài đặt nói (ví dụ: thêm 5 plugin và điều chỉnh cài đặt của chúng), bạn sẽ thực hiện các thay đổi cài đặt đó như thế nào mà không thực hiện hai lần (một thời gian trên dev và một về sản xuất)?
Alex

đó là câu hỏi thực sự phải không và tôi không có câu trả lời cho nó.
curtismchale

-1. Đôi khi chúng ta cần phải có chúng đồng bộ. Đặc biệt cho bài viết / trang idtừ cơ sở dữ liệu.
Francisco Corrales Morales

2

Ngay khi bạn chạm vào chủ đề thực hiện các thay đổi song song, bạn chạm vào khu vực quản lý cấu hình. Với rất nhiều mẫu, cộng đồng riêng (http://www.cmcrossroads.com/) và các công cụ không quá nhiều để quản lý phiên bản (như svn / git) nhưng để hỗ trợ quản lý cấu hình (mẫu) như Clearcase. (khu vực hoàn toàn khác nhau).

Trong trường hợp này vẫn là một tình huống đơn giản và bạn sẽ thấy nó hoạt động với một số hạn chế và một số công việc thủ công và một số danh sách.

Kịch bản mà tôi đang nghĩ đến để làm cho nó trở nên mô tả hơn về giải pháp lý tưởng: nhiều nhà phát triển làm việc trên cùng một cơ sở mã, nhiều môi trường thử nghiệm, nhiều môi trường chấp nhận, nhiều môi trường chấp nhận sản xuất có thể ở mọi nơi trên thế giới.

Nếu bạn muốn làm điều này chuyên nghiệp hơn một chút:

a) viết ra một danh sách tất cả các Mục cấu hình mà bạn gặp phải, đây có thể là mã WordPress, các plugin từ bên ngoài, nội dung, siêu dữ liệu và quyết định những mục nào bạn muốn mang theo một loại "quản lý" nào.

b) mô tả các quy trình công việc có thể xảy ra, ví dụ như điều gì xảy ra với bản sửa lỗi, điều gì xảy ra với sự phát triển mới, trong trường hợp nào bạn thay đổi nội dung về phía bạn, cái gì được gọi và ai là chủ sở hữu của nó ví dụ một bài viết mới hoặc một plugin mới.

c) để làm việc song song trước tiên mô tả bạn muốn quản lý CI nào, quyết định xem dòng chảy luôn luôn từ phát triển đến sản xuất hay nếu thực sự cần thiết phải thực hiện tất cả hai cách.

d) cho mỗi loại CI theo (a) viết độ phân giải. Ví dụ: TẤT CẢ đó là văn bản (hoặc văn bản được xuất như tệp php nhưng cũng có thể hợp nhất văn bản thuần túy trong tệp XML). Điều này thực sự không có vấn đề nhưng bạn cần một công cụ hợp nhất tốt. ví dụ: với ClearCase, bạn sẽ có được 3 cách hợp nhất các tình huống sau: 1) hợp nhất tầm thường: nó sẽ tự động thực hiện 2) tự động không tầm thường: nó sẽ tự động thực hiện NHƯNG bạn cần kiểm tra nó 3) không tầm thường không tự động: điều này là một xung đột, ví dụ trên 1 dòng, một số thay đổi đã được thực hiện. Các phần tử không phải là phần tối thiểu mà bạn cần quan tâm một cách thủ công, một công cụ hợp nhất tốt sẽ dẫn bạn đến điều này, ví dụ như một phần trong văn bản (cũng hợp nhất từ ​​và nơi bạn có thể liên kết trong các sáp nhập thương mại hoặc phi thương mại khác cho tệp cụ thể các loại). Furtermore nếu bạn đã xác định dưới (a) các tệp chỉ được sao chép thì hành vi của chúng sẽ không được hợp nhất mà chỉ được sao chép một cách ghi đè lên phiên bản khác mà không cần hợp nhất (ví dụ: các plugin mà bạn chưa sửa đổi). Nhiều loại trong số này là có thể với các hành vi khác nhau. Nhưng viết ra các mối quan hệ giữa CI,

Sau đó, đối với các kết hợp không dựa trên văn bản, bạn cần đưa ra quyết định về cách xử lý chúng, ví dụ như hình ảnh đã được thay đổi ở 2 vị trí. Bạn có thể quyết định ở đây rằng sản xuất luôn có ưu tiên (ít nhất đó là những gì tôi nghĩ), điều này làm cho nó đơn giản.

Vì vậy, ... để giải quyết vấn đề này, bạn cần một công cụ quản lý phiên bản hỗ trợ các luồng khác nhau. Mỗi luồng sẽ đại diện cho một phần. (điều này có thể vô cùng phức tạp tùy thuộc vào nhu cầu của bạn nhưng trong trường hợp này tôi nghĩ nó rất đơn giản).

Nếu bây giờ bạn có thể quản lý để có các luồng này trong cài đặt WordPress của mình và đồng bộ hóa chúng với nội dung của cơ sở dữ liệu, v.v ... thì bạn có thể thực hiện việc hợp nhất trong công cụ CM / phiên bản và sau đó xuất lại trong môi trường khác.

Điều đó là ... bạn cần viết nó xuống trước. Đây không phải là một hack kỹ thuật. Đây là một mẫu mặc định xung quanh Quản lý cấu hình nên không có gì lạ ở đây nhưng bạn cần phải viết nó xuống. Bạn có thể thấy ví dụ rằng một plugin đã cài đặt thực hiện thay đổi trong cơ sở dữ liệu với một số dữ liệu khác với môi trường khác, vì vậy bạn cần có một quy trình bổ sung xung quanh vấn đề này.

Về mặt kỹ thuật hầu như mọi thứ đều có thể kiểm tra http://www.cmcrossroads.com/forums cho kịch bản phức tạp hơn hàng chục hoặc hàng trăm lần mặc dù luôn sử dụng cùng một cách tiếp cận và sử dụng cùng một bộ mẫu CM.

Tóm lại: đặt một lớp quản lý phiên bản bên dưới nó, tự động hóa các phép hợp nhất và xử lý các xung đột, sau đó nhập vào môi trường đích. Nghĩ ra một chiến lược stream phù hợp ở đây và viết nó ra. Thực hiện quản lý CM bity teeny. Đó sẽ là giải pháp chuyên nghiệp nếu không cài đặt một số bản sao db hack, script vv ...


2

Tôi vừa tạo một bài đăng về cách tôi đồng bộ hóa dữ liệu sản xuất với phần dàn dựng của chúng tôi, hãy xem bài đăng trên blog của tôi về nó tại: http : // blog . -từ sản xuất để dàn dựng-enviorment /

Nếu bạn muốn đồng bộ hóa mã và các thứ khác nữa, tôi khuyên bạn nên tạo một kho lưu trữ git hoặc mercurial với tệp bỏ qua có liên quan.

Nếu bạn muốn thực hiện cập nhật khác biệt cho sản phẩm từ dàn dựng, thì tôi đoán tạo tập lệnh di chuyển là cách an toàn và tốt nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.