source

--all-databases 덤프에서 단일 데이터베이스 가져오기

lovecheck 2022. 11. 18. 21:32
반응형

--all-databases 덤프에서 단일 데이터베이스 가져오기

--all-databases mysqldump에서 단일 데이터베이스를 Import할 수 있습니까?파일을 수동으로 수정할 수 있을 것 같은데 명령줄 옵션이 있는지 궁금합니다.

서버를 이행하고 있으며, 많은 데이터베이스를 보유하고 있습니다.대부분의 데이터베이스는 현재 필요없거나 필요 없습니다만, 필요에 따라서 1개의 데이터베이스를 restore 할 수 있는 옵션을 희망하고 있습니다.

다음 명령을 사용할 수 있습니다.

mysql -u root -p --one-database destdbname < alldatabases.sql

어디에destdbname복원하는 데이터베이스입니다.

IMHO가 훨씬 안전한 또 다른 옵션은 DB를 추출하는 것입니다.--all-databasesdump. 예:

sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' alldatabases.sql > output.sql

교체하다dbname원하는 데이터베이스 이름을 지정합니다. alldatabases.sql는 SQL 파일 이름입니다.이렇게 하면 분리된 DB를 파일에 저장하고 간단한 mysql 명령을 사용하여 복원할 수 있습니다.

(크레딧 : Darren Mothersele - 페이지 참조)

mysqldump출력은 단지 일련의SQL진술들.

명령줄에 원하는 데이터베이스를 지정하고 다음 명령을 사용하여 다른 데이터베이스에 대한 명령을 건너뛸 수 있습니다.

mysql -D mydatabase -o mydatabase < dump.sql

이 명령어는 다음 경우에만 실행됩니다.mydatabase사용중

를 사용하는 경우sed-Hetzbh가 제안하는 접근법은 원래 덤프에서 첫 번째 줄과 마지막 줄을 수동으로 복사해야 합니다.

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

그리고.

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

sed에 의해 생성된 제거된 파일의 시작과 끝 각각.그렇지 않으면 덤프 내 테이블의 알파벳 순서에 의해 존중되지 않는 외부 제약 조건(즉, Import가 실패할 수 있습니다.errno: 150 "Foreign key constraint is incorrectly formed").

데이터베이스만 복원하는 명령어는 다음과 같습니다.$DB_FROM부터$BACKUP_FILE백업 파일:

(sed '/^-- Current Database: `/q' "$BACKUP_FILE"; sed -n "/^-- Current Database: \`$DB_FROM\`/,/^-- Current Database: \`/p" "$BACKUP_FILE") | mysql -u root -p

새 데이터베이스를 동시에 복원하려면$DB_TO(의 일부$DB_FROM)는 데이터베이스를 다른 이름으로 복원하는 것을 의미합니다.다음은 완전한 명령어를 나타냅니다.

(sed '/^-- Current Database: `/q' "$BACKUP_FILE"; sed -n "/^-- Current Database: \`$DB_FROM\`/,/^-- Current Database: \`/p" "$BACKUP_FILE") | sed "s/\`$DB_FROM\`/\`$DB_TO\`/g" | mysql -u root -p

답변은 이 웹페이지뿐만 아니라 이 웹페이지에서도 영감을 받았습니다.

MariaDB docs에서 제안하는 방법은 다음과 같이 복원할 개체에 대한 권한만 가진 사용자를 일시적으로 생성하여 하나의 개체(테이블 또는 데이터베이스)만 복원하는 것입니다.

GRANT SELECT
ON db1.* TO 'admin_restore_temp'@'localhost' 
IDENTIFIED BY 'its_pwd';

GRANT ALL ON db1.table1
TO 'admin_restore_temp'@'localhost';

그런 다음 복원을 안전하게 수행할 수 있습니다.

mysql --user admin_restore_temp --password --force < /data/backup/db1.sql

언급URL : https://stackoverflow.com/questions/2342356/import-single-database-from-all-databases-dump

반응형