Giải pháp cho việc kiểm soát và triển khai phiên bản cơ sở dữ liệu?


11

Hiện tại tôi sử dụng một tập lệnh kết xuất và cam kết cơ sở dữ liệu với repo git. --skip-extended-insert --skip-comments --skip-dump-datecó nghĩa là một khác biệt có thể cho tôi một ý tưởng công bằng về những gì đã thay đổi, nhưng tất cả sẽ sụp đổ nếu tôi cố gắng hợp nhất.

WP_SITEURL, WP_HOME và tất cả các địa điểm khác lưu trữ các URL đầy đủ cần cập nhật khi nhập vào máy chủ khác (thử nghiệm, dàn dựng, sản xuất)

Có ai sử dụng một phương pháp tốt hơn?

Các vấn đề chính:

  • Wordpress lưu trữ tất cả các URL đầy đủ thông qua cơ sở dữ liệu (không di động)
  • Rất nhiều thay đổi khác, hồ sơ không liên quan
    • các giá trị auto_increment (tôi chỉ loại bỏ các giá trị này, nhưng đã gặp phải các vấn đề về ID)
    • dấu thời gian (cũng có thể thoát ra, có khả năng)
    • hồ sơ * thoáng qua ... không biết phải làm gì với chúng

Một quá trình tạo ra các di chuyển được đánh dấu thời gian, chỉ với những thứ được thêm hoặc xóa, sẽ là lý tưởng ... nhưng tôi không chắc liệu nó có khả thi hay không?


Bạn có muốn phiên bản tất cả các thay đổi dữ liệu hoặc chỉ thay đổi trong cấu trúc ? và đó là NHIỆM VỤ KINH DOANH thực sự của bạn?
Lazy Badger

Khi thực hiện các thay đổi đối với wordpress của CMS, thường có các thay đổi về nội dung và cấu hình (dữ liệu DB) cùng với các thay đổi logic (mã). Tôi muốn có thể phiên bản cả hai. Thay đổi cấu trúc sẽ là một khởi đầu tốt ... NHIỆM VỤ KINH DOANH: khách hàng yêu cầu tiện ích mới. Cài đặt plugin trên máy chủ dàn dựng, cam kết repo -> Cấu hình plugin và thêm nội dung mẫu -> sau khi được phê duyệt, kéo thay đổi mã vào sản xuất, sau đó thực hiện thay đổi dữ liệu tương tự trong quản trị viên sản xuất.
Jacob Dorman

1
@JacobDorman Tôi đang cố gắng giải quyết vấn đề chính xác này. Bạn đã làm việc gì chưa? Sau một số nghiên cứu, tôi bắt đầu nghĩ rằng một số plugin tùy chỉnh tạo ra một kịch bản cập nhật cụ thể theo thứ tự (có thể chỉ xuất các thay đổi cấu hình như plugin đã cài đặt và tùy chọn cấu hình - và không nhất thiết phải là các bài đăng, danh mục và nội dung nói chung) . Rất thích nghe nếu bạn có bất kỳ ý tưởng khác.
Víctor López García

Câu trả lời:


4

Đây là hai giải pháp khả thi, cả hai đều là những công cụ kiểm soát phiên bản MySQL chung nhưng có thể được điều chỉnh theo quy trình công việc của bạn:

dbv.php

Công cụ này tạo ra "di chuyển", về cơ bản là các tập lệnh SQL, từ các thay đổi được phát hiện trên cơ sở dữ liệu. Các tập lệnh này được lưu trữ trong một thư mục cục bộ và do đó có thể được cam kết với VCS hiện tại của bạn (ví dụ như git).

Nó được sử dụng thông qua giao diện web PHP.

DBVC

Về cơ bản tương tự như công cụ trước, điều này dựa trên giao diện dòng lệnh. Nó được cấu hình thông qua một tập tin json. Sự khác biệt chính là nó không tự động tạo các tệp di chuyển.

Có một vấn đề đang chờ xử lý để tích hợp vấn đề này với tương tự trước đó, vì vậy đó là điều cần tìm.

Plugin Wordpress

Một số plugin có thể hỗ trợ tạo quy trình công việc lặp lại:


dbvc trông giống như loại công cụ mà tôi đang tìm kiếm. cảm ơn!
Jacob Dorman

1
Tôi rất vui vì nó đã giúp. Tôi vừa tìm thấy một công cụ thú vị khác, nó đã không được cập nhật trong một thời gian, nhưng nó có thể đáng để lấy một chiến lợi phẩm tại: github.com/idler/MMP
Víctor López García

@JacobDorman Với DBVC, bạn có thể hợp nhất thành công các thay đổi DB từ các môi trường khác nhau không? Tôi đã xây dựng một chiến lược của riêng mình , nhưng DBVC có tạo ra các tệp cập nhật hay bạn phải sử dụng một cái gì đó như mysqldiff giữa các bãi chứa SQL? Tôi không thể hình dung công cụ này hữu ích trừ khi nó giúp tạo ra các khác biệt SQL thực sự có thể so sánh được, đặc biệt là các tham số câu lệnh INSERT trên các dòng riêng biệt ... mặc dù tôi cho rằng một tệp có thể được chỉnh sửa để xử lý điều đó ...
Spencer Williams

@SpencerWilliams Tôi đã không sử dụng DBVC (và chưa sử dụng mysqldiff) nhưng vẫn thêm các bãi chứa db vào kiểm soát phiên bản ... Tôi thực sự không thấy chúng có thể hợp nhất trong hầu hết các trường hợp, nhưng sử dụng khác biệt có thể giúp làm nổi bật thay đổi và các vấn đề.
Jacob Dorman

@victor Mình đã kiểm tra MMP. Nó thay đổi lược đồ, nhưng không khác biệt / chèn dữ liệu.
David Silva Smith

2

Tôi đang làm điều này trên MYSQL.

Nó đặt tất cả các lược đồ và dữ liệu bảng vào tệp riêng của chúng để tôi có thể dễ dàng thấy những gì đã thay đổi.

Không giống như hầu hết các giải pháp khác trong luồng này, giải pháp này lấy dữ liệu, điều này rất quan trọng đối với một CMS.

Giải pháp này không sử dụng bất kỳ công cụ nào, chỉ là tập lệnh dòng lệnh.

chỉnh sửa: Tôi thấy mã cũ của tôi có một lỗi trong đó thứ tự nhập là quan trọng. cởi --compactcờ sửa lỗi.

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

Mã cũ

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

và đây là cách nhập

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
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.