Làm thế nào để tạo một kết xuất cơ sở dữ liệu MySQL ( .sql
tệp) với tất cả các trình kích hoạt và thủ tục của nó?
Câu trả lời:
mysqldump
sẽ 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 địnhvì vậy trong mysqldump
lệnh, hãy thêm --routines
như:
mysqldump <other mysqldump options> --routines > outputfile.sql
-routines
thay vì --routines
?
--routines
Tuy nhiên, chỉ hoạt động nếu người dùng có đủ quyền truy cập vào mysql.proc
bảng. GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Đó 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
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