MySQL 数据引擎转换工具 mysql_convert_table_format

从MySQL 5.x起,MySQL已经自带一个PERL工具。此工具可以批量转换MYSQL的表的引擎,这个工具对于批量转换表的朋友就比较好用啦,工具为mysql_convert_table_format,如果是RPM安装一般在/usr/bin 或者/usr/sbin下。源码安装的朋友可能就在你自己定义的目录—basedir/bin下。我的为/usr/local/mysql/bin,其实mysql_convert_table_format的帮助文件已经非常详细啦!方便自己,也给象我一样比较懒的人啰,就当把帮助文档翻译一下啰,本人英文水平还处在小学水平,欢迎拍砖 

[root@test ~]# mysql_convert_table_format 
/usr/sbin/mysql_convert_table_format 
version 1.1 

Conversion of a MySQL tables to other table types. 
转换MYSQL 表成其它表的类型 
如:INNODB ,MEMORY等 

Usage: /usr/sbin/mysql_convert_table_format database [tables] 

用法: /usr/sbin/mysql_convert_table_format 数据库名 
表名,也就是可以单独指定全库,或者全表,类似mysqldump 

If no tables has been specifed, all tables in the database will be converted. 

如果没指定表,那么数据库中的所有表将会被转换 
The following options are available: 

–force 
Continue even if there is some error. 

如果碰到错误强制进行转换 
–help or –Information 
Shows this help 
查看帮助 

–host=’host name’ (Default localhost) 
Host name where the database server is located. 

转换的主机名,默认为本地主机(localhost) 

–password=’password’ 
Password for the current user. 

当前进行转换用户的密码 

–port=port 
TCP/IP port to connect to if host is not “localhost”. 

如果不是以localhost 连接的话,请指定端口 

–socket=’/path/to/socket’ 
Socket to connect with. 

SOCKET文件存在的位置(SOCKET是进程间通信所用到的) 

–ENGINE=’table-type’ 
Converts tables to the given table type (Default: myisam) 
MySQL 3.23 supports at least the BDB, ISAM and MYISAM types. 

存储引擎,默认为MYISAM,这里要注意,我测试的时候,要修改这个PERL脚本,如果你把库转成INNODB,就在脚本里把MYISAM写成INNODB,其它类同,我也不清楚用这个参数指定为什么不行,本人对PERL也就能看懂一些,没学过程序开发,也没做过程序员,水平也不怎么样!所以,如果谁有更好的方法,或者改良一下这个脚本应该是可以的。 

–user=’user_name’ 
User name to log into the SQL server. 

连接的用户名 

–verbose 
This is a test specific option that is only used when debugging a test. 
Print more information about what is going on. 


–version 
Shows the version of this program. 
查看工具的版本信息 



用法:我是用本机进行测试,OS:RHEL5.2 MYSQL:5.1.30 

mysql_convert_table_format mo –user=’root’ –password=’mysql’ –force –socket=’/tmp/mysql.sock’ 

把数据库mo中的所有表转换成MYISAM引擎 
查看数据文件目录 
[root@test ~]# ll /opt/mysql-data/mo/ 
总计 960 
-rw-rw—- 1 mysql mysql 12914 03-02 22:55 action_log.frm 
-rw-rw—- 1 mysql mysql 
8900 03-02 22:55 alarm_log.frm 
-rw-rw—- 1 mysql mysql 
8898 03-02 22:55 check_data.frm 
-rw-rw—- 1 mysql mysql 
8836 03-02 22:55 check_data_log.frm 
-rw-rw—- 1 mysql mysql 
1708 03-02 22:55 check_data_log.par 
-rw-rw—- 1 mysql mysql 
8898 03-02 22:55 check_data_tmp.frm 
-rw-rw—- 1 mysql mysql 
9096 03-02 22:55 checkpoint.frm 
……………………………………. 


只有表的结构文件,看看表空间有没有增长啰 
[root@test ~]# ll -lh /opt/mysql-data/ib* 
-rw-rw—- 1 mysql mysql 
34M 03-02 23:18 /opt/mysql-data/ibdata1 
-rw-rw—- 1 mysql mysql 5.0M 03-02 23:18 /opt/mysql-data/ib_logfile0 
-rw-rw—- 1 mysql mysql 5.0M 12-22 20:19 /opt/mysql-data/ib_logfile1 

默认没有用INNODB的是10M,现在我的变成30多M啦 

修改工具 
把MYISAM修改成INNODB 
Vi /usr/local/mysql/bin/mysql_convert_table_format 
把第26行 $opt_type=”innodb” 改成$opt_type=”myisam” 

用工具进行库的转换 

[root@test ~]# mysql_convert_table_format mo –user=’root’ –password=’mysql’ –socket=’/tmp/mysql.sock’ 
[root@test ~]# 

成功完成。。在看看数据文件啰 

总计 2568 
-rw-rw—- 1 mysql mysql 12914 03-02 23:18 action_log.frm 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 action_log.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 action_log.MYI 
-rw-rw—- 1 mysql mysql 
8900 03-02 23:18 alarm_log.frm 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 alarm_log.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 alarm_log.MYI 
-rw-rw—- 1 mysql mysql 
8898 03-02 23:18 check_data.frm 
-rw-rw—- 1 mysql mysql 
8836 03-02 23:18 check_data_log.frm 
-rw-rw—- 1 mysql mysql 
1708 03-02 23:18 check_data_log.par 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p0.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p0.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p100.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p100.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p101.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p101.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p102.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p102.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p103.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p103.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p104.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p104.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p105.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p105.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p106.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p106.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p107.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p107.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p108.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p108.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p109.MYD 
-rw-rw—- 1 mysql mysql 
1024 03-02 23:18 check_data_log#P#p109.MYI 
-rw-rw—- 1 mysql mysql 
0 03-02 23:18 check_data_log#P#p10.MYD 

已经成功转换成MYISAM引擎啰 
验证数据的正确性我就不贴出来了,我已经验证过了,不会有数据的丢失,其实脚本也就是批量执行 
ALTER TABLE $TABLE_NAME ENGINE=$ENGINE 
的动作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值