MySQL veritabanı tetikleyiciler ve prosedürlerle nasıl dışa aktarılır?


83

.sqlTüm tetikleyicileri ve prosedürleriyle bir MySQL veritabanı dökümü ( dosyası) nasıl oluşturulur ?


Mysqldump komutunda -R seçeneğini eklemeniz yeterlidir.
Deepanshu Jain

Yanıtlar:


122

mysqldumptarafından irade yedekleme varsayılan tüm tetikleyiciler ama DEĞİL saklı prosedürler / fonksiyonlar . Bu davranışı kontrol eden 2 mysqldump parametresi vardır:

  • --routines - Varsayılan olarak YANLIŞ
  • --triggers - Varsayılan olarak DOĞRU

bu yüzden mysqldumpkomutta şöyle ekleyin --routines:

mysqldump <other mysqldump options> --routines > outputfile.sql

Mysqldump argümanları hakkındaki MySQL belgelerine bakın .


MySQL "5.1.48-topluluğu" kullanıyorum "mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt> dumpfile.sql;" ancak hata veriyor ve hata "ERROR 1064 (42000): SQL sözdiziminizde bir hata var; doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin 'mysql dump --routines --no -create-info --no-data --no-create-db --skip-opt> dum '1. satırda ". Nasıl çözeceksin? -
Yugal

"-p -uusername dbname" komutuna ekleyin ve ";" sonunda imzala
Haim Evgi

1
Ayrıca mysqldump'ı MySQL komut satırı istemcisinde veya phpMyAdmin'de veya başka bir sorgu aracında değil, kabuk isteminde çalıştırmanız gerektiğini unutmayın.
Bill Karwin

@HaimEvgi, neden -routinesyerine diyorsun --routines?
Pacerier

--routinesancak yalnızca kullanıcının mysql.proctabloya yeterli erişim hakları varsa çalışır . GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Rocki

20

MYSQL'in uzman kullanıcıları için bu açık olabilir, ancak varsayılan değerin işlevleri dışa aktarmayacağını anlamaya çalışırken biraz zaman harcadım. Bu yüzden burada --routines parametresinin çalışması için true olarak ayarlanması gerektiğinden bahsetmeyi düşündüm .

mysqldump --routines=true -u <user> my_database > my_database.sql

1
--Routines = true kullanmanıza gerek yoktur. Sprocs varsayılan olarak ATILMAZ. Örneğe göre kabul edilen yanıta --routines eklemeniz yeterlidir.
gview

6

Aşağıdaki komut dosyasını oluşturdum ve benim için gayet iyi çalıştı.

#! /bin/sh
cd $(dirname $0)
DB=$1
DBUSER=$2
DBPASSWD=$3
FILE=$DB-$(date +%F).sql
mysqldump --routines "--user=${DBUSER}"  --password=$DBPASSWD $DB > $PWD/$FILE
gzip $FILE
echo Created $PWD/$FILE*

ve komut satırı argümanlarını kullanarak komut dosyasını çağırırsınız.

backupdb.sh my_db dev_user dev_password

merhaba, 7. satırda neden DBUSER değişkeni "" ile diğeri arasında değil?
rafaelphp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.