2011-07-13 41 views
11

Tôi muốn tạo các tệp SQL khác biệt để so sánh DATA và cấu trúc của cơ sở dữ liệu MySQL. Những tệp này sẽ được thực thi dưới dạng truy vấn SQL, trên dòng lệnh.So sánh hai cơ sở dữ liệu MySQL, trên dòng lệnh, với công cụ miễn phí

Có nhiều chủ đề cũ liên quan đến SO và trên nhiều diễn đàn khác nhau, nhưng chúng xử lý các công cụ với giao diện người dùng, mà người dùng phải trả ... Ngoài ra, tôi không muốn đồng bộ hóa cơ sở dữ liệu trực tiếp, mà chỉ thực thi kịch bản SQL khác biệt kết quả.

+0

Cảm ơn Galz và ADW đã trợ giúp bạn. Ngay cả khi tôi không sử dụng giải pháp bạn đã đề xuất, tôi vẫn coi nó là giải pháp hữu ích. Tôi đang đào vào atm lỏng. Xem: http://stackoverflow.com/questions/225772/compare-two-mysql-databases là một vấn đề liên quan (nhưng rộng hơn. Vấn đề của tôi đặc biệt là về MySQL, dòng lệnh và công cụ miễn phí). Kiểm tra http://forum.liquibase.org/#Topic/49382000000251069 để xem ví dụ và xem đó có phải là giải pháp khả thi hay không. – Cedric

Trả lời

12

Sau đây sẽ cho bạn thấy sự khác biệt (phần đầu tiên của câu hỏi) nhưng đầu ra sẽ không thực sự có thể sử dụng được dưới dạng tệp vá.

Để so sánh hai bảng:

mysql -u whatever -e "describe table" database1 > file1.txt 
mysql -u whatever -e "describe table" database2 > file2.txt 
diff file1.txt file2.txt 

Để so sánh dữ liệu:

mysql -u whatever -e "select * from table" database1 > file1.txt 
mysql -u whatever -e "select * from table" database2 > file2.txt 
diff file1.txt file2.txt 

Để so sánh cơ sở dữ liệu:

mysqldump --extended-insert=FALSE -u whatever database1 > file1.txt 
mysqldump --extended-insert=FALSE -u whatever database2 > file2.txt 
diff file1.txt file2.txt 
1

cụ cho giản đồ so sánh là phổ biến hơn. Có một số gói perl cho điều này có thể dễ dàng được chạy từ dòng lệnh. Tôi cũng tìm thấy một cho dữ liệu khác biệt (đó là một vấn đề khá phức tạp!), Nhưng nó là loại cũ và tôi không chắc nó tốt như thế nào.

Schema so sánh: http://adamspiers.org/computing/mysqldiff/

dữ liệu so sánh: http://rossbeyer.net/software/mysql_coldiff/

Chúc may mắn.

4

Kiểm tra Bộ công cụ Percona nguồn mở --- cụ thể, tiện ích pt-table-sync. Nó sử dụng tổng kiểm tra trên các chỉ mục và các chiến lược khác cho các bảng khác nhau nhanh. Mục đích chính của nó là đồng bộ hóa bản sao, nhưng với một chút công việc phụ, đó là một công cụ khác biệt lớn. Xem my full answer about it here.

EDIT: Tôi quên đề cập rằng so sánh cấu trúc là một con thú khác. Tôi làm điều này với một thủ tục được lưu trữ mà bạn có thể gọi từ dòng lệnh, nhưng nó có thể không phải là những gì bạn đang tìm kiếm.

Dưới đây là một đoạn trích từ một wrapper vỏ kịch bản mà tôi đã viết cho thấy diffs schema:

mysql ${MYSQL_CNF_OPTION} -u ${DB_USER} \ 
-e "USE sys; CALL compareDBs('${DBDIFF_LOCAL_DB1}','${DBDIFF_LOCAL_DB2}');" 

Nó kêu gọi các thủ tục compareDBs lưu trữ, mà tôi nhận được từ the Artful Software query archive page.

+0

cảm ơn bạn đã nhập Royce – Cedric

+0

Cảm ơn bạn đã chia sẻ Royce! Không biết [trang lưu trữ truy vấn phần mềm nghệ thuật] (http://www.artfulsoftware.com/infotree/queries.php)! – antoniom

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