Có thể mysqldump đổ kích hoạt và thủ tục?


10

Có cách nào để tạo một mysqldump sẽ lưu tất cả các trình kích hoạt và quy trình từ một db được chỉ định không?

Cách đây một thời gian, tôi đọc được rằng mysqldumpnó cũng sẽ lưu các kích hoạt của tôi, nhưng nó không giống như vậy. Câu hỏi liên quan thứ hai của tôi là làm thế nào tôi có thể kiểm tra tệp sql nếu kích hoạt tồn tại?

Câu trả lời:


9

Tôi thường không tách các trình kích hoạt khỏi các bảng mà chúng có nghĩa là. Tôi đổ như thế này:

mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql

Kiểm tra sự hiện diện của các thói quen và kích hoạt như thế này:

SELECT COUNT(1) FROM mysql.proc;

SELECT COUNT(1) FROM information_schema.triggers;

SELECT * FROM information_schema.triggers\G

Nếu bạn muốn thực hiện điều này cho tất cả các DB trong Trường hợp MySQL, hãy làm điều này:

mysql -u... -p... -A -N -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql')" > /tmp/dblist.txt
for DB in `cat /tmp/dblist.txt`
do
    mysqldump -u... -p... --no-data --no-create-info --routines dbname > ${DB}-routines.sql
    mysqldump -u... -p... --no-data --triggers dbname > ${DB}-schema-triggers.sql
done

Theo cách đó, các thủ tục được lưu trữ đi theo một kết xuất thường trình cho DB, trong khi lược đồ và các trình kích hoạt đi vào một kết xuất khác.


@dole Rolando đúng về cách loại bỏ trình kích hoạt / thủ tục. Nếu bạn muốn xem liệu chúng có tồn tại trong tệp sql hay không, hãy mở nó và tìm kiếm các cuộc gọi 'CREATE TRIGGER'. Nếu trong * nix,grep 'CREATE TRIGGER'
Derek Downey

@RolandoMySQLDBA, không --triggersđược kết xuất theo mặc định? Điều gì sẽ là sự khác biệt giữa --no-data --routines --triggersvs --no-data --routines?
Pacerier

1
@Pacerier Đã có những tình huống tôi không muốn kích hoạt và tôi sẽ sử dụng --skip-triggerstrong những dịp như vậy (chẳng hạn như thiết lập nô lệ không cần kích hoạt). Như một lời nhắc nhở liên tục với bản thân về khả năng bỏ qua các tùy chọn, tôi luôn sử dụng một số cờ nhất định trong mysqldumps ( --routines, --triggers) ngay cả khi chúng là mặc định. Vì vậy, nó chỉ là một sở thích cá nhân. Nếu bạn tin tưởng rằng cài đặt mặc định sẽ vẫn là mặc định từ phiên bản này sang phiên bản khác và không bao giờ xử lý các tình huống adhoc, thì bạn thể hiện mysqldumps khi cần miễn là kết quả mysqldump phù hợp với bạn.
RolandoMySQLDBA

@RolandoMySQLDBA - Làm gì -A -N làm gì?
MontyPython

Tôi đã sử dụng các biểu thức chính quy để thêm vào các câu lệnh kích hoạt DROP: Thay thế: ) Với điều này: DROP TRIGGER / *! 50032 NẾU EXISTS * / $2;; \ n $ 1
AlexandruSerban
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.