mysqldump: Got error: 1932: “Table ‘mysql.gtid_slave_pos’ doesn’t exist in engine” when using LOCK TABLES

mysqldump all database 시 발생하는 에러
mysqldump: Got error: 1932: “Table ‘mysql.gtid_slave_pos’ doesn’t exist in engine” when using LOCK TABLES

원인은 mysql.gtid_slave_pos 테이블을 읽어 들이지 못하는 과정에서 발생하는 에러인데
해당 테이블 mysql.gtid_slave_pos Mariadb 10.0.3 버전부터 소개된 기능으로 Mariadb의 글러벌 변수인 gtid_slave_pos를 저장하기 위한 테이블이다

해당 테이블을 사용해 gtid_slave_pos를 저장하고  재부팅 시에도 gtid 값을 유지하고 있기 때문에 slave 서버에서 에러(크래시)가 발생 시에도
sync를 맞출 수 있도록 해주는 테이블이다.
해당 테이블은 master 서버에도 존재하지만 master 서버에서는 사용되지 않음

mysql.qtid_slave_pos 테이블이 없는경우는 다음과 같다
1. Mariadb 10.0.3 이전 버전에서 현재 버전으로 업그레이드시
2. 현재 서버가 slave이고 master 서버가 10.0.3 버전보다 낮은 경우
3. 현재 서버를 10.0.3 버전에서 생성한 backup 파일로 복구한 경우

근데 현재 해당 서버에는 해당 테이블이 존재한다 / 그런데도 에러가 발생한다
확인을 해보니 해당 테이블은 innodb 엔진을 사용시에만 사용할수가 있다
현재 데이터베이스 상태

InnoDB를 사용하지 않는다 / 해당 환경에서 테이블을 확인하면 에러가 발생한다

mysql.gtid_salve_pos Table 문서를 확인하면 다음과 같은 안내 문구가 있다
The default mysql.gtid_slave_pos table will be initially created using the default storage engine set for the server (which itself defaults to InnoDB). If the application load is primarily non-transactional MyISAM or Aria tables, it can be beneficial to change the storage engine to avoid including an InnoDB update with every operation:

즉 myisam 또는 aria 테이블인 경우 변경해서 사용하라고 하는것이다
근데 실서 서버에서 alter 로 변경하면 진행이 되지 않는다

이럴때 우선 디폴트 엔진을 InnoDB로 변경 후 작업을 진행하면 된다
my.cnf 를 이용하여 DEFAULT 엔진을 InnDB로 변경 후 진행해 보자

이제 alter 로 변경해 보자

innodb를 사용하지 않는다면 이 작업을 진행하는 것이고  innodb 엔진을 사용하면 이 작업은 진행하지 않아도 된다
우선 현재의 서버는 innodb를 미사용으로 변경 된 상태

이제 정상적으로 테이블을 사용할 수 있기때문에 해당 에러는 더이상 발생되지  않는다

공식문서 사이트 https://mariadb.com/kb/en/mysqlgtid_slave_pos-table/


코멘트 쓰기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

다음의 HTML 태그와 속성을 사용할 수 있습니다:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



배송정보
배송조회를 하시려면 송장번호를 클릭하세요
배송조회
상품명
주문번호
택배사
송장번호