今天遇到MySQL的原始的数据文件.frm,.myd,myi导入的问题。下面就来简单地介绍一下。

.frm .myd .myi都是Mysql存储数据的文件, 代表MySQL数据库表的结构/数据和索引文件 ,我们默认创建数据库和表时只生成数据库表结构的文件.frm. 移植数据库时,必须存在三种格式的数据库表文件,才能正常使用该DB。

打开mysql的data目录,可能还会遇见另一种文件格式 .opt可以用文本编辑器打开,可以看到里面保存的是编码信息。.frm,myd,myi是属于MySQL存储数据的文件,phpMyAdmin是无法导入的。phpMyAdmin支持的文件格式为sql文件。以下是操作方法的相关介绍,希望对大家有帮助。

其实操作很简单:

先找到mysql的安装目录下的data文件夹,一般在c盘,例如我的是在C:\ProgramData\MySQL\MySQLServer 5.5\data\,在这里你可以看到你以前建立的数据库,打开这些,呵,都是.frm .myd .myi文件。在data文件夹下新建一个文件夹,该文件夹的名称就是该数据库的名称,把那些.frm .myd .myi文件都放到这个文件夹中。

在此补充一下,在Linux上安装的MySQL的data文件夹路径:

rpm安装默认目录:

数据文件:/var/lib/mysql/

配置文件模板:/usr/share/mysql

mysql客户端工具目录:/usr/bin

日志目录:/var/log/

pid,sock文件目录:/tmp/

然后你就可以用你的工具看看这表里到底是什么内容了。

在此我遇到的是编码的问题,原始数据库的编码格式与数据库的编码格式不是一样的,下面就实验一下怎样转换编码。

步骤一 命令行执行:mysqldump --opt -hlocalhost -uroot -p*** --default-character-set=lantin1 dbname > /usr/local/dbname.sql

步骤二 将 dbname.sql文件中的create table语句的CHARSET=latin1改为CHARSET=utf8

步骤三 在dbname.sql文件中的insert语句之前加一条set names utf8;

步骤四 将dbname.sql转码为utf-8格式,建议使用UltraEditor,可以直接使用该编辑器的转换->ASCII到UTF-8(Unicode编辑),或者将文件另存为UTF-8(无BOM)格式

步骤五 命令行执行:mysql -hlocalhost -uroot -p*** --default-character-set=utf8 new_dbname < /usr/local/dbname.sql

总结:这种方法有个致命之处就是当数据中有大量中文字符和其他特殊符号字符时,很有可能导致在[步骤五]时报错导致无法正常导入数据,如果数据库比较大可以分别对每张表执行上述步骤