2010-01-14 40 views
8

Tôi đang làm việc trên một ứng dụng với một vài người khác và chúng tôi muốn lưu trữ cơ sở dữ liệu MySQL của chúng tôi trong kiểm soát nguồn. Suy nghĩ của tôi là hai tệp có hai tệp: một tệp sẽ là tập lệnh tạo cho các bảng, v.v. và phần còn lại sẽ là phần chèn cho dữ liệu mẫu của chúng tôi. Đây có phải là một cách tiếp cận tốt? Ngoài ra, cách tốt nhất để xuất thông tin này là gì?Cách tốt nhất để lưu trữ cơ sở dữ liệu MySQL trong điều khiển nguồn là gì?

Ngoài ra, bất cứ đề nghị cho công việc về cách để tăng tốc độ quá trình làm thay đổi, xuất khẩu, cập nhật, vv

Trả lời

3

này nghe có vẻ giống như một cách tiếp cận tốt. Bạn có thể phân biệt các bản sửa đổi khác nhau, cả về cấu trúc bảng và dữ liệu. Tốt đẹp!

Cách tốt nhất để tạo ra các bãi có lẽ **mysqldump**, vì nó có thể được tự động dễ dàng - một lần với --no-data để có được những điều khoản tạo, một lần với --no-create-info --no-create-db để lấy dữ liệu.

+1

Cách tiếp cận khác sẽ là sử dụng tùy chọn '--tab' thành' mysqldump'. Điều này tạo ra một tệp ' .sql' cho lược đồ và tệp' .txt' được phân tách bằng tab cho dữ liệu. Giản đồ được khôi phục thông qua 'mysql' như bình thường, dữ liệu được khôi phục qua' mysqlimport'. http://dev.mysql.com/doc/refman/5.1/en/mysqldump-delimited-text.html – rinogo

2

Tôi làm việc trong môi trường sử dụng nguồn Microsoft an toàn và Oracle/Sql Server.

Chúng tôi thấy rằng việc giữ mỗi gói/thủ tục, tạo tập lệnh bảng vv trong một tệp văn bản riêng biệt là cách tốt nhất để thực hiện việc này. Nó có nghĩa là khi duy trì các gói, các nhà phát triển chỉ có thể kiểm tra gói 1, vv mà họ yêu cầu. Khi các thay đổi đã được thực hiện và thử nghiệm, chúng có thể được kiểm tra.

+2

brrr, nguồn "an toàn". Tôi gần như đã bỏ phiếu -1 chỉ để đề cập đến nó trong bối cảnh kiểm soát nguồn :-) Ngoài ra, phương pháp này là hợp lệ, mặc dù không phải là khuyến nghị của tôi. Chắc chắn hãy xem các liên kết được đề cập trong câu trả lời của gWiz. – jeroenh

+0

vâng. Tôi sẽ không bảo vệ nguồn an toàn. Nó gần như thực hiện công việc. Có lẽ tôi nên hỏi một câu hỏi về việc di chuyển nó (và tất cả lịch sử) lol. Nó không phải là một dự án tôi muốn tình nguyện cho. – Nanook

3

Đây là quá trình tôi sử dụng để phiên bản cơ sở dữ liệu MySQL s dưới Subversion.

Cài đặt SVN

Trong SVN tạo một thư mục Databases với một thư mục con cho mỗi cơ sở dữ liệu bạn muốn thêm vào SVN.

Add db_version bảng cơ sở dữ liệu

Chúng tôi sẽ cần phải thêm một bảng cho mỗi cơ sở dữ liệu để chúng tôi biết những gì phiên bản của cơ sở dữ liệu chúng tôi đang làm việc với. Bảng này cũng sẽ phục vụ như một bản ghi để theo dõi những thay đổi lược đồ nào đã được thực hiện cho cơ sở dữ liệu.

create table db_version (
     `id` int auto_increment, 
     `majorReleaseNumber` int, 
     `minorReleaseNumber` int, 
     `pointReleaseNumber` int, 
     `scriptName` varchar(50), 
     `dateApplied` datetime, 
     PRIMARY KEY(`id`) 
); 

majorReleaseNumber - phiên bản chính là những thay đổi đáng kể đối với các cơ sở dữ liệu.

minorReleaseNumber - Các bản phát hành nhỏ là những cải tiến đối với cơ sở dữ liệu không cần bản phát hành chính.

pointReleaseNumber - Bản phát hành điểm thường là bản sửa lỗi đơn giản.

scriptName - Tên của tập lệnh sql đã thay đổi giản đồ.

dateApplied - Khi tập lệnh được chạy trên cơ sở dữ liệu này.

Tạo kịch bản ban đầu

tôi đã sử dụng mysqldump để tạo ra một kịch bản tạo cho cơ sở dữ liệu hiện có. Hãy chắc chắn bao gồm tùy chọn --no-data. SVN được sử dụng để theo dõi các tập lệnh tạo thay đổi lược đồ cho cơ sở dữ liệu và không được dùng để làm công cụ sao lưu cho dữ liệu của một cá thể cụ thể của ứng dụng.

$ mysqldump -h localhost -u root -p db_1 --no-data > db_1.1.0.0.sql 

Tên của tập lệnh sql phải chứa tên của cơ sở dữ liệu và phiên bản của cơ sở dữ liệu mà tập lệnh áp dụng.

db_1.1.0.0.sql

Ở cuối tập lệnh, hãy đảm bảo thêm câu lệnh chèn cho bảng db_version.

Thay đổi giản đồ cơ sở dữ liệu

Khi bạn có một, nhỏ, hoặc thay đổi điểm phát hành chính đối với các cơ sở dữ liệu, kịch bản thay đổi phải được kiểm tra và sau đó tải lên thư mục cơ sở dữ liệu trong SVN. Đó là một ý tưởng tốt để sao lưu cơ sở dữ liệu trước khi áp dụng một kịch bản thay đổi. Ở cuối kịch bản thay đổi phải là một câu lệnh chèn cho bảng db_version.

+0

Về mặt giảm ma sát, tôi sẽ xem xét việc phát triển một kịch bản lệnh shell có thể tự động hóa quá trình xác định và chạy các kịch bản cần thiết để cập nhật một cá thể cơ sở dữ liệu cụ thể. –

+0

@gWiz Cảm ơn bạn đã đề xuất. Tôi có kế hoạch tạo một số loại tiện ích db_sync. – Mark

Các vấn đề liên quan