我有来自Windows的.frm文件,现在我使用Ubuntu。如何仅从.frm文件创建与Windows相同的表?我读到我可以复制粘贴这些文件,但在Ubuntu中,没有MySQL / data文件夹,我不知道他们用.frm类型文件存储MySQL表的位置。谢谢。
答案 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
中存储了四种类型的信息必须将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文件后,将其加载到目标数据库服务器中。