Làm thế nào để xuất cơ sở dữ liệu MySQL với các trình kích hoạt và thủ tục?


82

Làm thế nào để tạo một kết xuất cơ sở dữ liệu MySQL ( .sqltệp) với tất cả các trình kích hoạt và thủ tục của nó?


Chỉ cần thêm tùy chọn -R trong lệnh mysqldump.
Deepanshu Jain

Câu trả lời:


121

mysqldumpsẽ sao lưu theo mặc định tất cả các trình kích hoạt nhưng KHÔNG phải các thủ tục / chức năng được lưu trữ . Có 2 tham số mysqldump kiểm soát hành vi này:

  • --routines - FALSE theo mặc định
  • --triggers - ĐÚNG theo mặc định

vì vậy trong mysqldumplệnh, hãy thêm --routinesnhư:

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

Xem tài liệu MySQL về các đối số mysqldump .


tôi có MySQL "5.1.48-community" i run "mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt> dumpfile.sql;" nhưng nó đang đưa ra lỗi và lỗi là "ERROR 1064 (42000): Bạn có lỗi trong cú pháp SQL của mình; hãy kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần 'mysql dump --routines --no -create-info --no-data --no-create-db --skip-opt> dum 'at line 1 ". Làm thế nào để giải quyết nó? -
Yugal

thêm vào lệnh "-p -uusername dbname" và bạn không cần dấu ";" đăng nhập cuối cùng
Haim Evgi

1
Cũng nên nhớ rằng bạn nên chạy mysqldump tại dấu nhắc trình bao, không phải trong máy khách dòng lệnh MySQL hoặc trong phpMyAdmin hoặc công cụ truy vấn khác.
Bill Karwin

@HaimEvgi, Tại sao bạn nói -routinesthay vì --routines?
Pacerier

--routinesTuy nhiên, chỉ hoạt động nếu người dùng có đủ quyền truy cập vào mysql.procbảng. GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Rocki

20

Đó có thể là điều hiển nhiên đối với những người dùng chuyên nghiệp của MYSQL nhưng tôi đã lãng phí thời gian khi cố gắng tìm ra giá trị mặc định sẽ không xuất các hàm. Vì vậy, tôi nghĩ phải đề cập ở đây rằng - tham số chương trình cần phải được đặt thành true để làm cho nó hoạt động.

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

1
Bạn không cần sử dụng --routines = true. Các sprocs KHÔNG được đổ theo mặc định. Bạn chỉ cần bao gồm - các quy trình theo ví dụ trong câu trả lời được chấp nhận.
gview

6

Tôi đã tạo tập lệnh sau và nó phù hợp với tôi.

#! /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*

và bạn gọi tập lệnh bằng cách sử dụng các đối số dòng lệnh.

backupdb.sh my_db dev_user dev_password

xin chào, trên dòng 7 tại sao biến DBUSER nằm giữa "" và biến khác không?
rafaelphp
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.