myisampackで圧縮したテーブルは、書き込みも、ALTERも出来ません。
でも書き込みたいことも、変更したくなることもあると思います。
そんな時は再度、解凍してしまいましょう。

insertintocompress

[root@colinux DB01]# myisamchk --unpack TABLE101.MYI
- recovering (with sort) MyISAM-table 'TABLE101.MYI'
Data records: 0
- Fixing index 1
- Fixing index 2

[root@colinux DB01]#

サービスを再起動して確認
uncompress

「サービスを再起動しなくてもいい方法」

alter tableを利用

mysql> use DB01;
Database changed
mysql> select TABLE_NAME,ROW_FORMAT from information_schema.TABLES
-> where TABLE_SCHEMA = 'DB01' and TABLE_NAME = 'TABLE101';
+------------+------------+
| TABLE_NAME | ROW_FORMAT |
+------------+------------+
| TABLE101 | Compressed |
+------------+------------+
1 row in set (0.01 sec)

mysql> insert into TABLE101(title,body) values('Compress','insert test into Compressed');
ERROR 1036 (HY000): Table 'TABLE101' is read only
mysql> create table TABLE101_TMP like TABLE101;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into TABLE101_TMP select * from TABLE101;
Query OK, 30 rows affected (0.02 sec)
Records: 30 Duplicates: 0 Warnings: 0

mysql> drop table TABLE101;
Query OK, 0 rows affected (0.00 sec)

mysql> alter table TABLE101_TMP rename to TABLE101;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> select TABLE_NAME,ROW_FORMAT from information_schema.TABLES
-> where TABLE_SCHEMA = 'DB01' and TABLE_NAME = 'TABLE101';
+------------+------------+
| TABLE_NAME | ROW_FORMAT |
+------------+------------+
| TABLE101 | Dynamic |
+------------+------------+
1 row in set (0.00 sec)

mysql>

table_alter

※ その他の方法としては、mysqldumpで対象のテーブルをバックアップして,mysqlコマンドでリストアする。

Comments are closed.

Post Navigation