Home

技術系のメモと日々の雑感

ibdata1 のサイズを減らす手順

つい最近知ったんだけど、MySQL のソースに付いている my.cnf のひな型では innodb_data_file_path に autoextend が付いているので、このまま使いつづけると ibdata1 のサイズがどんどん大きくなっていくんだね。
とあるサーバで 30GB を越えていて焦った〜。
サイズを増やさないようにする設定は調べたらすぐに分かったんだけど、実際にやってみると引っかかりどころが色々とあったので手順をまとめておく。
検証に使った MySQL は 5.0 系だ。
先に書いておくと、my.cnf に

innodb_data_file_path = ibdata1:1G
innodb_file_per_table

といった設定を入れて mysqld をリスタートするだけでは ibdata1 のサイズは変わらないし、「.ibd」ファイルも作られなかった。
しかも、このとき mysqld はうまく動いているように見えるんだけど、ログに次のようなエラーが出力されるから、実はマズいことになっている。

InnoDB: Error: data file ./ibdata1 is of a different size
InnoDB: 386048 pages (rounded down to MB)
InnoDB: than specified in the .cnf file 655360 pages!
InnoDB: Could not open or create data files.


さて、前置きが長くなったけど手順は次の通りだ。

1.mysqldump --all-databases --single-transaction といった風にダンプを取る
2.InnoDB を使用しているテーブルをすべて削除
    ※drop database した方が分かりやすいかも
3.mysqld を停止
4.データディレクトリの中の ibdata1、ib_logfile0、ib_logfile1 を削除
5.上に書いた2行を my.cnf の [mysqld] セクションに追加
    ※この例では ibdata1 のサイズが 1GB になる
6.mysqld を起動
7.ダンプをリストア

そういえば、innodb_data_file_path で大きめのサイズを指定した場合、mysqld を起動したときに

# /etc/rc.d/init.d/mysql start
Starting MySQL...................................      [Failed]

という風にエラーになることがあるけど、これは ibdata1 ができあがるまでに時間がかかってタイムアウトしているだけで、実際には mysqld は正常に起動しているようだ。
この動作が分かってなくて何度もやり直してしまった。
ついでにうまくいったときのログも付けておく。

InnoDB: The first specified data file ./ibdata1 did not exist:
InnoDB: a new database to be created!
090703 17:17:51 InnoDB: Setting file ./ibdata1 size to 1024 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200 300 400 500 600 700 800 900 1000
090703 17:18:29 InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
090703 17:18:30 InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
090703 17:18:30 InnoDB: Started; log sequence number 0 0
090703 17:18:31 [Note] /usr/local/libexec/mysqld: ready for connections.
Version: 'X.X.XX' socket: '/tmp/mysql.sock' port: 3306 Source distribution

この機会にログをマメにチェックするクセをつけよう・・・。

この記事に対するトラックバック

この記事のトラックバックURL

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/16(月) 02:02:27

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/10(火) 08:46:22

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/08(日) 16:47:41

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/05(木) 12:53:00

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/05(木) 10:02:29

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/29(金) 05:23:52

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/27(水) 23:10:06

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/16(土) 03:32:41

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/15(金) 23:27:12

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/15(金) 05:34:06

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/15(金) 01:34:07

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/13(水) 06:09:46

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/13(水) 01:09:14

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/11(月) 14:39:12

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/07(木) 09:35:18

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/07(木) 02:07:20

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/06(水) 19:54:13

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/06(水) 03:50:33

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/05(火) 08:26:09

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/05(火) 03:20:00

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/03(日) 05:05:55

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/02(土) 22:25:40

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/02(土) 20:48:43

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/02(土) 13:58:23

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/02(土) 00:09:41

-

管理人の承認後に表示されます

  • From: |
  • 2013/10/29(火) 11:53:06

-

管理人の承認後に表示されます

  • From: |
  • 2013/10/28(月) 17:40:03

-

管理人の承認後に表示されます

  • From: |
  • 2013/10/17(木) 15:56:55

-

管理人の承認後に表示されます

  • From: |
  • 2013/10/17(木) 15:47:43

-

管理人の承認後に表示されます

  • From: |
  • 2013/10/17(木) 15:33:28

-

管理人の承認後に表示されます

  • From: |
  • 2013/08/24(土) 12:50:58

-

管理人の承認後に表示されます

  • From: |
  • 2013/08/12(月) 23:52:08

-

管理人の承認後に表示されます

  • From: |
  • 2013/07/14(日) 02:46:46

-

管理人の承認後に表示されます

  • From: |
  • 2013/07/09(火) 13:38:33

-

管理人の承認後に表示されます

  • From: |
  • 2013/07/06(土) 02:29:44

-

管理人の承認後に表示されます

  • From: |
  • 2012/06/28(木) 04:47:37

-

管理人の承認後に表示されます

  • From: |
  • 2012/01/06(金) 10:15:29

-

管理人の承認後に表示されます

  • From: |
  • 2011/06/10(金) 19:19:35

コメントの編集

管理者にだけ表示を許可する