Hanya buang Prosedur Tersimpan di MySQL


31

Saya hanya perlu membuang prosedur yang tersimpan: tidak ada data, tidak ada pembuatan tabel. Bagaimana saya bisa melakukan ini menggunakan mysqldump?


1
+1 untuk pertanyaan ini karena ada banyak pengembang di dunia DB yang suka membuat katalog prosedur tersimpan di luar MySQL dalam perangkat lunak kontrol versi yang ingin melakukan ini (saya sendiri bukan penggemar melakukannya)
RolandoMySQLDBA

Dalam kasus saya, perintah ini memberi saya kesalahan. mysqldump: Got error: 23: "Out of resources when opening file"Saya memiliki --single-transactionopsi untuk menyelesaikan kesalahan ini. Dan jika Anda hanya ingin rutin, Anda dapat menambahkan - -no-create-infountuk menghindari pernyataan membuat tabel.
bedomon

Jawaban:


34

Ini harus dilakukan untuk Anda:

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.

CAVEAT

Akan jauh lebih baik untuk tidak memisahkan prosedur yang tersimpan dari database sehingga prosedur tersimpan yang spesifik akan dibuat dalam database yang dimaksudkan untuk itu. Hal yang sama berlaku untuk pemicu. Ini lebih disukai:

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

9
Saya mencoba ini dan harus menambahkan opsi '-t' untuk tidak mendapatkan pernyataan tabel create.
Derek Downey

Lupa yang itu, sayang sekali saya tidak bisa mengungguli komentar. Saya memperbarui perintah mysqldump pertama untuk memasukkannya. Yang kedua harus ditinggalkan untuk mengasosiasikan setiap pemicu ke tabel dasarnya. Terima kasih lagi, @Dest !!!
RolandoMySQLDBA

Tidak masalah. Dalam kasus saya, saya hanya ingin fungsi / prosedur tersimpan untuk database tertentu, dan bukan pemicu. Jadi itu bekerja dengan baik
Derek Downey
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.