database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Columns 24241 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 24241
mysql upgrade -- 두번째(DB이전)
작성자
이경환(babocom)
작성일
2005-03-02 00:15:55
조회수
15,278

# 이전버전의 mysql 은 /usr/local/mysql-3.23 에 설치되었고 데이타폴더는 그아래 data 폴더에

# 새로 설치하는 mysql 은 /usr/local/mysql-4.0 이고 데이타는 그아래 data 폴더에 있는것으로 가정

 

새로 설치한 mysql 이 정상적으로 실행되는것을 확인하셨다면 이제 DB 를 이전해야 하겠죠..

물론 미리 간단한 테이블 하나를 이전해 보시고(dump -> restore) php 페이지도 하나 작성하여 입,출력 테스트까지 해보시기 바랍니다... (간단한 게시판 하나 만들어 보시면 되겠죠.. )

 

앞에서 제시한 순서중에 가장 시간을 요하는 작업이 DB 이전이 될겁니다. php 컴파일은 1분도 채 안걸릴테니까요.. Zend 설치도 금방이고...

 

DB 를 이전하는 방법이 MyISAM 의 경우(3.23.x 버전에선 아마 대부분 이것일듯..) 와 InnoDB 의 경우가 다릅니다.. 또한 3.23.x -> 4.0.x 의 경우와 4.0.x -> 4.1.x 의 경우도 다를겁니다..

저의경우 모든 테이블이 MyISAM 형식이었기 때문에 아주 쉽게 이전을 할 수 있었습니다.

MyISAM 의 경우는 서버중지후 그냥 압축해서 옮겨주셔도 정상적으로 이전이 됩니다.

InnoDB 의 경우 테이블스페이스는 단순 압축만으로 이전할 수 없기 때문에 Dump & Restore 방식을 쓰셔야 합니다.

 

아파치를 정지하시고 mysql 을 정지하셨다면 이전 mysql 의 datadir 을 통째로 압축하여 새 버전의 mysql 의 datadir 에 풀어주시면 이전작업은 완료입니다.

/bin/tar -czf mysql_data.tar.gz /usr/local/mysql-3.23/data (압축한후..)

/bin/mv mysql_data.tar.gz /usr/local/mysql-4.0/data (옮기고)

/bin/tar -xvzf mysql_data.tar.gz (압축을 풀면..)

그리고 사용자계정 mysql2 로 설치한 새 버전의 mysql 을 mysql 계정으로 사용하기 위해 새버전 mysql 폴더의 소유자를 모두 mysql 로 변경합니다.

/bin/chown -R mysql.mysql /usr/local/mysql-4.0

 

이제 DB 를 모두 옮겼고 소유자도 수정했으니 이제 mysql 유저로 새버전의 mysql 을 실행하면 됩니다.

./bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql-4.0 --datadir=/usr/local/mysql-4.0/data &

여기서 소켓과 포트 설정은 빠져있습니다. 이전을 했으니 이제 원래의 소켓과 포트를 그대로 사용하면 되겠죠..

 

DB 를 옮기고 주의하실것은 이전버전의 권한테이블(mysql database) 까지 함께 옮겼을 경우 mysql_fix_privilege_tables 스크립트를 실행하여 권한테이블을 수정하셔야 한다는 겁니다..

스크립트를 vi 로 열어보시면 제일 상단에 유저명, 경로, 포트 등등을 입력할 수 있게 되어있습니다.

그곳에 새로철치한 mysql 의 정보를 정확히 기입해주시면 별도 옵션없이 실행하셔도 됩니다.

mysql_fix_privilege_tables 스크립트는 서버가 실행되는 상태에서 실행하셔야 합니다.

./bin/mysql_fix_privilege_tables --basedir=/usr/local/mysql-4.0

(그래서 저의 경우는 권한테이블은 새로 생성하고 나머지 테이블들만 옮겼습니다.)

 

서버가 이상없이 실행되었다면 접속계정으로 접속하셔서 모두 이상없는지 확인하시기 바랍니다.

./bin/mysql -uxxx -p

mysql> status; (버전과 글자셋을 확인하시고..)

mysql> show databases; (데이타베이스를 확인하시고)

mysql> use xxx;

mysql> show tables; (테이블들을 확인하시고)

mysql> select * from samp_db limit 10; (몇개 데이타를 출력해 보세요.)

mysql> quit (이상없다면 종료)

이상이 없다면 이제 php 를 다시 컴파일하고 apache 를 재시작하면 됩니다.

 

3.23 버전에서 4.0 버전으로 변경하였다면 굳이 php 를 다시 컴파일할 필요는 없을겁니다.

이전에 php 컴파일시 --with-mysql=/usr/local/mysql 로 컴파일하셨다면 새로 설치한 mysql 을 /usr/local/mysql 로 링크시켜주고 apache 를 재시작하면 그대로 사용해도 됩니다.

 

저의경우는 php 버전도 업할 계획이었기 때문에 php 컴파일을 다시 했습니다.

php 컴파일시 먼저 make clean 명령으로 이전 설정을 초기화 해주시는게 좋습니다.

/usr/local/mysql 이란 링크로 사용할 수도 있지만 차후 또다른 버전을 설치하고 사용하는데 편리하게 하기 위해 /usr/local 아래에 버전별로 mysql-3.34 mysql-4.0 이런식으로 버전번호를 붙여 사용하는 것이 편할것 같은 생각에 php 컴파일시 --with-mysql=/usr/local/mysql-4.0 으로 컴파일을 하였습니다.

그러면 나중에 새버전을 설치하더라도 php 컴파일만 다시하면 될테니까요..

/usr/local/mysql 이라는 링크를 사용하거나 디렉토리명을 사용하면 다른 버전을 설치하더라도 php 의 디폴트가 이곳을 참조하기 때문에 반영되지 않을수도 있습니다.

 

php 컴파일이 이상없이 되고, Zend 설치까지 하셨으면 이제 apache 를 재시작하면 되겠죠..

그리고 웹페이지를 띄워 정상적으로 열리는지 확인하면 다된겁니다..

 

저의경우 이전작업이 처음이라 10분정도 소요됐는데요... 익숙해지면 2-3분 정도로도 될것 같네요..

그리고 두버전을 모두 띄워놓고 복제한 후에 구버전을 정지시키면 되지 않을까 하는 생각도 해봤는데

어차피 포트와 소켓의 문제가 있으니 한번쯤 정지시키고 재시작한는것은 피할수 없을것 같습니다.

그러니 가급적이면 정지시간을 짧게 하는것이 스킬이라고 할수 있겠네요.. ^^;;

 

저는 현재 4.0 버전으로 이전은 되었고 4.1 버전으로 이전하기 위해 준비하고 있는 중입니다.

현재는 두버전이 모두 띄워져 있는 상태이고 테이블도 옮겨봐서 테스트까지 다 한 상태입니다.

이제 옮기기만 하면 되는데... 요즘 귀찮아서 냅두고 있네요.. ㅋㅋ(새벽에 해야하니...)

 

4.0 에서 4.1로 이전할때는 변경되는것이 많기 때문에 주의할 점이 많습니다.

그것에 관해서는 다음장에서 차차 알려드리죠..

이 글에 대한 댓글이 총 1건 있습니다.

이전에 쓰던 php 4.3.10버젼에서 재 컴파일시 에러가 나서

php 4.4.1버젼으로 올려서 컴파일후 해결했습니다.

 

이전버전에서 make시에 아래와 같은 에러가 나더라구요

 

ext/mysql/php_mysql.lo: In function `zif_mysql_create_db':
/home2/src/php-4.3.10/ext/mysql/php_mysql.c:1160: undefined reference to `mysql_create_db'
ext/mysql/php_mysql.lo: In function `zif_mysql_drop_db':
/home2/src/php-4.3.10/ext/mysql/php_mysql.c:1202: undefined reference to `mysql_drop_db'
main/output.lo: In function `php_ob_init_named':
/home2/src/php-4.3.10/main/output.c:428: undefined reference to `php_ob_gzhandler_check'
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] 오류 1
[root@joshua php-4.3.10]#

mysql 3.X 버젼까지는  mysql C API 를 사용시 compile 옵션을 -lmysqlcient -lm  이렇게 주었는데여. mysql 4.X 버젼 부터는 -lmysqlclient -lz 로 해줘야 한다라고 해서

[root@joshua php-4.3.10]# CFLAGS="-L/DB/mysql4/lib -lmysqlclient -lz"
설정하고 다시 컴파일~~  커 동일한 에러~~

 

걍 버젼올리는게 속편할것 같아 올려서 했습니다.

 

혹시 동일한 에러 나시면 한번 버젼올려보세요

조정대(hosana)님이 2005-12-04 02:27:19에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
24502UTF8 환경으로 이전에 관해서... [1]
이경환
2005-10-05
15524
24452APM 에서 UTF-8 사용하기. [3]
백록화
2005-09-24
22447
24242mysql upgrade -- 세번째(4.1버전) [7]
이경환
2005-03-04
25202
24241mysql upgrade -- 두번째(DB이전) [1]
이경환
2005-03-02
15278
24240mysql upgrade -- 첫번째(준비작업)
이경환
2005-02-28
15020
242314.0 에 매치되는 4.1 글자셋 [1]
이경환
2005-08-12
11518
24199MySQL - Explain 정보보는법
이경환
2005-04-06
32195
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.066초, 이곳 서비스는
	PostgreSQL v9.6.2으로 자료를 관리합니다