최근에 서버를 이전하였습니다.

기존의 서버는 

realpath : (생략)
location : ko
package : XE
host : (생략)
app : Apache/2.2.15 (CentOS)
xe_version : 1.8.43
php : 5.6.30
db_type : mysqli

 

  • 서버: Localhost via UNIX socket
  • 서버 타입: MySQL
  • 서버 버전: 5.5.56-log - MySQL Community Server (GPL)
  • 제품 버전: 10
  • 사용자: (생략)@localhost
  • 서버 문자셋: UTF-8 Unicode (utf8)

 

현재서버는 

realpath : (생략)
location : ko
package : XE
host : (생략)
app : Apache/2.4.18 (Ubuntu)
xe_version : 1.8.43
php : 5.6.31-4+ubuntu16.04.1+deb.sury.org+4
db_type : mysqli

 

  • 서버: Localhost via UNIX socket
  • 서버 타입: MySQL
  • 서버 버전: 5.7.19-0ubuntu0.16.04.1 - (Ubuntu)
  • 제품 버전: 10
  • 사용자: (생략)@localhost
  • 서버 문자셋: UTF-8 Unicode (utf8)

위와 같습니다.

이전하면서 파일들과 데이터베이스를 정상적으로 이전하였는데 가위바위보게임 모듈과 로또복권모듈이

작동은 하나 데이터베이스를 읽어오지 못해 확인해보니 데이터베이스에 데이터를 쓰지 못하는 상황이었습니다. 

확인해보니 기존 서버랑 비교했을 때 MySQL 기본 엔진이 InnoDB라 MyISAM으로 변경하고

데이터 정렬 방식도  euckr_korean_ci  동일하게 변경하였습니다.

하지만 여전히 잘 되지가 않습니다....

어떻게 하면 좋을까요?

  • profile
    저는 서버에 관해 잘 모르는데요. 혹시나 해서요.
    db_type : mysqli <-- 이게 정확한가요??
  • profile profile
    넵 이전하면서 그 부분은 손 안 대고 계정 정보만 수정했어요!
  • profile

    - XE는 UTF-8 전용입니다. EUC-KR 사용 안 한 지 10년도 넘었어요.

    - 저 정도 범위 내에서는 PHP 및 DB 버전에 따른 차이도 없습니다. 단, 설정 문제일 수는 있어요.

    - 데이터베이스를 읽어오지 못한다면서 또 데이터를 쓰지 못하는 상황이라는 것은 어떻게 아셨는지요? 에러메시지는 없던가요?

    - files 폴더 및 모든 하위폴더와 파일의 퍼미션이 올바르게 되어 있는지 확인해 보세요. 특히 files/cache

  • profile profile
    데이터베이스 초보다보니 무지했군요....
    설정 문제라함은 어떤 부분을 말씀하시는 건지 알려주실 수 있을까요?
    글쓰기는 정상적으로 이뤄지고 있는데 가위바위보게임 모듈과 로또복권 모듈을 사용하고 해당 모듈의 테이블을 확인해보면 데이터가 아예 없는 것으로 나옵니다.
    그런데 포인트 내역을 확인해보면 정상적으로 증가와 감소가 이뤄지고 있는 것을 알 수 있고요....
    files 뿐만 아니라 xe가 설치되어 있는 디렉토리 전체에 707 권한과 사용하는 계정인 root가 소유자로 되게끔
    명령어 사용해줬습니다.
    혹시 root가 소유자로 되어 있는 것보다 www-data로 소유자가 되어 있는 것이 맞는지요?
  • profile profile
    이전하면서 해당 테이블의 데이터가 누락되었거나 손상되었을 수도 있습니다. 게임 관련 모듈들은 다량의 데이터가 누적되기 때문에 누락되거나 손상되기 쉬워요. 포인트는 다른 테이블일 테니 상관이 없고요. phpmyadmin이나 mysqldump를 사용해서 문제가 되는 테이블만 각각 따로 백업하여 새 서버에 복원해 보세요.

    퍼미션이 707로 되어 있다면 당장은 소유자가 누구로 되어 있든 상관이 없을 수도 있습니다만, 우분투라면 아파치가 www-data 권한으로 실행되니 chown -R 명령을 사용해서 모든 하위폴더의 소유권을 www-data로 맞춰주시면 도움이 됩니다. 그래야 나중에 쉬운설치 업데이트 같은 부분에서 문제가 생기지 않아요.
  • profile profile
    자세히 잘 알려주셔서 감사합니다!
    한번 더 시도해보도록 하겠습니다 ㅎㅎ
    그리고 phpmyadmin에서 테이블 최적화나 테이블 복구를 실행했었는데
    xe profiler에서 테이블을 인식을 하지 못하던데 phpmyadmin에서 테이블 최적화나 테이블 복구는 하면 안 되는 걸까요?
  • profile profile
    phpmyadmin에서 최적화 또는 복구하는 것과 프로파일러 모듈은 상관이 없습니다.
    XE 쪽에서 인식을 못 한다면 테이블이 손상되었을 가능성이 큽니다.
  • profile profile
    데이터베이스에서 순수한 데이터만 추출해서 새 데이터베이스에 이식하면 정상적으로 작동할까요?
  • profile profile

    순수하게 데이터만 추출하는 건 또 뭔가요? ㅎㅎ
    문제가 있는 테이블은 확실히 죽여버리고 제대로 된 것으로 교체해야죠.


    1. 새 DB에서 문제의 테이블을 완전히 삭제 (DROP)
    2. 기존 DB에서 해당 테이블만 내보내기 (테이블별로 선택할 수 있습니다)
    3. 내보내기한 파일을 새 DB에 들여오기

  • profile profile
    그렇게 중요한 데이터는 아니여서 해당 테이블도 확실하게 삭제하고 모듈도 완전히 삭제한 후에
    재설치를 해봤는데 아예 모듈이 작동을 못하네요....
    권한과 소유자 모두 이상 없이 잘 반영했는데 문제가 있다면 서버 문제인 걸까요?
    php나 mysql에 문제가 있다면 가능성 있는 부분이죠?
  • profile profile

    데이터 없이 그냥 실행해도 작동이 안된다면 서버 설정이 달라서 그럴 수도 있겠네요.

    우선 새 서버의 MySQL 설정파일(my.cnf 또는 거기서 인클루드하는 파일)에서 sql_mode를 공백으로 설정한 후 MySQL을 재시작해 보세요. (sql_mode = 까지만 쓰고 뒤에 값을 입력하지 않으면 됩니다.) 대강 만든 모듈이라면 여기에 걸리기도 합니다.

    그래도 안 되면 XE의 db.config.php에서 use_prepared_statements를 N으로 바꿔보세요.

  • profile profile
    정말 감사합니다!
    말씀하신대로 sql_mode= 쓰자마자 해결되었습니다!
    sql_mode가 어떤 역할로 해결이 된건지 알수 있을까요?
  • profile profile
    MySQL은 원래 사용자를 봐주는 편이기 때문에 모듈에서 좀 엉뚱한 데이터를 보내도 적당히 저장이 되어요. 선언한 필드 길이보다 더 많은 데이터를 저장하려고 해도 적당히 자르고 저장한다거나... 그런데 이걸 오히려 불편해하는 사람도 있기 때문에 sql_mode 설정을 사용해서 허용되는 범위를 제한할 수 있어요.

    우분투 최신 버전에서 권장하는 MariaDB 10.0은 기존 어플리케이션들과의 호환성을 최대한 유지하기 위한 sql_mode 설정이 되어 있습니다만, 위의 버전 정보를 보니 MySQL 5.7을 쓰셨더라구요;;; 이거 요즘 거의 안 쓰는 물건인데;;; 그래서 혹시 기본값이 다르지 않을까 하는 생각이 들어 바꿔보라고 말씀드린 것입니다.