Chúng tôi sử dụng một cái gì đó tương tự như bcwoord để giữ cho schemata cơ sở dữ liệu của chúng tôi được đồng bộ hóa trên 5 cài đặt khác nhau (sản xuất, dàn dựng và một vài cài đặt phát triển) và sao lưu trong kiểm soát phiên bản và nó hoạt động khá tốt. Tôi sẽ giải thích một chút:
Để đồng bộ hóa cấu trúc cơ sở dữ liệu, chúng tôi có một tập lệnh, update.php và một số tệp được đánh số 1.sql, 2.sql, 3.sql, v.v. Kịch bản sử dụng một bảng bổ sung để lưu trữ số phiên bản hiện tại của cơ sở dữ liệu. Các tệp N.sql được tạo thủ công, để chuyển từ phiên bản (N-1) sang phiên bản N của cơ sở dữ liệu.
Chúng có thể được sử dụng để thêm bảng, thêm cột, di chuyển dữ liệu từ định dạng cột cũ sang định dạng cột mới sau đó thả cột, chèn các hàng dữ liệu "chính" như kiểu người dùng, v.v. Về cơ bản, nó có thể làm bất cứ điều gì và với dữ liệu phù hợp tập lệnh di chuyển bạn sẽ không bao giờ mất dữ liệu.
Kịch bản cập nhật hoạt động như thế này:
- Kết nối với cơ sở dữ liệu.
- Tạo một bản sao lưu của cơ sở dữ liệu hiện tại (vì mọi thứ sẽ sai) [mysqldump].
- Tạo bảng kế toán (được gọi là _meta) nếu nó không tồn tại.
- Đọc PHIÊN BẢN hiện tại từ bảng _meta. Giả sử 0 nếu không tìm thấy.
- Đối với tất cả các tệp .sql được đánh số cao hơn VERSION, hãy thực hiện chúng theo thứ tự
- Nếu một trong các tệp tạo ra lỗi: quay lại bản sao lưu
- Nếu không, hãy cập nhật phiên bản trong bảng kế toán lên tệp .sql cao nhất được thực thi.
Mọi thứ đều đi vào kiểm soát nguồn và mọi cài đặt đều có một tập lệnh để cập nhật lên phiên bản mới nhất với một thực thi tập lệnh duy nhất (gọi update.php với mật khẩu cơ sở dữ liệu phù hợp, v.v.). Chúng tôi SVN cập nhật môi trường dàn dựng và sản xuất thông qua một tập lệnh tự động gọi tập lệnh cập nhật cơ sở dữ liệu, vì vậy một bản cập nhật mã đi kèm với các bản cập nhật cơ sở dữ liệu cần thiết.
Chúng tôi cũng có thể sử dụng cùng một tập lệnh để tạo lại toàn bộ cơ sở dữ liệu từ đầu; chúng ta chỉ cần thả và tạo lại cơ sở dữ liệu, sau đó chạy tập lệnh sẽ hoàn toàn phục hồi cơ sở dữ liệu. Chúng tôi cũng có thể sử dụng tập lệnh để điền vào cơ sở dữ liệu trống để kiểm tra tự động.
Chỉ mất vài giờ để thiết lập hệ thống này, nó đơn giản về mặt khái niệm và mọi người đều có sơ đồ đánh số phiên bản, và nó có giá trị trong việc có khả năng tiến lên và phát triển thiết kế cơ sở dữ liệu, mà không phải giao tiếp hoặc thực hiện các sửa đổi theo cách thủ công trên tất cả các cơ sở dữ liệu.
Hãy cẩn thận khi dán truy vấn từ phpMyAdmin! Các truy vấn được tạo thường bao gồm tên cơ sở dữ liệu mà bạn chắc chắn không muốn vì nó sẽ phá vỡ các tập lệnh của bạn! Một cái gì đó như TẠO BẢNG mydb
. newtable
(...) Sẽ thất bại nếu cơ sở dữ liệu trên hệ thống không được gọi là mydb. Chúng tôi đã tạo một hook SVN nhận xét trước sẽ không cho phép các tệp .sql chứa mydb
chuỗi, đây là dấu hiệu chắc chắn rằng ai đó sao chép / dán từ phpMyAdmin mà không kiểm tra chính xác.