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ó?
Câu trả lời:
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 địnhvì vậy trong mysqldumplệnh, hãy thêm --routinesnhư:
mysqldump <other mysqldump options> --routines > outputfile.sql
-routinesthay vì --routines?
--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';
Đó 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