centOS 6 を使っています。
mysql のDBは、/var/lib/mysql にあるのですが、一旦大きなデータを作ると、削除してもDBは大きいままです。テストのため、でかいデータを配置した後、ずっと大きいままだと無駄に容量を圧迫してしまうので、小さくしたほうが良いです。
では、DBを小さくする方法を説明します。
mysql で DBサイズを小さくする方法
1 2 3 4 5 6 7 8 9 |
[root@localhost test_db]# ll /var/lib/mysql -rw-rw---- 1 mysql mysql 67108864 5月 24 05:00 2018 ib_logfile0 -rw-rw---- 1 mysql mysql 67108864 5月 24 05:00 2018 ib_logfile1 -rw-rw---- 1 mysql mysql 5412749312 5月 24 05:00 2018 ibdata1 drwx------ 2 mysql mysql 4096 5月 23 16:37 2018 mysql srwxrwxrwx 1 mysql mysql 0 5月 24 05:00 2018 mysql.sock -rw-r--r-- 1 root root 6 5月 23 16:37 2018 mysql_upgrade_info drwx------ 2 mysql mysql 4096 5月 23 16:37 2018 performance_schema drwx------ 2 mysql mysql 4096 5月 24 03:06 2018 test_db |
→5GBある ibdata1 を小さくしたいと思います。
手順1. DBのバックアップを取る
DBサイズを小さくした状態で行います。
1 2 3 |
[root@localhost test_db]# cd /var/lib/mysql [root@localhost mysql]# mysqldump -uroot -p --opt --all-databases > alldb.sql Enter password: |
手順2.サーバーを停止します
一旦停止します。
1 2 |
[root@localhost mysql]# /etc/init.d/mysqld stop mysqld を停止中: [ OK ] |
手順3.ログファイルとデータベースファイルを削除
mysqlでは、一旦ログファイル(ib_logfile0,1)に書き込んだ後、遅延してデータベースファイル(ibdata1、InnoDBのテーブルスペースです。)に書き込む用になってますので、両方のデータを削除する必要があります。
1 |
[root@localhost mysql]# rm ibdata1 ib_logfile0 ib_logfile1 |
手順4.サーバーを起動
手順3でファイルを残していたりすると、起動NGになります。
1 2 |
[root@localhost test_db]# /etc/init.d/mysqld start mysqld を起動中: [ OK ] |
手順5.データをリストア
バックアップしておいたデータをリストアします。
1 2 |
[root@localhost mysql]# mysql -uroot -p < alldb.sql Enter password: |
ちゃんとサイズが小さくなってます^^
1 2 3 4 5 6 7 8 9 |
[root@localhost mysql]# ll 合計 665628 -rw-rw---- 1 mysql mysql 67108864 5月 24 05:09 2018 ib_logfile0 -rw-rw---- 1 mysql mysql 67108864 5月 24 05:09 2018 ib_logfile1 -rw-rw---- 1 mysql mysql 547356672 5月 24 05:09 2018 ibdata1 drwx------ 2 mysql mysql 4096 5月 24 05:08 2018 mysql srwxrwxrwx 1 mysql mysql 0 5月 24 05:07 2018 mysql.sock -rw-r--r-- 1 root root 6 5月 23 16:37 2018 mysql_upgrade_info drwx------ 2 mysql mysql 4096 5月 23 16:37 2018 performance_schema |
ちなみに、ll は ls -l のalias です。
コメント