1 MySQL Casual #2
1
MySQL Casual#2
2
自己紹介
• id:oranie
• @oranie
• 渋谷の緑色のグループ会社で、主にサーバ側のなんか色々やる簡単なお仕事しています。
• study2studyという名前で、ミーハーに色々やる勉強会を不定期にやってます。
• 「カジュアル」な発表です。一例なので、多少の間違いはカジュアルに考えて下さい!
LTテーマ
MySQL5.0→5.5への
アップデートについて
アップデートについて
・アップデートのメリット(5.0→5.5)
・新機能が色々
・InnoDB周り性能アップ!!
・但し、デメリットもあるので、
実サービスで運用しているなら慎重に。
・アップデートすべきかどうかの見極めなどは、現在の使い方や、状況、システムの重要度などと鑑みて、詳しくは
鍵本 P471以降を見ましょう。
アップデートについて
・実サービスじゃなかったらガンガン上げて、実サービスにも反映しようぜ!
・僕はなんでアップデートした?
・サービスログの解析用DBで速い方が嬉しかった。
・元データも再取得が容易に可能+万が一でも多少の誤差も許せる解析+最悪サーバ落ちたらすぐ上げ直せばOK、などで性能重視でガンガンアップデート。
アップデート手法
・手法は公式RPMかソースかyumで。
・どれが良いかは今or好きな管理手法で決めて。
・どれにも一長一短はあるよね。
アップデート手法
次からは、
・CentOS5系で元々の5.0.7がインストールされている
・大元のサーバは一度mysql-serverをダウン出来る
という前提でremiレポジトリを使ってyumでお手軽にやる場合を想定。
それ以外の場合でインストール方法どうするの?とかは
鍵本P31以降を見ましょう。
5.0.7→5.1 アップデート手法
・データそのまま使うパターンならデータ互換性など踏み台の為5.1で一度起動してmysql_upgradeによるチェック+リペア。次に5.5に上げる。
・これは5.5に上げる為の5.1なので、別のマシンにあらかじめ入れておいて、無事5.5まで上がるのを確認してからやると楽&安全。
→周りにマシンが無い?EC2+S3使うと楽っすよ。
5.0.7→5.1 アップデート手法
・順番として5.0.7が入っているので、まず
・データバックアップ→データファイルコピー+dumpデータを別場所に。
コピーする手順は、 1.MySQL サーバーをシャットダウンし、エラーが発生していないことを確認してください。
2.すべてのデータファイルを (ibdata ファイルと .ibd ファイル) 安全な場所にコピーしてください。
3.すべての ib_logfile ファイルを安全な場所にコピーしてください。
4.my.cnf 設定ファイルを安全な場所にコピーしてください。
5.InnoDB テーブルのすべての .frm ファイルを安全な場所にコピーしてください。
全て公式リファレンスより。
mysqldumpは色々あるので省きます。鍵ほn(ry
アップデート・データ遷移イメージ図
MySQL 5.0.7 MySQL 5.1 MySQL 5.5
mysqldumpによる移行
mysql_upgradeによる移行
安全なアップデート手順イメージ図
実環境
MySQL 5.0.7→5.5アップデート対象DB
MySQL 5.1 MySQL 5.5
データ移行環境(AWSなど)
5.5に上げる踏み台
本番に移行する為のチェックDB
もっと安全(冗長?)なアップデート手順イメージ図
実環境
MySQL 5.0.7→5.5アップデート対象DB
MySQL 5.0→5.1
MySQL 5.1→5.5
データ移行環境(AWSなど)
5.0.7
5.1
5.1
5.5
5.0.7→5.1 アップデート手法
念のため5.0.7→5.1に行く手順の説明
・今のVerをアンインストール→公式RPMorソースインストール
※yumでは色々なレポジトリ見たんですが、
5.1配布している所が直近で見当たりませんでした。
・5.1でmy.cnfの設定を行い、起動後にmysql_upgradeを実行する。
# mysql_upgrade -u root -p
・多分エラーとかも起きる。こんな感じ。→
# mysql_upgrade -u root -pEnter password:Looking for 'mysql' as: mysqlLooking for 'mysqlcheck' as: mysqlcheckRunning 'mysqlcheck with default connection argumentsRunning 'mysqlcheck with default connection argumentsmysql.columns_priv OKmysql.db OKmysql.func OKmysql.help_categoryerror : Table upgrade required. Please do "REPAIR TABLE `help_category`" or dump/reload to fix it!mysql.help_keyworderror : Table upgrade required. Please do "REPAIR TABLE `help_keyword`" or dump/reload to fix it!mysql.help_relation OKmysql.help_topicerror : Table upgrade required. Please do "REPAIR TABLE `help_topic`" or dump/reload to fix it!mysql.host OKmysql.procerror : Table upgrade required. Please do "REPAIR TABLE `proc`" or dump/reload to fix it!mysql.procs_priv OKmysql.tables_priv OKmysql.time_zone OKmysql.time_zone_leap_second OKmysql.time_zone_nameerror : Table upgrade required. Please do "REPAIR TABLE `time_zone_name`" or dump/reload to fix it!mysql.time_zone_transition OKmysql.time_zone_transition_type OKmysql.user OKslow_log.LOG_ANALYZE_RESOURCEerror : Table rebuild required. Please do "ALTER TABLE `LOG_ANALYZE_RESOURCE` FORCE" or dump/reload to fix it!slow_log.LOG_ANALYZE_TOTAL_EVERY_TIMEerror : Table rebuild required. Please do "ALTER TABLE `LOG_ANALYZE_TOTAL_EVERY_TIME` FORCE" or dump/reload to fix it!slow_log.MASTER_CHANNELerror : Table rebuild required. Please do "ALTER TABLE `MASTER_CHANNEL` FORCE" or dump/reload to fix it!slow_log.log_table_historyerror : Table rebuild required. Please do "ALTER TABLE `log_table_history` FORCE" or dump/reload to fix it!
Repairing tablesmysql.help_category OKmysql.help_keyword OKmysql.help_topic OKmysql.proc OKmysql.time_zone_name OKRunning 'mysql_fix_privilege_tables'...OK
5.1アップデート手法
一部はmysql_upgradeだけでは解決しておらず、結局コマンドを実行するかdump取って入れ直ししろとの表示だった。
● でも指定されたコマンド打っても治らないテーブルもあった><
・なので、場合によっては初めからdump入れた方が早いかも。
・諸作業が終わったらmysql_checkを実行して、問題無いか確認する。
#mysqlcheck -h localhost -u root -p -a -o -Aな感じで。 (-a:テーブルを分析 -o:テーブルの最適化、-A:すべてのデータベース内のす
べてのテーブルをチェック )
実行すると
# mysqlcheck -h localhost -u root -p -a -o -A
Enter password:
mysql.columns_priv Table is already up to date
mysql.db OK
mysql.func Table is already up to date
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host Table is already up to date
mysql.proc Table is already up to date
mysql.procs_priv Table is already up to date
mysql.tables_priv Table is already up to date
mysql.time_zone Table is already up to date
mysql.time_zone_leap_second Table is already up to date
mysql.time_zone_name Table is already up to date
mysql.time_zone_transition Table is already up to date
mysql.time_zone_transition_type Table is already up to date
mysql.user OK
slow_log.LOG_ANALYZE_RESOURCE OK
slow_log.LOG_ANALYZE_TOTAL_EVERY_TIME OK
slow_log.MASTER_CHANNEL OK
slow_log.log_table_history OK
5.0.7→5.1 アップデート手法
・データ量が多かったらmysql_upgradeを繰り返すこの手法が良いかも。(ファイルコピーだけで割と済むので
・データ量が少ないなら素直にダンプの方が互換性高いはずなので効率的かも
– AWSとかで大量INSERT結構きつい
– mysql_upgradeによるTableのrepairとかcheckも結構時間掛かります><
– メモリに全部乗っかっていれば割と速かった。
– ので、この辺はケースバイケースで。
・次に5.1→5.5へ。これも念のため初めから5.5入った別マシンでやると良いと思う。安全第一( ゚Д゚)σ
5.1→5.5 アップデート手法
・まず5.5にアップデートする為、remiレポジトリを使ってyumによるアップデート。
GPGキーをインポート
# rpm -import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
リポジトリファイルを追加
# cd /etc/yum.repos.d# wget http://rpms.famillecollet.com/remi-enterprise.repo
でレポジトリの設定#yum update –enablerepo=remi mysql-server
mysql-serverを5.5に。
で、5.1と同じようにmysql_upgradeやる。
アップデート後の補足
・で、5.5インストールして起動しようとすると結構起動できないとかがあると思います。
→変わったor廃止になったオプションをmy.cnfに書いているとか。代表的なのは「default-character-set=utf8」とか
→ログ見てダメな設定をチクチク潰しましょう。※何が変わったかとかはsakaikさんのブログで日本語の解説一
覧で載っています!
http://d.hatena.ne.jp/sakaik/20100414/mysql533obsol
公式サイトには英語で一覧が。
http://dev.mysql.com/doc/refman/5.5/en/news-5-5-0.html
おまけ:mysql_upgradeコマンドについて
※公式リファレンス:http://dev.mysql.com/doc/refman/5.5/en/mysql-upgrade.htmlのコピペです。
--help :ヘルプ
--basedir=path:基準パス。MySQLがインストールされているディレクトリを指す。
--datadir=path:データ ディレクトリへのパス。
--debug-check:プログラムが終了する際、いくつかのデバッグ情報を出力する
--debug-info, -T:デバッグ情報とメモリとCPU使用率の統計プログラムの出力
--default-auth=plugin:使用するクライアント側の認証プラグイン。5.5.1から。
おまけ:mysql_upgradeコマンドについて②
--force:既にmysql_upgrade実行していても無視して実行する。(mysql_upgrade_infoに書かれている内容を無視する)
--plugin-dir=path:クライアント側の認証プラグインのディレクトリパス
--tmpdir=path, -t path:一時ファイルの作成に使用するディレクトリのパス名。(何の一時ファイルかは?
--upgrade-system-tables, -s:データテーブルはアップグレードしないで、システムテーブルをアップグレードする。
--user=user_name, -u user_name:ユーザ名
--verbose:冗長モード。 プログラムの動作についてさらに情報をプリントアウトする。
--write-binlog:バイナリログ有効モード。デフォルト設定。(逆に出したく無い時は--skip-write-binlog)
色々と参考にさせて頂いたサイト
MySQL公式サイト
「MySQL 5.5 アップデート」で検索して表示された全てのサイト
ありがとうございましたm(_ _)m
以上
発表終了
ありがとうございました!
m(_ _)m