programing

로컬 데이터베이스와 라이브 데이터베이스를 결합하는 방법

css3 2023. 3. 26. 11:41

로컬 데이터베이스와 라이브 데이터베이스를 결합하는 방법

몇 년 동안 워드프레스용으로 개발해왔으며, 몇 가지 점에서 워크플로우가 업그레이드되었지만, 한 가지 해결하지 못한 것이 있습니다.로컬 Wordpress 데이터베이스를 라이브 데이터베이스와 병합합니다.

즉, 로컬 버전의 사이트에서 파일과 데이터가 변경되는 동시에 라이브 사이트의 데이터도 변경됩니다.

내가 찾을 수 있는 것은 사이트를 끌어내리고, 아무도 (고객도) 라이브 사이트를 건드리지 않고, 로컬 사이트를 다시 위로 밀어 올리는 완벽한 시나리오뿐입니다.즉, 하나를 다른 하나에 복사하는 것입니다.

mysql 명령어를 대량으로 실행하지 않고 어떻게 하면 좋을까요?(정확하게 체크하지 않으면 넘어질 것 같은 느낌!)이것은 Gulp's(제가 본 적이 있는) 또는 플러그인을 통해 실행할 수 있습니까?

WP Migrate DB Pro, BackupBuddy 의 기능을 통해 데이터를 앞뒤로 밀고 당기는 것을 말하는 것이 아닙니다.이것은 하나의 데이터베이스를 다른 데이터베이스로 교체하는 것이 아니라 통합입니다.

다른 개발자가 어떻게 이 문제를 해결할 수 있는지 알고 싶습니다!

파일 변경은 매우 간단하며, 데이터 변경이 있을 때 악몽의 원인이 됩니다.


WP Stage Coach는 머지를 실시하지만 로컬로 작업할 수 없습니다.작업해야 할 라이브 사이트에서 스테이징 사이트를 만듭니다.합병은 훌륭하지만 현지에서 일할 수 없다는 것은 치명적인 타격이다.

개발자들로부터 datahawk.io는 내가 원하는 것을 할 것이라고 들었는데, 출시일은 아직 정해지지 않았다.

Version Press가 필요한 기능을 수행할 수 있을 것 같습니다.

Version Press 스테이징

몇 가지 주의사항이 있습니다.아직 사용하지 않았기 때문에 효과를 보증할 수 없으며, 현재 얼리 액세스 중입니다.

중요: Live 데이터베이스에 로컬 데이터를 병합하기 전에 데이터베이스를 백업하십시오.

다음의 순서에 따라, 데이터의 대부분을 이행해, 라이브에 통합합니다.

  1. 로컬 사이트 툴의 백엔드에 있는wp->내보내기로 이동합니다.
  2. [ All content ]옵션 버튼을 선택합니다(기본적으로 선택되어 있지 않은 경우).
  3. 그러면 모든 기본 게시 유형 및 사용자 지정 게시 유형으로 구성된 모든 로컬 데이터가 포함된 XML 파일이 나타납니다.
  4. 이 XML 파일을 메모장++ 또는 임의의 편집기에서 열고 로컬 URL을 찾아 라이브 URL로 바꿉니다.
  5. 라이브 사이트에 접속하여 [Tools]-> [ Import ]의 XML을 Import 합니다.
  6. 파일(이미지)을 수동으로 업로드합니다.

이것에 의해, 로컬로부터 라이브에의 데이터의 비율이 높아집니다.

나머지 데이터는 커스텀스크립트를 작성해야 합니다.

위험 요인은 다음과 같습니다.

  1. 이미지를 Local에서 Live로 업로드하면 같은 이름의 이미지가 덮어씁니다.
  2. Wordpress는 이미지를 post_meta에 저장하여 이미지의 시리얼화된 데이터를 생성합니다.데이터베이스 업로드 시 주의해야 합니다.
  3. post_meta:post_type="attachment"는 이미지의 3차원 또는 4차원의 시리얼 데이터를 저장합니다.
  4. 데이터를 Import할 때 사용자의 사용자 이름 또는 전자 메일 ID를 동일하게 할 수 있습니다(또는 wp가 고유한 사용자 이름과 전자 메일을 확인하는 기능을 수행함).이러한 사용자는 Import되지 않습니다(가능할 수 있습니다).

내가 너라면 다음을 할 것이다(느리지만 성공할 가능성이 가장 높다).

먼저, 세 번째 데이터베이스를 어딘가에 설정합니다.SSD를 탑재한 강력한 서버를 몇 시간 동안 사용할 수 있기 때문에 클라우드 서비스가 이상적입니다.그 마력이 필요할 거야

번째째, 리로 .mysqldump.

mysqldump -u user -ppassword dbname | mysql -u root -ppass -h somecloud.db.internet

이제 DB #1의 전체 복사본을 확보했습니다.클라우드에서 데이터 스냅샷이 지원되는 경우 지금 스냅샷을 생성하십시오.

마지막 단계는 느리지만 확실하게 두 번째 DB에서 데이터를 선택하여 세 번째 DB에 쓰는 PHP 스크립트를 작성하는 것입니다.한 번에 한 장씩 녹음하고 싶어요.왜요? 음, 우리는 기록들 사이의 관계를 유지해야 합니다.그럼 댓글과 댓글을 남겨볼까요?DB #2에서 #1 게시물을 가져오면 DB #1에 이미 레코드가 있으므로 #1 기록을 유지할 수 없습니다.1번 게시물이 132번 게시물이 됩니다.즉, 투고 #1의 코멘트는 모두 투고 #132에 속하는 것으로 기재되어 있어야 합니다.또, 유저 ID도 변경되기 때문에, 이러한 투고를 작성한 유저의 레코드도 취득할 필요가 있습니다.

이에 대한 쉬운 해결책은 없지만 WP 구조는 그리 복잡하지 않습니다.데이터를 가져와 번역하기 위한 간단한 루프를 구축하는 것은 몇 시간 이상 걸리지 않습니다.

데이터베이스를하기 위해 NavicatPremium 기능을 있습니다

이것은 spring-xd를 사용하여 라이브로 실행할 수 있습니다.JDBC 스트림을 생성하여 하나의 db에서 데이터를 꺼내 다른 db에 삽입할 수 있습니다.(이는 스트리밍으로 기능하므로 환경을 방해하지 않습니다.)

가장 먼저 해야 할 일은 이행 스크립트 대신 복사 붙여넣기 데이터 엔트리를 수행하는 것이 더 쉬운지 확인하는 것입니다.경우에 따라 가장 좋은 답은 CMS 인터페이스를 사용하여 수동으로 수행하는 것입니다.이렇게 하면 기본 키 병합과 관련된 잠재적 충돌을 피할 수 있지만 게시물 작성자나 유사한 데이터의 참조를 주의해야 할 수도 있습니다.

수동으로 이행하는 것이 너무 많은 경우 스크립트를 작성하거나 이미 작성된 스크립트를 찾아야 합니다.아무것도 없다고 가정하면 이렇게 할 거야

이행을 실행하기 전에 항상 백업을 해 주세요.

1) 전송해야 할 목록을 작성합니다.사용자, 투고 등이 필요합니까?데이터베이스 테이블을 검색하여 목록에 추가합니다.

2) 데이터베이스 테이블에서 가능한 모든 외부 키가 새 데이터베이스로 병합되는 것을 기록합니다.예를들면,wp_posts 있다post_authorwp_users이행 중에는 특히 주의가 필요합니다.메뉴얼을 참조해 주세요.

3) 필요한 표와 참조가 파악되면 스크립트를 작성해야 합니다.먼저 다른 데이터베이스에 대해 새로운 내용을 확인합니다.가장 안전한 방법은 이 작업을 수동으로 수행하는 것입니다.그러나 테이블 행을 자동으로 일치시키는 방법에 대한 고유한 규칙을 만들 수 있습니다.확인하려고요$post1->post_content === $post2->post_content텍스트가 같아야 하는 경우.여기서 유일한 단점은 프라이머리/외부 키는 이러한 규칙에는 출입할 수 없다는 것입니다.

4) 새로운 콘텐츠를 어떻게 통합합니까?일반적으로 모든 기본 키는 새로운 콘텐츠에 대해 변경해야 합니다.게시 ID를 제외한 모든 것을 사용하여 새 데이터베이스에 삽입합니다.새로운 ID를 작성하기 위한 자동 인크리먼트가 있기 때문에 이전 ID는 필요 없습니다(스크립트 출력/디버깅에 사용할 필요가 없는 한).

5) 어려운 부분은 외부 키의 취급이다.이 프로세스는 이행할 예정인 내용에 따라 크게 달라집니다.어떤 외부 키가 어떤 (새로운) 프라이머리 키로 이동하는지 알아야 합니다.투고만을 이행하는 경우는, 유저 ID 를 유저 ID 로의 매핑에 하드 코드 할 필요가 있는 경우가 있습니다.post_author값을 바꾸려면 이 명령을 사용합니다.

그러나 일부 사용자도 마이그레이션해야 하므로 매핑에 대한 사용자 ID를 모를 경우 어떻게 해야 합니까?

여기서부터가 까다로워진다.사용자가 이미 존재하는지 확인하려면 먼저 병합 규칙을 정의해야 합니다.신규 사용자의 경우 새로 삽입된 사용자의 ID를 기록해야 합니다.모든 사용자가 이행되면post_author값은 새로 병합된 사용자를 참조할 때 교체해야 합니다.

6) 스크립트를 작성하고 테스트합니다!먼저 더미 데이터베이스에서 테스트합니다.또한 데이터베이스에서 사용하기 전에 백업을 생성하십시오.

CMS 간에 데이터를 이동할 때 ETL(Extract, Transform, Load) 프로세스와 유사한 작업을 수행했습니다.

스크립트를 작성하는 대신 Pentaho Data Integration(Kettle) 툴을 사용했습니다.

ETL의 개념은 매우 간단합니다.

  • 데이터를 추출합니다(예를 들어 하나의 데이터베이스에서).
  • 니즈에 맞는 변혁
  • 최종 수신처(두 번째 데이터베이스)에 로드합니다.

이 도구는 사용하기 쉽고 다양한 단계와 출력을 실험하여 데이터를 조사할 수 있습니다.올바른 ETL 프로세서를 설계하면 해당 데이터베이스를 통합할 수 있습니다.

mysql 명령어를 대량으로 실행하지 않고 어떻게 하면 좋을까요?

말도 안 돼요. 로컬 사이트와 웹 사이트가 동시에 실행 중이라면 어떻게 하면 콘텐츠가 다른 동일한 ID가 없는 것을 막을 수 있을까요?

mysql repplication을 사용하면 됩니다.다른 데이터베이스 mysql과의 Marge에 도움이 될 것 같습니다.

언급URL : https://stackoverflow.com/questions/35437824/how-to-merge-local-and-live-databases