WordPress 환경에서 Search-Replace-DB+Shell을 사용하여 운영 환경의 DB 동기화를 해결하는지 확인합니다!흐른다

wordpress는 CMS이기 때문에 관리 페이지에서 새로운 페이지를 추가하는 스타일입니다.
아메바와 Seessa 등 블로그 서비스와 마찬가지로 디자이너에게 투고를 의뢰할 수 있기 때문에 체계적인 사람은 게시 작업을 할 필요가 없다.
와!너무 좋아요!배치할 필요가 없어서 매우 쉽다.

운영 환경에 새 템플릿을 추가하려면 다음과 같이 하십시오.


새 템플릿을 추가할 때 페이지 수는 10.20입니다...디자인도 제각각이다.
이때 발표까지의 과정은 매우 길어졌다.

Wordpress 출시 완료까지의 절차


검증 환경에 운영 데이터베이스 및 템플릿 정보 포함
↓
DB 내의 사이트 URL을 인증 환경 URL로 변환하여 인증 환경 DB 가져오기
↓
검증 환경에서 디자인 템플릿 제작(디자이너 작업)
↓
운영 환경에 템플릿 업로드
↓
데이터베이스의 사이트 URL을 운영 URL로 변환하여 운영 데이터베이스 가져오기
↓
게시 완료

시스템 하우스 일이 많아요...


디자이너는 템플릿 제작만 완성하지만, 시스템하우스 씨가 준비하고 발표하는 작업은 심각합니다!
그리고 매번 이런 일을 하면 효율이 매우 떨어진다.

만약 이 점을 할 수 있다면 시스템 가게도 가벼워질 것이다

  • 운영 및 검증된 DB를 동기화합니다
  • 생산 및 검증된 템플릿과 이미지를 동기화합니다
  • 바로 공식과 검증의 동기화를 할 수 있다면 쉽다는 얘기다.
    이것을 만들 수 있는 물건이 있는지 찾아보니 몇 개가 있었다.

    WP에서 운영 환경을 동기화하는 방법


    Wordmove 사용: 난이도 ★★★☆


    Wordmove는 루비가 만든 도구로 Capistrano2를 기반으로 합니다.
    제가 뭘 할 수 있을까요?
  • uploads, themes,plugins 등은 부품 단위로 생산, 검증 환경을 동기화할 수 있다
  • 사이트 URL을 운영 환경 URL로 변환하여 운영 DB에 반영합니다
  • ※ 자세한 내용은 이쪽 기사를 참조하시기 바랍니다.
    http://qiita.com/akiko-pusu/items/43d87896a518233d9503
    이렇게 하면 문제가 해결된다!Q.E.D!DB 내 정렬된 웹 사이트 URL은 변환되지 않을 것으로 예상됩니다.

    Search-Iplace-DB에서 서열화된 DB 내용을 정확하게 개작하기: 난이도 ★☆☆☆


    사용자 정의 필드에 URL을 저장하면 내용이 정렬되어 데이터베이스에 저장됩니다.
    따라서 URL의 문자 수가 검증 및 운영 환경에 따라 잘못 바뀌면 PHP 오류가 발생합니다.
    PHP 오류가 발생한 예를 잘 바꾸지 못함↓
    서열화 전array('hoge.com')서열화 후a:1:{i:0;s:8:"hoge.com";}hoge.com은 staging입니다.hoge.unserialize 대신com을 사용하면...
    php > var_dump(unserialize('a:1:{i:0;s:8:"staging.hoge.com";}'));
    PHP Notice:  unserialize(): Error at offset 22 of 33 bytes in php shell code on line 1
    PHP Stack trace:
    PHP   1. {main}() php shell code:0
    PHP   2. unserialize('a:1:{i:0;s:8:"staging.hoge.com";}') php shell code:1
    bool(false)
    
    bool(false)이 돌아왔습니다!
    PHP 도구의 검색 - 데이터베이스를 복사합니다.
    다음 명령을 사용하여 DB의 URL을 한 번에 덮어씁니다.
    php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s='hoge.com' -replace='staging.hoge.com'
    
    아주 좋은 서열화된 URL도 정확하게 고칩니다!
    검증과 생산 중의 문자 수가 다르더라도 상응하는serialize 결과를 데이터베이스에 다시 저장할 수 있습니다.
    그러나 데이터베이스 내용을 직접 개작해야 하기 때문에 그 결과를 생산에 올려야 한다.
    또한 재작성 목표가 DB 검증인 경우 작업을 취소할 수도 있습니다...

    셸 + 검색 - 데이터베이스 복사 에서 데이터베이스 동기화를 한 번에 해결하는 명령:난이도 ★★★★


    Search-Reaplace-DB는 DB를 직접 덮어쓰기 때문에 검증 환경 DB의 덮어쓰기 결과를 생산 DB로 가져와야 합니다.
    이런 명령을 한 번에 내리는 방법은 껍데기를 채택해야 한다.어쩔 수 없다...
    ▶ 검증 환경에서 생산 환경으로 DB 가져오기 절차 ▼

    준비: 검색 다운로드 - 데이터베이스 복사


    git-hub에서 다음 파일을 다운로드하십시오.
    * https://raw.githubusercontent.com/interconnectit/Search-Replace-DB/master/srdb.class.php
    * https://raw.githubusercontent.com/interconnectit/Search-Replace-DB/master/srdb.cli.php

    검증에서 생산까지의 케이스 스크립트 내용


    wp-db-push.sh
    #!/bin/sh
    NOW=`date +"%Y%m%d_%H%M"`
    SEARCH=$1
    REPLACE=$2
    
    #dumpファイルの保存先
    BAK_LOCAL="/tmp/local.bk.$NOW.sql"
    BAK_REMOTE="/tmp/remote.bk.$NOW.sql"
    REPLACE="/tmp/replace.$NOW.sql"
    
    #検証環境のDBをバックアップ
    echo "mysqldump -uroot -phoge hoge_db > $BAK_LOCAL"
    mysqldump -uroot -phoge hoge_db > $BAK_LOCAL
    
    #ファイルがない場合は終了
    if [ ! -s $BAK_LOCAL ]; then
      echo "dump failed: check $BAK_LOCAL"
      exit
    fi
    
    #DB内容を書き換え
    echo "php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s=$SEARCH -r=$REPLACE"
    php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s=$SEARCH -r=$REPLACE
    
    #検証DBをdump
    echo "mysqldump -uroot -phoge hoge_db > $REPLACE"
    mysqldump -uroot -phoge hoge_db > $REPLACE
    
    #検証DBを元に戻す
    echo "mysql -uroot -phoge hoge_db < $BAK_LOCAL"
    mysql -uroot -phoge hoge_db < $BAK_LOCAL
    
    #ファイルがない場合はDBを元に戻して終了
    if [ ! -s $BAK_LOCAL ]; then
      echo "dump failed: check $REPLACE"
      echo "mysql -uroot -phoge hoge_db < $BAK_LOCAL"
      exit
    fi
    
    #本番DBに接続して、データをバックアップ(SSHで接続しない場合は-hを変えてください)
    echo "ssh [email protected] mysqldump -uroot -phoge -hlocalhost hoge_db > $BAK_REMOTE"
    ssh [email protected] mysqldump -uroot -phoge -hlocalhost hoge_db > $BAK_REMOTE
    
    #ファイルがない場合は終了
    if [ ! -s $BAK_REMOTE ]; then
      echo "dump failed: check $BAK_REMOTE"
      exit
    fi
    
    #本番環境に取り込む
    echo "ssh [email protected] mysql -uroot -phoge -hlocalhost hoge_db < $REPLACE"
    ssh [email protected] mysql -uroot -phoge -hlocalhost hoge_db < $REPLACE
    
    반대로 데이터베이스를 생산에서 검증된 케이스 스크립트로 도입하는 내용
    wp-db-pull.sh
    #!/bin/sh
    NOW=`date +"%Y%m%d_%H%M"`
    SEARCH=$1
    REPLACE=$2
    
    #dumpファイルの保存先
    BAK_LOCAL="/tmp/local.bk.$NOW.sql"
    BAK_REMOTE="/tmp/remote.bk.$NOW.sql"
    
    #検証環境のDBをバックアップ
    echo "mysqldump -uroot -phoge hoge_db > $BAK_LOCAL"
    mysqldump -uroot -phoge hoge_db > $BAK_LOCAL
    
    #ファイルがない場合は終了
    if [ ! -s $BAK_LOCAL ]; then
      echo "dump failed: check $BAK_LOCAL"
      exit
    fi
    
    #本番DBに接続して、データをダンプ(SSHで接続しない場合は-hを変えてください)
    echo "ssh [email protected] mysqldump -uroot -phoge -hlocalhost hoge_db > $BAK_REMOTE"
    ssh [email protected] mysqldump -uroot -phoge -hlocalhost hoge_db > $BAK_REMOTE
    
    #ファイルがない場合は終了
    if [ ! -s $BAK_REMOTE ]; then
      echo "dump failed: check $BAK_REMOTE"
      exit
    fi
    
    #検証DBに本番DBを取り込む
    echo "mysql -uroot -phoge hoge_db < $BAK_REMOTE"
    mysql -uroot -phoge hoge_db < $BAK_REMOTE
    
    #DB内容を書き換え
    echo "php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s=$SEARCH -r=$REPLACE"
    php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s=$SEARCH -r=$REPLACE
    
    이상입니다.
    총결산
  • 템플릿·이미지 동기화는 "Wordmove"입니다
  • DB는 "Shell+Search-Reape-DB"로 동기화됩니다
  • 나는 이런 운용을 통해 시스템점의 근무 시간을 줄일 수 있다고 생각한다.
    참고로 capistrano를 사용하여 wordpress를 배치할 때
    상술한 케이스를 함께 넣으면 행복해집니다.

    좋은 웹페이지 즐겨찾기