mysql_convert_table_format工具可以批量转换MYSQL数据库表的存储引擎,如果是RPM安装一般在/usr/bin 或者/usr/sbin下。本文我们主要介绍利用mysql_convert_table_format工具将MySQL数据库表的存储引擎批量转换为MYISAM引擎的方法,接下来就让我们来一起了解这一部分内容。
首先执行下面的代码:
- [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。
- --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,现在我的变成30M了。
修改工具
把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 ~]#
可能会出现以下异常
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 3) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge.
at /usr/bin/mysql_convert_table_format line 66
是因为mysql5.6默认不添加mysql-per依赖包,因此执行如下命令一路y就可以了
yum install perl-DBD-MySQL 也可以参考文章:http://blog.csdn.net/u010440155/article/details/54952721
成功完成,再看看数据文件:
- 总计 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引擎。
关于使用mysql_convert_table_format工具来批量转换MySQL数据库表的存储引擎的方法就介绍到这里了,希望本次的介绍能够对您有所收获