Chỉ kết xuất các thủ tục được lưu trữ trong MySQL


31

Tôi chỉ cần kết xuất các thủ tục được lưu trữ: không có dữ liệu, không tạo bảng. Làm thế nào tôi có thể làm điều này bằng cách sử dụng mysqldump?


1
+1 cho câu hỏi này bởi vì có nhiều nhà phát triển trong thế giới DB thích lập danh mục các quy trình được lưu trữ bên ngoài MySQL trong phần mềm kiểm soát phiên bản muốn làm điều này (bản thân tôi không phải là người hâm mộ làm như vậy)
RolandoMyQueryDBA

Trong trường hợp của tôi, lệnh này cho tôi một lỗi mysqldump: Got error: 23: "Out of resources when opening file"tôi có --single-transactiontùy chọn để khắc phục lỗi này. Và nếu bạn chỉ muốn thường trình, bạn có thể thêm - -no-create-infođể tránh câu lệnh tạo bảng.
bedomon

Câu trả lời:


34

Điều này sẽ làm điều đó cho bạn:

mysqldump -h... -u... -p... -n -d -t --routines --triggers --all-databases > MySQLStoredProc.sql

  -n, --no-create-db     Suppress the CREATE DATABASE ... IF EXISTS statement 
                         that normally is output for each dumped database if
                         --all-databases or --databases is given.
  -d, --no-data          No row information.
  --triggers             Dump triggers for each dumped table.
                         (Defaults to on; use --skip-triggers to disable.)
  -R, --routines         Dump stored routines (functions and procedures).
  -t, --no-create-info   Do not write CREATE TABLE statements that create each 
                         dumped table.

CẨN THẬN

Sẽ tốt hơn nhiều nếu không tách các thủ tục được lưu trữ khỏi cơ sở dữ liệu để các thủ tục được lưu trữ cụ thể sẽ được tạo trong cơ sở dữ liệu mà nó có nghĩa là. Điều tương tự cũng xảy ra đối với các kích hoạt. Điều này sẽ được ưa thích hơn:

mysqldump -h... -u... -p... -d --routines --triggers --all-databases > MySQLStoredProc.sql

9
Tôi đã thử điều này và phải thêm tùy chọn '-t' để không nhận được các câu lệnh tạo bảng.
Derek Downey

Quên một cái, quá tệ, tôi không thể đưa ra ý kiến. Tôi đã cập nhật lệnh mysqldump đầu tiên để bao gồm nó. Cái thứ hai nên được bỏ ra để liên kết mọi kích hoạt với bảng cơ sở của nó. Cảm ơn một lần nữa, @DTest !!!
RolandoMySQLDBA

Không vấn đề gì. Trong trường hợp của tôi, tôi chỉ muốn các chức năng / thủ tục được lưu trữ cho một cơ sở dữ liệu cụ thể chứ không phải kích hoạt. Vì vậy, nó hoạt động tốt
Derek Downey
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.