레이블이 mysql업그레이드인 게시물을 표시합니다. 모든 게시물 표시
레이블이 mysql업그레이드인 게시물을 표시합니다. 모든 게시물 표시

2008년 11월 25일 화요일

MySQL의 업그레이드

MySQL의 업그레이드는 단순하다.  순서는 아래와 같다.
1. MySQL서버를 정지한다.
2.바이너리를 교체한다. 
3.메이저 버전업의 경우에는 mysql_fix_privilege_tables 명령어(또는 mysql_upgrade명령어)를 실행한다. 
4.replication이나 NDB를 사용하고 있는 경우에는 전 서버의 버전을 맞추어놓는다. 

mysql_fix_privilege_tables명령어 옵션
 --verbose 상세표시.  이것을 붙여서 사용하는 것을 추천한다.  붙이지 않으면 변경되었나 확인불가
 --bindir= MySQL명령어위치 
 --basedir= MySQL인스톨 디렉토리의 지정
 --user= MySQL서버에 접속할 때 사용하는 사용자명
 --password= MySQL서버에 접속할 때 사용하는 패스워드
 --host= MySQL서버 지정
 --port= MySQL서버 포트 지정
 --socket= MySQL서버의 소켓파일 지정
 --database= 변경하는 데이터베이스 지정. 보통은 mysql  (이 옵션을 사용하는 경우는 드물듯.)
 --sql 메세지에는 SQL문장만 표시
 --no-defaults  my.cnf무시.  반드시 처음에 오는 인수여야한다. 
 --defaults-file= 지정한 my.cnf만을 읽어들임. 반드시 처음에 오는 인수여야한다. 
 --defaults-extra-file=  지정한 my.cnf을 추가해서 읽어들임.  반드시 처음에 오는 인수여야한다. 

위의 명령어를 쓸 때는 아래의 내용을 주의해야 한다. 
  1. my.cnf [mysql_install_db]그룹을 읽어들인다. 
  2. my.cnf [mysql_fix_privilege_tables]그룹을 읽어들인다.
  3. mysql, my_print_defaults 명령어를 호출한다.  (basedir, bindir를 단서로 찾는다)
  4. mysql_fix_privilege_tables.sql파일을 호출한다. (basedir를 단서로 찾는다)
  5. mysql_fix_privilege_tables.sql파일은 보통 share/mysql/디렉토리에 존재한다. (sql문이 있다.)

이 밖에 주의해야 할 사항은 버전간의 언어처리나 미묘한 Storage Engine의 변경이다. 

윈도우즈에 있어서 mysql_fix_privilege_tables
 mysql_fix_privilege_tables은 쉘 스크립트이다.  따라서 윈도우즈에서는 동작하지 않는다. 
윈도우즈에서는 SQL문을 실행해서 권한 테이블을 변경한다. 
   
  윈도우즈에서 MySQL업그레이드 
 dos>cd c:\mysql
 dos>bin\mysql --force mysql <>

Storage Engine변경에 있어서 주의할점
 마이너 버전업의 경우에는 미묘하게 Storage Engine에 수정이 가해진 경우가 있다. 
현재 아래의 내용을 주의.
   
   4.1이하에서 5.0이상으로 변경하는 경우
 1.TEXT필드 인덱스가 바뀌었다.
    >CHECK TABLE [FOR UPGRADE]를 실행해서 에러가 나오는 지 확인(에러가 없는 경우도 있다. )
    >에러가 나오면  MyISAM테이블의 경우 REPAIR TABLE를 실행.  InnoDB테이블의 경우에는 테이블 데이터의 dump와 import를 실시

 2.DECIMAL 내부처리가 바뀌었다.
    >CHECK TABLE[FOR UPGRADE]를 실행해서 에러가 나오는 지 확인.

 3.MyISAM테이블의 RAID옵션이 없어졌다. 
    >테이블 데이터를 dump한 다음에 업그레이드 그리고 데이터를 import한다. 

mysql_upgrade명령어/mysqlcheck 명령어
 MySQL 5.0.19부터 mysql_upgrade라는 명령어가 추가되었다.(5.0.19 ~5.0.22는 쉘 스크립트, 5.0.23부터는 c로 작성되었다.)   이것은 내부에서 다음과 같은 처리를 하는 명령어이다. 

 mysql_upgrade명령어의 내부처리
shell$> mysqlcheck --check-upgrade --all-databases --auto-repair
shell$> mysql_fix_privilege_tables --silent 

mysqlcheck옵션은 다음과 같다. 
1. --check-upgrade
      CHECK TABLE FOR UPGRADE를 실행(FOR UPGRADE는 MySQL 5.0.19에서 추가됨)
          >MySQL 4.1과 5.0에서는 InnoDB, MyISAM에서 TEXT 필드의 인덱스순서를 확인한다. 
          >MySQL 5.0.3과 5.0.5에서는 DECIMAL 저장방식이 바뀌었으므로 확인한다. 

2. --auto-repaire
       테이블 파손의 경우에 REPAIR TABLE를 실행한다. 

MySQL 4.1에서 5.0이상으로 업그레이드 할 경우에는 mysql_upgrade명령어를 실행하면 되는 것로 되어있다.  또 mysql_upgrade는 my.cnf에서의 [mysql_upgrade]그룹을 읽어들이는 것을 주의하길 바란다. 
MySQL 5.0.24/5.1.12-beta의 경우는 mysql_upgrade종료시 데이터 디렉토리에 mysql_upgrade_info라는 파일이 생성된다. 따라서 데이터 디렉토리에 대한 작성권한을 가진 계정으로 mysql_upgrade를 실행해야한다.