旧い MySQL サーバを移行するために、まずは空き容量を確保しないと。
ibdata1 ファイルが肥大化しているのでどうにかしたい。
環境
- Ubuntu 14.04.1 LTS \n \l
- mysqld 5.5.38-0ubuntu0.14.04.1
最初
# ls -alh /var/lib/mysql
total 2.8G
drwx------ 7 mysql mysql 4.0K Mar 20 18:07 .
drwxr-xr-x 48 root root 4.0K Jul 27 2016 ..
drwx------ 2 mysql mysql 4.0K Apr 29 2015 database1
drwx------ 2 mysql mysql 4.0K Apr 20 2016 database2
-rw-r--r-- 1 root root 0 Oct 3 2014 debian-5.5.flag
drwx------ 2 mysql mysql 4.0K Oct 3 2014 database3
-rw-rw---- 1 mysql mysql 2.8G Jun 25 08:26 ibdata1
-rw-rw---- 1 mysql mysql 5.0M Jun 25 08:26 ib_logfile0
-rw-rw---- 1 mysql mysql 5.0M Jun 25 08:26 ib_logfile1
drwx------ 2 mysql root 4.0K Oct 3 2014 mysql
-rw-rw---- 1 root root 6 Oct 3 2014 mysql_upgrade_info
drwx------ 2 mysql mysql 4.0K Oct 3 2014 performance_schema
まずは ibdata1 をスリムにしようかな。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 7.3G 31M 100% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 492M 12K 492M 1% /dev
tmpfs 100M 348K 99M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 497M 0 497M 0% /run/shm
none 100M 0 100M 0% /run/user
おっと、これはこれは。31M しかないのでMySQLとは関係ないゴミファイルを整理して作業場所を開けました。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 6.6G 748M 91% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 492M 12K 492M 1% /dev
tmpfs 100M 348K 99M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 497M 0 497M 0% /run/shm
none 100M 0 100M 0% /run/user
これで、データベースのダンプを取ってから ibdata1 を削除することにします。
# mysqldump -u root -p -A > 20230625.sql
Enter password:
mysqldump: Couldn't execute 'SHOW TRIGGERS LIKE 'wp\_comments'': Got error 28 from storage engine (1030)
あれれ。ストレージが一杯?
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 7.4G 0 100% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 492M 12K 492M 1% /dev
tmpfs 100M 348K 99M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 497M 0 497M 0% /run/shm
none 100M 0 100M 0% /run/user
おっとー、ダンプファイルが大きすぎて容量がいっぱいになってしまいました。どこかでデータベース使っているところがありますね。ダンプファイルを一旦消してからデータベースにログオンします。
+--------------------+
| Database |
+--------------------+
| information_schema |
| database1 |
| database2 |
| database3 |
| mysql |
| performance_schema |
+--------------------+
6 rows in set (0.00 sec)
この中で database3 が怪しかったので、テーブルが何があるか調べてみます。
Database changed
mysql> show tables;
+-----------------------+
| Tables_in_fablib |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
11 rows in set (0.00 sec)
それぞれ、レコード数がどれだけあるか調べてみます。
mysql> select table_name, table_rows from information_schema.TABLES where table_schema = 'database3';
+-----------------------+------------+
| table_name | table_rows |
+-----------------------+------------+
| wp_commentmeta | 20 |
| wp_comments | 501502 |
| wp_links | 0 |
| wp_options | 112 |
| wp_postmeta | 70 |
| wp_posts | 37 |
| wp_term_relationships | 8 |
| wp_term_taxonomy | 1 |
| wp_terms | 1 |
| wp_usermeta | 17 |
| wp_users | 1 |
+-----------------------+------------+
11 rows in set (0.04 sec)
なるほどー、wp_comments はいらないデータので消してしまいます。
mysql> delete from wp_comments;
Query OK, 344955 rows affected (1 min 35.19 sec)
mysql>
このうえで、データベースを dump します。
# mysqldump -u root -p -A > 20230625.sql
データベースを全部 drop します。
mysql> drop database information_schema;
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema'
information_schema だけは消せませんでしたが、そのまま進めます。
mysqld を停止します。
# service mysql stop
mysql stop/waiting
消すものを確認
# ls -alh
total 3.1G
drwx------ 3 mysql mysql 4.0K Jun 25 09:04 .
drwxr-xr-x 48 root root 4.0K Jul 27 2016 ..
-rw-r--r-- 1 root root 72M Jun 25 08:59 20230625.sql
-rw-r--r-- 1 root root 0 Oct 3 2014 debian-5.5.flag
-rw-rw---- 1 mysql mysql 2.9G Jun 25 09:05 ibdata1
-rw-rw---- 1 mysql mysql 5.0M Jun 25 09:05 ib_logfile0
-rw-rw---- 1 mysql mysql 5.0M Jun 25 09:04 ib_logfile1
drwx------ 2 mysql root 4.0K Oct 3 2014 mysql
-rw-rw---- 1 root root 6 Oct 3 2014 mysql_upgrade_info
ibdata1,ib_logfile を削除します
# rm ibdata1 ib_logfile*
mysqldを起動して
# service mysql start
mysql start/running, process 8031
dump したデータを復旧します
# mysql -p -u root < 20230625.sql
結果です
# ls -alh /var/lib/mysql
total 260M
drwx------ 6 mysql mysql 4.0K Jun 25 09:06 .
drwxr-xr-x 48 root root 4.0K Jul 27 2016 ..
-rw-r--r-- 1 root root 72M Jun 25 08:59 20230625.sql
drwx------ 2 mysql mysql 4.0K Jun 25 09:06 database1
drwx------ 2 mysql mysql 4.0K Jun 25 09:06 database2
-rw-r--r-- 1 root root 0 Oct 3 2014 debian-5.5.flag
drwx------ 2 mysql mysql 4.0K Jun 25 09:06 database3
-rw-rw---- 1 mysql mysql 106M Jun 25 09:11 ibdata1
-rw-rw---- 1 mysql mysql 5.0M Jun 25 09:11 ib_logfile0
-rw-rw---- 1 mysql mysql 5.0M Jun 25 09:11 ib_logfile1
drwx------ 2 mysql root 4.0K Jun 25 09:06 mysql
-rw-rw---- 1 root root 6 Oct 3 2014 mysql_upgrade_info
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 4.1G 3.3G 56% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 492M 12K 492M 1% /dev
tmpfs 100M 348K 99M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 497M 0 497M 0% /run/shm
none 100M 0 100M 0% /run/user
やれやれ。