拡張され続ける InnoDB のデータファイルのサイズを小さくする方法 2006-07-07-2: [MySQL] MySQL でトランザクションを可能にするストレージエンジンとして InnoDB があります. InnoDB のデータファイルは,MyISAM テーブルと異なって,デフォルトでは ibdata1 というファイルにデータが蓄積されていくとこになります. MySQL の datadir に自動拡張する 10 MB の ibdata1 ファイルが 1 つと、5 MB の ib_logfile ログファイルが 2 つ作成されます - 7.5.3. InnoDB 起動オプション http://dev.mysql.com/doc/refman/4.1/ja/innodb-start.html この ibdata1 は,大量のデータを追加していくと,自動的にサイズを拡張していきます. ただ
前回テーブルスペースについて調べてみた後に、 運用中のサーバーの設定をやファイルを確認してみたら・・・innodb_file_per_tableが使われていない!!!:(;゙゚'ω゚'): という事なので、早速設定の方を試してみましたワッショイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワッショイ ■手順1.現状のibdata1のサイズの確認をしてみる # ls -alt /var/lib/mysql/|grep ib -rw-rw---- 1 mysql mysql 277899902976 11月 10 16:16 2012 ibdata1 -rw-rw---- 1 mysql mysql 5242880 4月 16 15:06 2012 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 4月 6 12:05 2012 ib_logfile1 2778
ハマってなんとか解決したことや、現状困ったりしていることを書いてみる。 前置き 対象のデータ(現在1テーブル)は、約1億レコード、50G。引き続き膨張していくことが予想される。 今はmyisamで運用。更新処理が非常に高負荷。しかもロックが発生するため、オンライン中の更新ができない。1日1回新旧のテーブルを置き換えることで更新。 目指すところは、参照のパフォーマンスを落とさずにリアルタイム更新。次の方向で検証中。 まずテーブルを参照時の条件に沿う形で分割。さらに更新する単位でパーティショニング。これにより参照&更新のパフォーマンスアップを狙う。 myisamからinnodbにすることでロックなしでオンライン中の更新を実現にする。 検証環境 OS: CentOS 5.5 MySQL: 5.5.8 サーバの搭載メモリ: 32G ibdata1、大きくなり過ぎ! myisamと違ってinnodb
ibdata1が肥大化してDISKを圧迫していたので縮小を試みた。 手順としては... mysqldumpコマンドでdumpを取得 Databaseをdrop mysql停止 ibdata1及びib_logfile* の削除 my.cnfを修正 mysql起動 dumpファイルのインポート 実際の作業手順 まずはmysqldumpコマンドでフルダンプを取得します。 # mysqldump -u root --all-databases > /tmp/all-dump.sql フルダンプが完了したらDBをドロップします。 数が多いので簡単なスクリプトを作り実行しました。 #!/bin/bash for DB_NAME in $(mysql -uroot -B -N -e "show databases;" | egrep -v 'test|mysql|information_schema')
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く