Lược đồ xuất khẩu MySql không có dữ liệu


491

Tôi đang sử dụng cơ sở dữ liệu MySql với chương trình Java, bây giờ tôi muốn cung cấp chương trình cho người khác.

Làm thế nào để xuất cấu trúc cơ sở dữ liệu MySql mà không có dữ liệu trong đó, chỉ là cấu trúc?

Câu trả lời:


962

Bạn có thể làm với --no-datatùy chọn với lệnh mysqldump

mysqldump -u root -p --no-data dbname > schema.sql

11
IMHO, mysqldumplà câu trả lời tốt nhất. Quản trị viên MySQL bị bỏ rơi và MySQL Workbench vẫn còn khá nhiều lỗi.
Álvaro González

49
Cũng xem xét sử dụng --single-transactiontùy chọn nếu bạn không muốn hoặc không thể thực hiện khóa bảng.
Jim

47
-d là - không có dữ liệu ngắn.
đá

36
Ngoài ra, hãy xem xét việc thêm - các cơ sở dữ liệu nếu cơ sở dữ liệu của bạn có các thủ tục / hàm được lưu trữ
crafterm

15
Theo mặc định, điều này không bao gồm CREATE DATABASElệnh. Để bao gồm, thay thế dbnamebằng --databases dbname(tốc ký -B dbname:). Sau đó, để nhập trên máy chủ khác, hãy sử dụngmysql -u root -p < schema.sql
Sean

88

Có, bạn có thể sử dụng mysqldumpvới --no-datatùy chọn:

mysqldump -u user -h localhost --no-data -p database > database.sql

4
Tôi ngạc nhiên đây không phải là câu trả lời được chấp nhận mặc dù đã được đăng trước đó mười giây và hoàn thiện hơn nếu không giống với câu trả lời được chấp nhận.
dùng5532169

1
@ zypA13510, rõ ràng mười giây có thể là sự khác biệt của 749 lượt upvote.
emallove

17

bạn cũng có thể trích xuất một bảng riêng lẻ với --no-datatùy chọn

mysqldump -u user -h localhost --no-data -p database tablename > table.sql

6

Bạn có thể sử dụng tùy chọn -d với lệnh mysqldump

mysqldump -u root -p -d databasename > database.sql

6

Bán phá giá mà không sử dụng đầu ra.

mysqldump --no-data <database name> --result-file=schema.sql

4

Coi chừng mặc dù tùy chọn --no-data sẽ không bao gồm định nghĩa chế độ xem. Vì vậy, nếu bạn có một khung nhìn như sau, hãy tạo view v1 chọn a. idNHƯ id, a. created_dateNHƯ created_date từ t1; với tùy chọn --no-data, định nghĩa chế độ xem sẽ được thay đổi thành sau khi tạo chế độ xem v1 chọn 1 AS id, 1 AScreated_date



2

Trong trường hợp bạn đang sử dụng IntelliJ, bạn có thể bật chế độ xem Cơ sở dữ liệu (Chế độ xem -> Cửa sổ Công cụ -> Cơ sở dữ liệu)

Bên trong khung nhìn đó kết nối với cơ sở dữ liệu của bạn. Sau đó, bạn có thể nhấp chuột phải vào cơ sở dữ liệu và chọn "Sao chép DDL". Các IDE khác có thể cung cấp một chức năng tương tự.

IntelliJ DDL


2
Tôi đã thử, nó không chứa bất kỳ tác nhân nào (và chúa biết còn gì nữa không)
phil294

2

Nếu bạn muốn kết xuất tất cả các bảng từ tất cả các cơ sở dữ liệu và không có dữ liệu (chỉ có cấu trúc cơ sở dữ liệu và bảng), bạn có thể sử dụng:

mysqldump -P port -h hostname_or_ip -u username -p --no-data --all-databases > db_backup.sql

Điều này sẽ tạo ra một tệp .sql mà bạn có thể tải lên máy chủ mysql để tạo cơ sở dữ liệu mới. Các trường hợp sử dụng cho điều này không nhiều trong môi trường sản xuất, nhưng tôi làm điều này hàng tuần để thiết lập lại các máy chủ được liên kết với các trang web demo, vì vậy bất cứ điều gì người dùng làm trong tuần, vào các tối chủ nhật, mọi thứ đều quay trở lại "mới": )


1

Để có được tập lệnh tạo bảng riêng lẻ:
- chọn tất cả bảng (có phím shift)
- chỉ cần nhấp chuột phải vào tên bảng và nhấp vào Sao chép vào Clipboard> Tạo Tuyên bố.


0

shell> mysqldump --no-data --routines --events test> dump-defs.sql


1
Chào mừng bạn đến với StackOverflow. Bạn có thể đưa ra một câu trả lời tuyệt vời về điều này nếu bạn cung cấp thêm một chút thông tin và các ràng buộc.
Janhoo

0

Thêm các tùy chọn --routines và --events để bao gồm các định nghĩa sự kiện và sự kiện được lưu trữ

mysqldump -u <user> -p --no-data --routines --events test > dump-defs.sql

-1

Bạn có thể sử dụng phương pháp sau

mysqldump -d <database name> > <filename.sql> // -d : without data

Hy vọng nó sẽ giúp bạn


6
Câu trả lời này không thêm gì mà câu trả lời khác chưa nói.
Daniel
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.