programing

Linux에서만 AWS RDS용 mysqdump "flush tables" 오류가 발생했습니다.

bestprogram 2023. 5. 12. 22:47

Linux에서만 AWS RDS용 mysqdump "flush tables" 오류가 발생했습니다.

저는 수년 동안 콩코스의 도커 이미지에서 성공적으로 실행되고 있는 mysqdump를 사용하여 AWS RDS MariaDB에서 데이터를 내보내는 프로세스를 가지고 있습니다.

이틀 전 밤부터 프로세스가 실패하고 다음 오류가 발생했습니다.

mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'admin'@'%' (using password: YES) (1045)

공식적인 AWS 설명은 마스터 사용자 또는 GLOBAL READ LOCK에 대한 슈퍼 권한을 허용하지 않기 때문에 --master-data 옵션이 설정되면 mysqdump가 실패한다는 것입니다.

저는 그 옵션이 설정되어 있지 않습니다.나는 다음 깃발을 들고 달립니다.

mysqldump -h ${SOURCE_DB_HOST} ${SOURCE_CREDENTIALS} ${SOURCE_DB_NAME} --single-transaction --compress | grep -v '^SET .*;$' > /tmp/dump.sql

mysqdump는 로컬 Mac에서 실행할 때 잘 작동합니다.리눅스 환경에서만 읽기 잠금으로 FLASH TABLES를 실행할 수 없다는 오류와 함께 실패합니다.

제 질문은, 리눅스의 mysqdump에서 FLASH TABLES WITH READ LOCK 명령을 비활성화하는 방법을 아는 사람이 있습니까?

편집: 아래의 @httpsy-payu 답변을 제 문제를 해결했다고 받아들이게 되어 기쁘지만, 여기 이 문제를 접하는 다른 사람들을 위해 MySQL 버그 보고서 링크가 있습니다. https://bugs.mysql.com/bug.php?id=109685

저는 며칠 전에 같은 문제에 직면했습니다.내 sqdump 스크립트는 내게 그것이 나에게 주기 시작할 때까지 몇 년 동안 잘 작동했습니다.Access denied; you need (at least one of) the RELOAD privilege(s) for this operation제 첫 번째 본능은 이 특권을 부여하는 것이었습니다.하지만 그 이후로 저는Access denied for user 'user'@'%' (using password: YES) (1045)오류, 이는 AWS 문서에 문서화되어 있습니다.몇 시간 동안 조사한 결과 mysql의 최신 5.7.41 버전의 버그로 밝혀졌습니다(정확히 오류가 발생하기 시작한 1월 17일에 출시되었습니다).5.7.40으로 다운그레이드하면 문제가 해결되었습니다.흥미로운은 5.7.41 변경 로그에 읽기 잠금이 있는 플러시 테이블이나 기본값에 가까운 항목이 나열되지 않는다는 입니다.

MariaDB Client를 설치하면 이 문제가 해결됩니다.

Ubuntu에서 다음을 실행합니다.

sudo apt remove mysql-client -y && sudo apt install mariadb-client -y

Debian에서는 mysqlclient 및 mysqdump를 8.0.32에서 8.0.31(또는 다른 8.0.x)로 다운그레이드하는 데 정말 어려움을 겪고 있습니다. (적어도 Ubuntu에서는 8.0.28로 다운그레이드하는 것이 쉬워 보입니다.8.0.28이 안정적인지 모르겠습니다.)

여기 제가 생각해낸 최고의 것이 있습니다.저한테는 맞는 것 같지만 YMMV(마일리지가 다를 수 있습니다).일반적으로 데브 패키지는https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/디렉토리가 작동하는 것 같습니다.

# May be optional:
apt-get remove -y default-libmysqlclient-dev && apt-get autoremove -y

# NOTE: Use `dpkg -I abc.deb | grep Depends` (recursively, on mysql-client
#       and each of its mysql package dependencies) to find out which other
#       mysql packages are needed.
# apt-get check: Report if there are now any broken dependencies.
# rm -rf /var/lib/apt/lists/*: This is meant to be run in a Dockerfile,
# and deleting these files after apt-get install is commonly done to
# make the resulting image layer smaller, which speeds up image download
# from a docker image repo later.
wget https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-client_8.0.31-1debian11_amd64.deb && \
    wget https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-community-client_8.0.31-1debian11_amd64.deb && \
    wget https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-community-client-core_8.0.31-1debian11_amd64.deb && \
    wget https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-community-client-plugins_8.0.31-1debian11_amd64.deb && \
    wget https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/libmysqlclient-dev_8.0.31-1debian11_amd64.deb && \
    wget https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/libmysqlclient21_8.0.31-1debian11_amd64.deb && \
    wget https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-common_8.0.31-1debian11_amd64.deb && \
    dpkg -i *_8.0.31-1debian11_amd64.deb && \
    rm *_8.0.31-1debian11_amd64.deb && \
    apt-get update && \
    apt-get check && \
    rm -rf /var/lib/apt/lists/*

5.7.41 변경 로그에 따르면,

옵션 --single-transaction 및 --set-gtid-dll=이(가) 일치하지 않을 때 mysqdump에서 백업한 데이터와 GTID가 일치하지 않았습니다.ON이 둘 다 사용되었습니다.서버의 GTID가 이미 증가했을 수 있는 덤프 끝에서 GTID_EXECUED가 가져오기 때문입니다.이 문제가 해결된 경우 덤프 시작 시 읽기 잠금이 있는 FLASH TABLES가 수행되고 직후 GTID_EXECUED가 가져오기되어 값이 mysqdump에서 생성된 스냅샷과 일치합니다.

언급URL : https://stackoverflow.com/questions/75183032/mysqldump-for-aws-rds-flush-tables-error-on-linux-only