TIP게시판

제목 INNODB 사용가능 여부 확인
글쓴이 배강민 작성시각 2016/10/09 14:29:15
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 11787   RSS
배강민

TapBBS 설치할때 mysql_ 함수들로 되어있어서, PHP7 지원때문에 수정하는 과정에서

tapbbs.com 서버를 PHP7, MariaDB로 바꾸면서 진행했는데,

INNODB를 사용할 수 있느냐의 체크 부분이 MariaDB 특정버젼만의 문제인지, MySql 특정버젼도인지까지는 명화친 않지만, 

동작하지 않아서 수정하면서 공유해봅니다.

AS-IS

                $query  = $mysqli->query('SHOW VARIABLES LIKE \'have_innodb\'');
                $result = $query->fetch_object();
                if($result && strtoupper($result->Value) == 'YES')
                {
                    $return['innodb'] = TRUE;
                }

TO-BE

                $query = @$mysqli->query('CREATE TABLE test_innodb_tapbbs_install (test_innodb_tapbbs_install TINYINT) ENGINE = INNODB');
                $query = $mysqli->query('SHOW TABLE STATUS WHERE name = \'test_innodb_tapbbs_install\'');
                $result = $query->fetch_object();
                if(!empty($result) && strtoupper($result->Engine) == 'INNODB') {
                    $return['innodb'] = TRUE;
                }
                $query = $mysqli->query('DROP TABLE test_innodb_tapbbs_install');

기존에는 SHOW VARIABLES 로 찾을 수가 있었는데,

위에도 언급했지만, DB 종류 또는 버젼에 따라서 저 값이 없는 듯 하더군요.

innodb_* 로 시작하는 많은 값이 있지만, INNODB 를 사용하다가 껏을 경우에도 남아있는듯하더군요.

그래서 어쩌나어쩌나 하다가, 

MyISAM 에서 CREATE TABLE 할때 엔진을 INNODB 로하고 하면 에러를 뱉겠지! 해서 해봤는데,

에러를 안뱉고, 그냥 MyISAM 으로 만들어져버리더군요.

그럼 그냥 INNODB로 무조건 만들어버려도 되지않을까?도 생각했다가, 혹 이도 어떤 설정에 따라서 에러를 뱉을 수도 있지 않나하는 확인되지 않은 의심이 생기더군요.

그래서, 어쩌나하다가 phpMyAdmin을 보니, 테이블별로 엔진값이 표기되더군요. 그렇다면 일반 웹호스팅에서 대부분 phpMyAdmin을 사용하니, 방법이 있겠구나해서 뒤져보니

SHOW TABLE STATUS 으로 가져올 수 있겠더라고요.

해서 위의 방식으로 해서 좀 전에 릴리즈했습니다.

릴리즈하면서, 공유해도 되겠다싶어서 해봅니당~

 

 다음글 Laravel의 Eloquent를 Codeigniter... (4)
 이전글 폼 전송후 뒤로가기를 막는 또 다른 방법 (4)

댓글

변종원(웅파) / 2016/10/11 09:36:53 / 추천 0

 

늘푸른83 / 2016/10/11 09:39:19 / 추천 0
이런 방법이!! 고민하신 흔적이 물씬 묻어납니다 감사드려요~!!