DB/MySQL

MySQL 업그레이드

swhwang 2016. 5. 4. 01:17

MySQL 업그레이드
1.     공통
작업전의 기본, 백업을 한다.
#mysqldump –p –all-databases > ./all-data_20130523.sql
#cp –p /etc/my.cnffff /etc/my.cnfff_20130523_old

http://dev.mysql.com/downloads/mysql/#downloads로부터 해당하는 OS용의 MySQL-5.5최신 패키지를 취득한다.
※1 FreeBSD우ㅏportsを介して導入する場合は不要。
※2 CentOSの場合は、次のrpmパッケージを取得する(i86マシン+64bit OSの場合)。
•     MySQL-server-5.5.18-1.linux2.6.x86_64.rpm
•     MySQL-client-5.5.18-1.linux2.6.x86_64.rpm
•     MySQL-devel-5.5.18-1.linux2.6.x86_64.rpm
•     MySQL-shared-compat-5.5.18-1.linux2.6.x86_64.rpm
※※ remiリポジトリを使ってyumで導入する方法もある。(参照: Install MySQL 5.5.18 on Fedora 16/15, CentOS/Red Hat (RHEL) 6/5.7)

옵션파일(/etc/my.cnfff)의 일부를 수정한다.
다음의 옵션지정행은 커맨트아웃한다.
[mysqld]
character-set-server=utf8mb4
#default-character-set=utf8
collation-server=utf8mb4_general_ci
#collation-server=utf8_general_ci
#log-long-format
2.데이터베이스를 정지한다.
# /etc/init.d/mysql stop

2-1.기존 데이터베이스의 관련 파일군을 삭제한다.
# yum remove mysql-server.x86_64 mysql-devel.x86_64
perl-DBD-MySQL.x86_64등의 MySQL드라이버가 삭제된 경우는、새로운 데이터베이스도입시에새롭게# yum localinstall perl-DBD-MySQL-4.014-1.el5.rfx.x86_64.rpm  도입해서 고칠것。
# yum localinstall perl-DBD-MySQL-4.014-1.el5.rfx.x86_64.rpm
데이터베이스를 기동한다.
#/etc/init.d/mysql start
Oracle提供のrpmパッケージの場合、起動ファイルがCentOSのbaseリポジトリ配布版と異なる名前(/etc/rc.d/initd/mysql)で作成されるので、必要に応じて、名前を変更するなどの対応を行う。
Oracleのrpmパッケージでは、導入時に自動起動設定が削除されるので、あらためて自動設定を行う必要がある。
# /sbin/chkconfig --add mysql
# /sbin/chkconfig mysql on
# /sbin/chkconfig --list mysql
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off

3.FreeBSD-7-STABLE
/usr/local/etc/pkg_tools.confにビルドオプションを追記(太字部)する。
MAKE_ARGS = {
'databases/mysql41-client' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'databases/mysql41-server' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'databases/mysql50-client' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'databases/mysql50-server' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'databases/mysql51-client' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'databases/mysql51-server' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'databases/mysql55-client' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'databases/mysql55-server' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
'editors/openoffice.org-2' => 'LOCALIZED_LANG=alllangs',
'*' => 'WITHOUT_IPV6=yes',
}

데이터베이스를 정지한다。
# /usr/local/etc/rc.d/mysql-server stop

구버젼의MySQL관련 모듈을 ports시스템을 사용해서 삭제한다,
# pkg_deinstall -fv mysql-client-5.1.60 mysql-server-5.1.60 p5-DBD-mysql51-4.019

새버젼의MySQL관련모듈을ports시스템을 사용해서 도입한다.
# portinstall -vp databases/mysql55-server databases/p5-DBD-mysql55

데이터베이스를 기동한다.。
# /usr/local/etc/rc.d/mysql-server start

4.공통
mysql_upgrade로 테이블포맷의 업그레이드를 한다.
# mysql_upgrade -p
Enter password:
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Running 'mysqlcheck with default connection arguments
books.booklist
error    : Table upgrade required. Please do "REPAIR TABLE `booklist`" or dump/reload to fix it!
epco_advisory.Company
error    : Table upgrade required. Please do "REPAIR TABLE `Company`" or dump/reload to fix it!
events.Event                                       OK
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.help_category
error    : Table upgrade required. Please do "REPAIR TABLE `help_category`" or dump/reload to fix it!
mysql.help_keyword
error    : Table upgrade required. Please do "REPAIR TABLE `help_keyword`" or dump/reload to fix it!
mysql.help_relation                                OK
mysql.help_topic
error    : Table upgrade required. Please do "REPAIR TABLE `help_topic`" or dump/reload to fix it!
mysql.host                                         OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc
error    : Table upgrade required. Please do "REPAIR TABLE `proc`" or dump/reload to fix it!
mysql.procs_priv                                   OK
mysql.servers                                      OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name
error    : Table upgrade required. Please do "REPAIR TABLE `time_zone_name`" or dump/reload to fix it!
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
test.userpref                                      OK
test_inno.data                                     OK

Repairing tables
books.booklist                                     OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_topic                                   OK
mysql.proc                                         OK
mysql.time_zone_name                               OK
Running 'mysql_fix_privilege_tables'...
OK
#

apache等、MySQLを参照するアプリケーション動作させている場合は、それぞれをリスタートさせる。

5.プログラム中SQLの一部修正
テーブルロックを行っている場合で、プログラム中でviewを参照している時、LOCK TABLESにviewの定義も加えないと、実行時エラーになるようである。
また、筆者の環境の一つ(Oracle版rpmパッケージ)では、クライアント側のキャラクタ設定コマンドSET NAMES eucjpmsを、SET NAMES ujisに変更しなければならなかった。
これはビルドオプションの関係で、eucjpmsが組み込まれずに構築された為と考えられる。キャラクタセットの定義上、eucjpmsは変らず存在する(参照: 9.1.14. Character Sets and Collations That MySQL Supports)。
MySQLにログインした後、次の様にすると、その環境で使用可能なキャラクタセットが確認できる。
mysql> SHOW CHARACTER SET;
(12月5日追記)
と、書いておきながら、調べてみると、Oracle版パッケージでも、ちゃんとeucjpmsは組み込まれていた。
してみると、Perl-DBD-mysqlドライバ辺りが原因かもしれない。
(12月11日追記)
perl-DBD-MySQL-4.014-1.el5.rfx.x86_64.rpmを導入した所、eucjpmsの障害は解消した。やはり、ドライバが古いせいだった様である。
ソースからビルドしたい方はこちらのサイトを参考にされたい。
データベースをアップグレードした直後にCGIがエラーになった場合は、上記の点を確認して欲しい。
カテゴリ:

•     CentOS,

•     FreeBSD,

•     Web-CGI,

•     アプリケーション
タグ: