mysqldump가 트리거 및 프로 시저를 덤프 할 수 있습니까?


10

지정된 db에서 모든 트리거와 프로 시저를 저장하는 mysqldump를 만드는 방법이 있습니까?

얼마 전에 나는 mysqldump내 방아쇠를 저장할 것이라고 읽었 지만 그 모양은 아닙니다. 두 번째 관련 질문은 트리거가 존재하는 경우 SQL 파일을 어떻게 확인할 수 있습니까?

답변:


9

나는 보통 그들이 의도 한 테이블에서 트리거를 분리하지 않습니다. 나는 이렇게 덤프 :

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

다음과 같은 루틴 및 트리거가 있는지 확인하십시오.

SELECT COUNT(1) FROM mysql.proc;

SELECT COUNT(1) FROM information_schema.triggers;

SELECT * FROM information_schema.triggers\G

MySQL 인스턴스의 모든 DB에이를 수행하려면 다음을 수행하십시오.

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

이렇게하면 저장 프로 시저가 DB에 대한 루틴 덤프로 이동하지만 스키마와 트리거는 다른 덤프로 이동합니다.


트리거 / 프로 시저를 덤프하는 방법에 대한 @dole Rolando의 권리. SQL 파일에 존재하는지 확인하려면 파일을 열고 'CREATE TRIGGER'호출을 검색하십시오. * nix 인 경우grep 'CREATE TRIGGER'
Derek Downey

@RolandoMySQLDBA, --triggers기본적으로 덤프 되지 않습니까? --no-data --routines --triggers대의 차이점은 무엇입니까 --no-data --routines?
Pacerier

1
@Pacerier 트리거를 원하지 않는 상황에서 트리거 --skip-triggers가 필요하지 않은 슬레이브 설정과 같은 경우에 사용할 수 있습니다 . 옵션을 건너 뛸 수 있다는 가능성을 항상 상기시키기 위해 기본 플래그 인 경우에도 항상 mysqldumps ( --routines, --triggers) 에 특정 플래그를 사용 합니다. 따라서 개인적인 취향 일뿐입니다. 기본 설정이 버전마다 기본값으로 유지되고 임시 상황을 처리하지 않는다고 확신하는 경우 결과 mysqldump가 올바른 한 mysqldumps를 필요에 따라 표현하십시오.
RolandoMySQLDBA

@RolandoMySQLDBA--A -N은 무엇을합니까?
MontyPython

DROP 트리거 문 앞에 정규식을 사용했습니다. 이것을 바꾸십시오. (\ / * \! 50003 CREATE * \ / \ / * \! 50017 DEFINER \ = some_text_here * \ / \ / * \! 50003 TRIGGER (. *?) !)이 함께 : DROP TRIGGER / * 50,032 IF는 * / EXISTS $2; \ n $ (1)
AlexandruSerban
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.