IT이야기

데이터베이스를 mysql에서 mongoDb로 변환

cyworld 2021. 10. 3. 08:01
반응형

데이터베이스를 mysql에서 mongoDb로 변환


데이터베이스를 mysql에서 mongoDB로 변경하는 쉬운 방법이 있습니까?

또는 더 나은 사람이 나에게 좋은 튜토리얼을 제안합니다.


데이터베이스를 mysql에서 mongoDB로 변경하는 쉬운 방법이 있습니까?

방법 #1 : MySQL에서 CSV 형식으로 내보낸 다음 mongoimport 도구 를 사용합니다 . 그러나 이진 데이터의 날짜 처리 측면에서 항상 잘 작동하는 것은 아닙니다.

방법 #2 : 선택한 언어로 전송 스크립트를 작성합니다. 기본적으로 MySQL에서 한 번에 한 요소씩 모든 것을 읽은 다음 MongoDB에 삽입하는 프로그램을 작성합니다.

방법 #2가 #1보다 낫지만 여전히 적절하지 않습니다.

MongoDB는 테이블 대신 컬렉션을 사용합니다. MongoDB는 조인을 지원하지 않습니다. 내가 본 모든 데이터베이스에서 이것은 MongoDB의 데이터 구조가 MySQL의 구조와 다르다는 것을 의미합니다.

이 때문에 SQL을 MongoDB로 이식하기 위한 "범용 도구"가 없습니다. 데이터가 MongoDB에 도달하기 전에 변환해야 합니다.


Ruby를 사용하는 경우 다음을 시도할 수도 있습니다. Mongify

데이터를 손실 없이 RDBS에서 MongoDB로 변환하는 매우 간단한 방법입니다.

Mongify는 mysql 데이터베이스를 읽고 번역 파일을 구축하며 데이터 변환 방법을 매핑하기만 하면 됩니다.

다음을 지원합니다.

  • ID 자동 업데이트(BSON ObjectID로)
  • 참조 ID 업데이트
  • 유형 캐스팅 값
  • 다른 문서에 테이블 포함
  • 필터를 저장하기 전(수동으로 데이터 변경 허용)
  • 그리고 훨씬 더...

자세한 내용은 http://mongify.com/getting_started.html 에서 읽어보십시오 .

홈페이지에 얼마나 쉬운지 보여주는 5분짜리 짧은 동영상도 있습니다.


MongoVUE 의 무료 버전은 자동으로 이 작업을 수행할 수 있습니다.

두 데이터베이스에 연결하고 가져오기를 수행할 수 있습니다.


저는 그런 종류의 마이그레이션 작업에 대해 TalendOpenStudio에 대해 어느 정도 부분적 입니다. 데이터 마이그레이션 "스크립트"를 시각적으로 생성하는 Eclipse 기반 솔루션입니다. 나는 시각적 프로그래밍을 좋아하지 않지만 이것은 내가 예외로 만드는 문제 영역입니다.

Adrien Mogenet은 mongodb용 MongoDBConnection 플러그인을 만들었습니다 .

"단순한" 마이그레이션에는 과도할 수 있지만 ut는 멋진 도구입니다.

그러나 Nix의 제안은 단일 마이그레이션인 경우 시간을 절약할 수 있습니다.


이를 위해 QCubed( http://qcu.be ) 프레임워크를 사용할 수 있습니다 . 절차는 다음과 같습니다.

  1. QCube 설치 ( http://www.thetrozone.com/qcubed-installation )
  2. 데이터베이스에서 codegen을 수행하십시오. (http://www.thetrozone.com/php-code-generation-qcubed-eliminating-sql-hassle)
  3. 한 번에 하나의 작업만 실행되도록 나머지 세계에서 데이터베이스를 오프라인으로 전환합니다.
  4. 이제 데이터베이스의 모든 테이블에서 모든 행을 읽고 모든 객체에서 getJson을 사용하여 json을 가져오는 스크립트를 작성하십시오. 그런 다음 데이터를 사용하여 배열로 변환하고 mongoDB에 푸시할 수 있습니다!

다음은 이 목적을 위해 Node.js로 수행한 작업입니다.

var mysql = require('mysql');
var MongoClient = require('mongodb').MongoClient;

function getMysqlTables(mysqlConnection, callback) {
    mysqlConnection.query("show full tables where Table_Type = 'BASE TABLE';", function(error, results, fields) {
        if (error) {
            callback(error);
        } else {
            var tables = [];
            results.forEach(function (row) {
                for (var key in row) {
                    if (row.hasOwnProperty(key)) {
                        if(key.startsWith('Tables_in')) {
                            tables.push(row[key]);
                        }
                    }
                }
            });
            callback(null, tables);
        }
    });

}

function tableToCollection(mysqlConnection, tableName, mongoCollection, callback) {
    var sql = 'SELECT * FROM ' + tableName + ';';
    mysqlConnection.query(sql, function (error, results, fields) {
        if (error) {
            callback(error);
        } else {
            if (results.length > 0) {
                mongoCollection.insertMany(results, {}, function (error) {
                    if (error) {
                        callback(error);
                    } else {
                        callback(null);
                    }
                });
            } else {
                callback(null);
            }
        }
    });
}

MongoClient.connect("mongodb://localhost:27017/importedDb", function (error, db) {
    if (error) throw error;

    var MysqlCon = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: 8889,
        database: 'dbToExport'
    });

    MysqlCon.connect();

    var jobs = 0;

    getMysqlTables(MysqlCon, function(error, tables) {
        tables.forEach(function(table) {
            var collection = db.collection(table);
            ++jobs;
            tableToCollection(MysqlCon, table, collection, function(error) {
                if (error) throw error;
                --jobs;
            });
        })
    });

    // Waiting for all jobs to complete before closing databases connections.
    var interval = setInterval(function() {
        if(jobs<=0) {
            clearInterval(interval);
            console.log('done!');
            db.close();
            MysqlCon.end();
        }
    }, 300);
});

누군가 여전히 솔루션을 찾고 있다면 가장 쉬운 방법은 SQL DB에 연결하는 PHP 스크립트를 작성하고 일반적인 Select 문을 사용하여 원하는 정보를 검색하고 PHP JSON 인코딩 기능을 사용하여 정보를 JSON으로 변환하고 결과를 파일로 출력하거나 MongoDB에 직접 출력하기만 하면 됩니다. 실제로 매우 간단하고 간단합니다. Json 유효성 검사기에 대해 출력을 다시 확인하는 것뿐입니다. 유효하게 만들기 위해 특정 문자와 기호를 교체하기 위해 폭발과 같은 기능을 사용해야 할 수도 있습니다. 이전에 이 작업을 수행했지만 현재 손에 스크립트가 없지만 문자 그대로 코드의 절반 페이지였다는 것을 기억할 수 있습니다.

아 또한 Mongo는 문서 저장소이므로 mongo에서 허용되도록 하려면 일부 데이터 매핑이 필요합니다.


같은 문제로 여기에 오는 사람들을 위해 이 Github 프로젝트를 확인할 수 있습니다 . 이것은 간단한 명령을 실행하여 MySQL 데이터베이스에서 MongoDB로 데이터를 마이그레이션하는 데 도움이 되는 지속적인 개발입니다.

나중에 프로젝트에서 사용할 수 있도록 TypeScript에서 MongoDB 스키마를 생성합니다. 각 MySQL 테이블은 MongoDB 컬렉션이 되며 데이터 유형은 MongoDB 호환으로 효율적으로 변환됩니다.

이에 대한 문서는 프로젝트의 README.md 에서 찾을 수 있습니다 . 부담 없이 오셔서 기여해 주십시오. 필요한 경우 도움이 되었으면 합니다.


당신을 위한 도구를 찾고 있다면 행운을 빕니다.

내 제안은 선택한 언어를 선택하고 하나에서 읽고 다른 언어로 쓰는 것입니다.


Matt Briggs의 말을 인용할 수 있다면(그것은 내 문제를 한 번 해결했습니다):

운전 방법은 가장 직선적입니다. 가져오기/내보내기 도구는 환상적이지만 쌍으로 사용하는 경우에만 가능합니다. 테이블에 날짜가 포함되어 있고 db에서 내보내고 mongo로 가져오려고 하면 난감한 상황입니다.

C#을 사용하는 당신도 운이 좋습니다. 우리는 루비를 사용하고 있으며 mongo로 마이그레이션한 3,200만 행 테이블이 있습니다. 우리의 최종 솔루션은 json을 출력하고(날짜를 적절하게 처리하기 위한 몇 가지 복잡한 사항을 포함하여) postgres에서 미친 SQL 문을 만들고 명령줄에서 해당 쿼리의 출력을 mongoimport로 파이프하는 것이었습니다. 글을 쓰는 데는 엄청나게 답답한 하루가 걸렸으며 실제로 변경할 수 있는 종류가 아닙니다.

따라서 문제를 해결할 수 있다면 mongo 드라이버와 함께 ado.net을 사용하십시오. 그렇지 않다면, 나는 당신이 잘되기를 바랍니다 :-)

(이것은 총 mongo fanboi에서 온다는 점에 유의하십시오)

MySQL은 다른 SQL 데이터베이스와 매우 유사하므로 주제: SQL 테이블을 mongoDB 문서로 변환


다음 프로젝트를 사용할 수 있습니다. 작성하려면 solr과 같은 구성 파일이 필요합니다. 매우 간단하고 간단합니다.

http://code.google.com/p/sql-to-mongo-importer/


이것을 시도하십시오: 간단한 r2n 매핑을 사용하여 MySQL 덤프를 Mongo 업데이트로 자동 변환합니다. https://github.com/virtimus/mysql2mongo


가장 쉬운 방법 중 하나는 MySQL 데이터베이스를 JSON으로 내보낸 다음 mongorestore를 사용하여 MongoDB 데이터베이스로 가져오는 것입니다.

1단계: MySQL 데이터베이스를 JSON으로 내보내기

필요한 경우 mysql 덤프 파일을 MySQL 데이터베이스에 로드합니다.

MySQL Workbench를 열고 MySQL 데이터베이스에 연결

스키마 뷰어로 이동 > 데이터베이스 선택 > 테이블 > 내보낼 테이블 이름을 마우스 오른쪽 버튼으로 클릭

'테이블 데이터 내보내기 마법사' 선택

파일 형식을 .json으로 설정하고 tablename.json과 같은 파일 이름을 입력합니다.

참고: 모든 테이블을 개별적으로 내보내야 합니다.

2단계: mongorestore 명령을 사용하여 JSON 파일을 MongoDB로 가져오기

mongorestore 명령은 mongo 셸이 아닌 서버 명령줄에서 실행해야 합니다.

인증 세부 정보와 --jsonArray 옵션을 제공해야 할 수도 있습니다. 자세한 내용은 mongorestore 문서 를 참조하세요.

mongoimport -d dbname -u ${MONGO_USERNAME} -p ${MONGO_PASSWORD} --authenticationDatabase admin -c collectionname --jsonArray --file tablename.json

참고: 이 방법은 원래 MySQL 데이터베이스에 BLOB/바이너리 데이터가 있는 경우 작동하지 않습니다.

참조URL : https://stackoverflow.com/questions/6251548/converting-database-from-mysql-to-mongodb

반응형