`
lxneng
  • 浏览: 190160 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

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等
l
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
的动作
分享到:
评论

相关推荐

    Mysql使用技巧心得

    如果需要将表的数据存储格式从一种类型转换成另一种类型,可以使用`mysql_convert_table_format`命令。例如,将一个表从InnoDB转换为MyISAM: ```bash mysql_convert_table_format --user=root --password='xx' ...

    MySql培训日志_stu

    - 导入演示数据通常是通过导入SQL脚本或使用图形界面工具来完成的。 - **1.1.8 表结构描述** - 描述表结构包括定义表中的字段名称、数据类型、是否允许为空、是否有默认值、是否有唯一性约束等。 #### 二、MySQL...

    mysql的使用心得

    - `MYSQL_CONVERT_TABLE_FORMAT`: 用于转换表的存储引擎。 - **使用条件** - 需要安装DBI和DBD的MySQL相关模块。 - **示例** - `mysql_convert_table_format --user=root --password='xx' --type=myisam test ...

    MySQL字符集

    “工具”标签可能是指用于处理字符集问题的一些实用工具,如`iconv`用于转换字符编码,或者MySQL自带的`mysql_client`和`mysql_convert_table_format`工具,它们可以帮助用户查看和修改数据库、表或列的字符集设置。...

    Oracle到mysql转换的问题总结.doc

    Oracle到MySQL转换的问题主要集中在数据类型差异、SQL语句语法的区别以及特定函数的转换上。以下是对这些关键点的详细说明: 1. **数据类型转换**: - `NUMBER(10,0)`在Oracle中对应的是整数类型,而在MySQL中可...

    Oracle到mysql转换的问题总结要点.doc

    - 类型转换:Oracle的`TO_CHAR`和`TO_NUMBER`在MySQL中可以用`CONVERT`函数,如`CONVERT(字段名, 类型)`。 - 日期运算:Oracle的`ADD_MONTHS`在MySQL中用`DATE_ADD`,`DATEDIFF`则直接对应。 - `DECODE`函数:...

    Mysql 时间模糊查询

    SELECT * FROM table1 WHERE CONVERT(VARCHAR, date, 120) LIKE '2006-04-01%'; ``` 这里`CONVERT`函数用于将日期字段转换为字符串格式,然后使用`LIKE`进行模糊匹配。 **适用场景:**当需要按日期的年月日部分...

    MySQL数据库集群+负载均衡(LVS)

    **升级现有数据库** 包括使用mysql_convert_table_format、ALTER命令以及导出数据等方式。 1. **mysql_convert_table_format** - 用于将表格式从旧版本转换到新版本。 - 需要安装Perl组件以支持该命令。 2. **...

    将MSSQL改写为MYSQL的经验

    - MySQL提供了多种字符串处理函数,如`CONVERT()`用于类型转换,`CONCAT()`用于连接字符串,`TRIM()`用于去除字符串两端的空格,`UPPER()`和`LOWER()`用于转换字符串大小写,`LEFT()`和`RIGHT()`用于截取字符串。...

    用mysql存储本体

    为了将本体转换为数据库格式,我们需要选择“文件”菜单中的“Convert Project to Format”,然后在弹出的对话框中选择“OWL Database”。在此过程中,需要填写如下信息: - Project: 输入项目名称,根据个人需求...

    MySQL学习笔记 ADY

    - 格式化函数:如DATE_FORMAT()、CONVERT_TZ()等,用于格式化日期和转换时区。 第14章 存储过程和函数 - 创建存储过程和函数:可以编写一系列SQL语句封装起来,并为其命名,以后可以直接调用。 - 存储过程与函数的...

    MySQL存储毫秒数据的方法

    在MySQL中,虽然标准的数据类型如DATETIME、TIMESTAMP、TIME和DATE等不直接支持毫秒级别的精度,但MySQL确实能够处理和识别时间值中的毫秒部分。这使得我们可以通过一些巧妙的方式来存储和操作毫秒数据。以下是几种...

    c# MySql与SQL sever的区别.docx

    - 日期函数:SQL Server使用`CONVERT()`将日期转换为字符串,如`CONVERT(varchar(10), GETDATE(), 120)`;MySQL可以使用`DATE_FORMAT()`,如`DATE_FORMAT(NOW(), '%Y-%m-%d')`。 - 字符串连接:SQL Server直接使用...

    mysql5.1动态修改的参数变量

    ### MySQL 5.1 动态修改的参数变量详解 #### 概述 在 MySQL 5.1 版本中,部分系统变量可以在不重启数据库服务的情况下被动态修改。这为 DBA 和开发者提供了极大的便利性,使得可以根据实际运行情况灵活调整数据库...

    mysql 将字段time按天/月/年分组

    为了将这个时间戳转换为日期格式并按照天分组,我们可以使用`CONVERT`函数配合`DATE_FORMAT`或者`FROM_UNIXTIME`函数,但在这里描述的方法是使用`CONVERT`函数和ODBC日期格式。以下是具体步骤: 1. 使用`CONVERT`...

    sql-dateformat.rar_DateFormat_datEformat SQL_sql中dateformat_时间格式

    在MySQL中,我们通常使用`DATE_FORMAT()`函数来格式化日期和时间。例如,如果你有一个名为`my_date`的日期字段,你可以用以下方式提取年月日、时分秒: ```sql SELECT DATE_FORMAT(my_date, '%Y-%m-%d') AS 'Year...

Global site tag (gtag.js) - Google Analytics