--all-databases 덤프에서 단일 데이터베이스 가져오기
--all-databases mysqldump에서 단일 데이터베이스를 Import할 수 있습니까?파일을 수동으로 수정할 수 있을 것 같은데 명령줄 옵션이 있는지 궁금합니다.
서버를 이행하고 있으며, 많은 데이터베이스를 보유하고 있습니다.대부분의 데이터베이스는 현재 필요없거나 필요 없습니다만, 필요에 따라서 1개의 데이터베이스를 restore 할 수 있는 옵션을 희망하고 있습니다.
다음 명령을 사용할 수 있습니다.
mysql -u root -p --one-database destdbname < alldatabases.sql
어디에destdbname
복원하는 데이터베이스입니다.
IMHO가 훨씬 안전한 또 다른 옵션은 DB를 추출하는 것입니다.--all-databases
dump. 예:
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
'source' 카테고리의 다른 글
Eclipse에서 조건부 중단점을 사용하는 방법은 무엇입니까? (0) | 2022.11.18 |
---|---|
특정 카디널리티를 가진 sql 쿼리(다대다) (0) | 2022.11.18 |
Java에서 디렉터리 내용을 삭제하는 방법 (0) | 2022.11.18 |
__get__, __set__ 및 Python 기술자에 대해 (0) | 2022.11.18 |
오류와 예외의 차이점은 무엇입니까? (0) | 2022.11.18 |