MySQL InnoDBテーブル共有空間を使用するために「innodb_file_per_table」を設定

1.ファイルサイズの確認
$ sudo cd /var/lib/mysql
$ ls -lh
total 14G
-rw-r–r– 1 root root 0 Dec 1 14:31 debian-5.1.flag
-rw-rw—- 1 mysql mysql 5.0M Jan 17 21:31 ib_logfile0
-rw-rw—- 1 mysql mysql 5.0M Jan 17 21:29 ib_logfile1
-rw-rw—- 1 mysql mysql 14G Jan 17 21:31 ibdata1
drwx—— 2 mysql root 4.0K Dec 1 14:31 mysql
-rw-rw—- 1 root root 6 Dec 1 14:31 mysql_upgrade_info
drwx—— 2 mysql mysql 4.0K Jan 17 21:29 zabbix

$ mysql -uroot -p

mysql > select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema=’zabbix’;

+———————–+—————+————+
| table_name | total_mb | table_rows |
+———————–+—————+————+
| acknowledges | 0.06250000 | 0 |
….
| help_items | 0.04687500 | 103 |
| history | 9678.00000000 | 123981681 |
| history_log | 0.04687500 | 0 |

| history_text | 0.04687500 | 0 |
| history_uint | 5386.98437500 | 57990562 |
| history_uint_sync | 0.04687500 | 0 |

| timeperiods | 0.01562500 | 0 |
| trends | 54.54687500 | 537680 |
| trends_uint | 100.53125000 | 1035592 |

103 rows in set (1.46 sec)

2.データの書き込みを回避するために関連のサービスを停止する
$ sudo /etc/init.d/zabbix-server stop
$ sudo /etc/init.d/apache2 stop

3.履歴のデータをクリア
$ mysql -uroot -p

mysql > use zabbix;
Database changed
mysql > truncate table history;
Query OK, 123981681 rows affected (0.23 sec)
mysql > optimize table history;
1 row in set (0.02 sec)

mysql > truncate table history_uint;
Query OK, 57990562 rows affected (0.12 sec)

mysql > optimize table history_uint;
1 row in set (0.03 sec)

mysql > truncate table trends;
Query OK, 537680 rows affected (0.04 sec)

mysql > optimize table trends;
1 row in set (0.02 sec)

mysql > truncate table trends_uint;
Query OK, 1035592 rows affected (0.02 sec)

mysql > optimize table trends_uint;
1 row in set (0.01 sec)
4.データバックアップ
$ mysqldump -uroot -p zabbix > ~/zabbix.sql

5.データベースを停止
$ sudo stop mysql
6.共有テーブルスペースデータファイルを削除
$ cd /var/lib/mysql
$ rm ib*

7.「innodb_file_per_table」パラメータを追加
$ sudo vim /etc/mysql/my.cnf
[mysqld]の下に次の内容を追加
innodb_file_per_table=1

8.MySQLが起動
$ sudo start mysql

9.パラメータを有効にするかどうかを確認
$ mysql -uroot -p

mysql> show variables like '%per_table%’;
+———————–+——-+
| Variable_name | Value |
+———————–+——-+
| innodb_file_per_table | ON |
+———————–+——-+
1 row in set (0.00 sec)

10.データを再インポートする
$ mysql -uroot -p zabbix < ~/zabbix.sql

11.30日間のデータを保持するために毎日自動的にデータをクリーンアップスクリプト

#!/bin/bash
DATE=`date -d “30 days ago"`
CLOCK=`date +%s -d “${DATE}"`
MYSQL="mysql -uroot -p zabbix"

for TABLE in history trends
do
$MYSQL -e “DELETE FROM ${TABLE} WHERE clock < ${CLOCK};"
$MYSQL -e “OPTIMIZE TABLE ${TABLE};"
$MYSQL -e “DELETE FROM ${TABLE}_uint WHERE clock < ${CLOCK};"
$MYSQL -e “OPTIMIZE TABLE ${TABLE}_uint;"
doneクリプト

12.関連サービスのプロセスを復旧
$ sudo /etc/init.d/zabbix-server start
$ sudo /etc/init.d/apache2 start

MySQL

Posted by arkgame