2009-02-03 25 views
12

tôi sử dụng lệnh sau đây để sản xuất các schema cho một db MySQL:Làm cách nào để chặn số hàng cho các bảng được thêm (AUTO_INCREMENT = N) vào đầu ra mysqldump?

mysqldump --no-data --skip-add-drop-table 

Tôi sẽ làm việc này cho hai cơ sở dữ liệu tôi muốn so sánh, và sau đó diff hai tập tin đầu ra. Đây là cách cơ bản để theo dõi sự thay đổi cơ sở dữ liệu giữa các môi trường.

Tuy nhiên, một bất tiện nhỏ với tôi là số lượng hàng cho mỗi bảng được bao gồm như là một phần của định nghĩa bảng, như giá trị AUTO_INCREMENT, như vậy:

ENGINE=MyISAM AUTO_INCREMENT=844 DEFAULT CHARSET=latin1; 

tôi sẽ nghĩ rằng '- -no-data 'flag sẽ chặn mọi thông tin về bảng tham chiếu đến dữ liệu, bao gồm số hàng.

Làm cách nào để tắt AUTO_INCREMENT = N trong đầu ra này?

Trả lời

22

Kiểm tra điều này ticket về sự cố này. Nó đã được đóng như "Sẽ không Fix"

Bạn có thể làm điều này, cách khác:

mysqldump --no-data --skip-add-drop-table my_database | sed 's/AUTO_INCREMENT=[0-9]*\b//' > database.dump 
+0

Cảm ơn, tôi muốn có một số cách để đánh dấu "câu trả lời tuyệt vời" này bởi vì nó thực sự là, xem xét các tham chiếu đến báo cáo lỗi thực tế vv Bravo và cảm ơn bạn! – Marcus

+0

Đáng buồn là lệnh này chỉ dành cho Linux (và có thể là OSX). –

+0

Rất tốt, cảm ơn! –

1
mysqldump --no-data --skip-add-drop-table | grep -v AUTO_INCREMENT 

?

+0

Vâng, AUTO_INCREMENT là trên cùng một dòng như ENGINE và CHARSET, bất kỳ sự khác biệt trong đó tôi * sẽ * muốn xem ... vì vậy, tôi không muốn bỏ qua toàn bộ dòng. Cảm ơn bạn mặc dù! – Marcus

1

Sau khi nghiên cứu nhiều và tinh chỉnh tôi thấy rằng trên Windows (với Powershell có sẵn), bạn có thể làm ...

mysqldump -h SERVER -u USERNAME --password=PASSWORD -d DATABASE -C | powershell -Command "$input | ForEach-Object { $_ -replace \" AUTO_INCREMENT=\S+\", \"\" }"

Chỉ cần thêm > output.txt đến cùng để lưu nó vào một file thay vì in nó vào màn hình.

0

(Sửa câu trả lời chấp nhận của khóa học là cách chính xác. Không ai trong tâm trí đúng của họ làm cho một cột với giá trị mặc định "AUTO_INCREMENT = 123")

Chật vật với cùng một câu hỏi, và đọc tham chiếu cảnh báo vé về sed'ing một giải pháp, tôi đã đưa ra hình thức đầu ra --xml một xoáy, và tôi đã đưa ra một giải pháp làm việc mà không có cạm bẫy (ví dụ: ai đó tạo cột với giá trị mặc định "AUTO_INCREMENT = 123" —far fetched, tôi biết , nhưng vẫn ...):

mysqldump \ 
    --xml \ 
    --compact \ 
    --no-data \ 
    mydb | 
xmlstarlet ed -d ' 
    //key/@Cardinality | 
    //options/@Rows | 
    //options/@Avg_row_length | 
    //options/@Data_length | 
    //options/@Auto_increment | 
    //options/@Index_length 
' | 
xmllint --format - 

Về cơ bản nó loại bỏ một số giá trị bằng cách sử dụng xmlstarlet mà tôi thấy đa dạng (thậm chí từ các bãi chứa liên tiếp của cùng một cơ sở dữ liệu). Một biểu định kiểu XSLT có thể thực hiện cùng một công việc.

<?xml version="1.0"?> 
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <database name="mydb"> 
    <table_structure name="SomeTable"> 
     <field Field="foo" Type="int(12)" Null="NO" Key="PRI" Extra="" Comment=""/> 
     <field Field="bar" Type="int(11)" Null="NO" Key="PRI" Extra="" Comment=""/> 
     <field Field="baz" Type="int(11)" Null="NO" Key="PRI" Extra="" Comment=""/> 
     <key Table="AccessControlList" Non_unique="0" Key_name="PRIMARY" 
      Seq_in_index="1" Column_name="referenceID" Collation="A" Null="" 
      Index_type="BTREE" Comment="" Index_comment=""/> 
    <options Name="SomeTable" Engine="InnoDB" Version="10" Row_format="Compact" 
      Max_data_length="0" Data_free="0" Create_time="2012-09-11 15:31:11" 
      Collation="utf8_general_ci" Create_options="" Comment=""/> 
[...] 

(dòng mới giữa các thuộc tính XML đã được thêm vào để có thể đọc, họ đang không ở trong đầu ra xmllint)

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