최근에 서버를 이전하였습니다.
기존의 서버는
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 동일하게 변경하였습니다.
하지만 여전히 잘 되지가 않습니다....
어떻게 하면 좋을까요?
댓글 13
db_type : mysqli <-- 이게 정확한가요??
- XE는 UTF-8 전용입니다. EUC-KR 사용 안 한 지 10년도 넘었어요.
- 저 정도 범위 내에서는 PHP 및 DB 버전에 따른 차이도 없습니다. 단, 설정 문제일 수는 있어요.
- 데이터베이스를 읽어오지 못한다면서 또 데이터를 쓰지 못하는 상황이라는 것은 어떻게 아셨는지요? 에러메시지는 없던가요?
- files 폴더 및 모든 하위폴더와 파일의 퍼미션이 올바르게 되어 있는지 확인해 보세요. 특히 files/cache
설정 문제라함은 어떤 부분을 말씀하시는 건지 알려주실 수 있을까요?
글쓰기는 정상적으로 이뤄지고 있는데 가위바위보게임 모듈과 로또복권 모듈을 사용하고 해당 모듈의 테이블을 확인해보면 데이터가 아예 없는 것으로 나옵니다.
그런데 포인트 내역을 확인해보면 정상적으로 증가와 감소가 이뤄지고 있는 것을 알 수 있고요....
files 뿐만 아니라 xe가 설치되어 있는 디렉토리 전체에 707 권한과 사용하는 계정인 root가 소유자로 되게끔
명령어 사용해줬습니다.
혹시 root가 소유자로 되어 있는 것보다 www-data로 소유자가 되어 있는 것이 맞는지요?
퍼미션이 707로 되어 있다면 당장은 소유자가 누구로 되어 있든 상관이 없을 수도 있습니다만, 우분투라면 아파치가 www-data 권한으로 실행되니 chown -R 명령을 사용해서 모든 하위폴더의 소유권을 www-data로 맞춰주시면 도움이 됩니다. 그래야 나중에 쉬운설치 업데이트 같은 부분에서 문제가 생기지 않아요.
한번 더 시도해보도록 하겠습니다 ㅎㅎ
그리고 phpmyadmin에서 테이블 최적화나 테이블 복구를 실행했었는데
xe profiler에서 테이블을 인식을 하지 못하던데 phpmyadmin에서 테이블 최적화나 테이블 복구는 하면 안 되는 걸까요?
XE 쪽에서 인식을 못 한다면 테이블이 손상되었을 가능성이 큽니다.
순수하게 데이터만 추출하는 건 또 뭔가요? ㅎㅎ
문제가 있는 테이블은 확실히 죽여버리고 제대로 된 것으로 교체해야죠.
1. 새 DB에서 문제의 테이블을 완전히 삭제 (DROP)
2. 기존 DB에서 해당 테이블만 내보내기 (테이블별로 선택할 수 있습니다)
3. 내보내기한 파일을 새 DB에 들여오기
재설치를 해봤는데 아예 모듈이 작동을 못하네요....
권한과 소유자 모두 이상 없이 잘 반영했는데 문제가 있다면 서버 문제인 걸까요?
php나 mysql에 문제가 있다면 가능성 있는 부분이죠?
데이터 없이 그냥 실행해도 작동이 안된다면 서버 설정이 달라서 그럴 수도 있겠네요.
우선 새 서버의 MySQL 설정파일(my.cnf 또는 거기서 인클루드하는 파일)에서 sql_mode를 공백으로 설정한 후 MySQL을 재시작해 보세요. (sql_mode = 까지만 쓰고 뒤에 값을 입력하지 않으면 됩니다.) 대강 만든 모듈이라면 여기에 걸리기도 합니다.
그래도 안 되면 XE의 db.config.php에서 use_prepared_statements를 N으로 바꿔보세요.
말씀하신대로 sql_mode= 쓰자마자 해결되었습니다!
sql_mode가 어떤 역할로 해결이 된건지 알수 있을까요?
우분투 최신 버전에서 권장하는 MariaDB 10.0은 기존 어플리케이션들과의 호환성을 최대한 유지하기 위한 sql_mode 설정이 되어 있습니다만, 위의 버전 정보를 보니 MySQL 5.7을 쓰셨더라구요;;; 이거 요즘 거의 안 쓰는 물건인데;;; 그래서 혹시 기본값이 다르지 않을까 하는 생각이 들어 바꿔보라고 말씀드린 것입니다.