如何将.frm文件传输到表?

时间:2011-10-07 14:27:18

标签: php mysql phpmyadmin

我有来自Windows的.frm文件,现在我使用Ubuntu。如何仅从.frm文件创建与Windows相同的表?我读到我可以复制粘贴这些文件,但在Ubuntu中,没有MySQL / data文件夹,我不知道他们用.frm类型文件存储MySQL表的位置。谢谢。

2 个答案:

答案 0 :(得分:2)

.frm文件只包含表格格式,整个表格。您还需要数据文件,可能是.myd / .myi

移动这些文件后,请务必运行mysql_upgrade以确保您复制的文件与您运行的特定MySQL版本100%兼容。

答案 1 :(得分:2)

等一下!!

请记住.frm文件仅包含表格描述布局。

如果您拥有所有MyISAM表,则将相应的.MYD和.MYI文件复制到与.frm相同的文件夹位置即可。 @Brad已经在他的回答中说明了这一点。 (我的回答是+1)

现在,如果表是InnoDB,那么移动.frm是不够的。为什么呢?

InnoDB在/ var / lib / mysql / ibdata1

中存储了四种类型的信息
  • 数据页
  • 索引页
  • 表元数据
  • MVCC数据

必须将ibdata1文件原样复制到/ var / lib / mysql。您还必须确保源数据库服务器的/etc/my.cnf中innodb的所有设置都被复制到目标数据库服务器的/etc/my.cnf中。

如果您的数据的任何部分是InnoDB,那么您最好不要执行所有数据的mysqldump(information_schema和mysql数据库除外)并将其加载到目标计算机上的全新MySQL安装中。

mysql数据库怎么样?有两种方法可以在不使用mysql_upgrade的情况下移植mysql架构:

选项1:使用mk-show-grants(或Percona Toolkit的pt-show-grants)

这会将所有MySQL Grants转储为SQL语句,这些语句完全可以移植到任何MySQL 5.x实例。

选项2:运行这些命令(我对mk-show-grants所做的个人模拟)

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

这些方法中的任何一个的输出都将为所有非匿名用户(与版本无关)生成GRANT命令。创建MySQLUserGrants.sql文件后,将其加载到目标数据库服务器中。