USE database;
문에 대한 줄 수를 찾으려면 grep
을 사용하고 문제가있는 부분을 잘라내려면 아래에 나와있는 sed
을 사용하여 데이터베이스를 개별적으로 수행하거나 기존 파일에서 mysql 스키마를 제거해야합니다.), MySQL 스키마에서 테이블 구조 나 독점적 인 RDS 트리거로 원숭이가 아닌 덤프 파일을 생성하십시오.
전체 mysql 스키마를 RDS 인스턴스로 복원하려고 시도하지는 않았지만 RDS의 사용자 지정 내용과 SUPER
권한이 부족한 곳을 확실히 볼 수 있습니다.하지만이 옵션은 다음과 같습니다 mysqldump는 적어도 당신을 가까이 가야한다. 이 여전히 너무 공격적이면
mysqldump --no-create-info # don't try to drop and recreate the mysql schema tables
--skip-triggers # RDS has proprietary triggers in the mysql schema
--insert-ignore # write INSERT IGNORE statements to ignore duplicates
--databases mysql # only one database, "mysql"
--skip-lock-tables # don't generate statements to LOCK TABLES/UNLOCK TABLES during restore
--single-transaction # to avoid locking up the source instance during the dump
, 당신은 콘텐츠를 당신이 ("사용자"다른 그랜트 테이블)을 유지하기 위해 필요한 특정 테이블에서 행만을 덤핑에 의지해야합니다.
다음에 대한 보증은 없지만 내 컬렉션에 있습니다. "old_dumpfile.sql"을 읽고 "new_dumpfile.sql"을 쓰는 한 줄짜리예요 ... 같은 줄에 mys32를 사용하여 USE
또는 CREATE DATABASE
문을보고 다시 출력을 전환하는 한 줄입니다. mysql이 없으면 다음 번에 그러한 명령문이 발생합니다. 덤프 파일에 DROP DATABASE
문이 포함되어 있거나 --skip-add-drop-database
으로 새 덤프 파일을 생성 할 수있는 경우 수정해야합니다.
이것을 통해 기존 덤프 파일을 실행하면 기본적으로 해당 파일에서 mysql 스키마 만 제거되므로 수동으로 먼저 복원 한 다음 나머지 데이터베이스 데이터가 더 원활하게 흐르게 할 수 있습니다.
perl -pe 'if (/(^USE\s|^CREATE\sDATABASE.*\s)`mysql`/) { $x = 1; } elsif (/^USE\s`/ || /^CREATE\sDATABASE/) { $x = 0; }; $_ = "" if $x;' old_dumpfile.sql > new_dumpfile.sql
답장을 보내 주셔서 감사합니다. 나는 여전히 오류를 범할 수 없었다. 나는 수동으로 가져 오기만 할 것입니다. –
'DEFINER' 선언과 관련하여 RDS를 복원하는 동안 액세스가 거부되는 또 다른 일반적인 원인이 있습니다. (당연히 과소 평가 된 Perl은 그날의 영웅이었습니다. 다시 말하지만) http://serverfault.com/questions/555953/first- 시도 - 마이 그 레이션 - ec2 - mysql을 - 아마존 - rds - 잘 - 잘 - 슈퍼 - 특권/555983 # 555983 –
헤이 @ 마이클 - sqlbot 그'펄 명령을 게시 주셔서 감사합니다, 그것은 나를 많이 구해 주셔서 감사합니다 작품 :) – Moe