MySQL 업그레이드
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,
• アプリケーション
タグ: