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

发布于 2024-12-08 19:40:58 字数 154 浏览 0 评论 0原文

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

I have .frm files from Windows and now I use Ubuntu. How can I create the same table as in Windows from only .frm files? I read that I can just copy paste those files, but in Ubuntu, there is no MySQL/data folder and I have no idea where they store MySQL tables with .frm type files. Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

累赘 2024-12-15 19:40:58

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

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

The .frm file just contains the table format, and is not the entire table. You need the data file as well, which is probably .myd/.myi.

Once you do move those files over, be sure to run mysql_upgrade to ensure that those files you copied will be 100% compatible with the specific version of MySQL you are running.

情话墙 2024-12-15 19:40:58

等一下 !!

请记住,.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,那么最好对所有数据(除了 information_schema 和 mysql 数据库)执行 mysqldump,并将其加载到目标计算机上全新安装的 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 文件后,将其加载到目标数据库服务器中。

Wait a minute !!

Please keep in mind that .frm files contains table description layout only.

If you have all MyISAM tables, then copying the corresponding .MYD and .MYI files to the same folder location as the .frm is sufficient. @Brad already stated this in his answer. (+1 from me on his answer)

Now, if the table is InnoDB, moving .frm will not be sufficient. Why?

InnoDB stores four types of info in /var/lib/mysql/ibdata1

  • Data Pages
  • Index Pages
  • Table MetaData
  • MVCC Data

The ibdata1 file must be copied as is to /var/lib/mysql. You must also make sure all setting for innodb in the source DB server's /etc/my.cnf are copied into the /etc/my.cnf of the target DB server.

If any portion of your data is InnoDB, you are much better off performing a mysqldump of all data (except the information_schema and mysql databases) and loading it into a fresh install of MySQL on the target machine.

What about the mysql database? There are two ways to port the mysql schema without using mysql_upgrade:

OPTION 1 : Use mk-show-grants (or Percona Toolkit's pt-show-grants)

This dumps out all the MySQL Grants as SQL statements, which is completely portable to any MySQL 5.x instance.

OPTION 2 : Run these commands (My personal emulation of what mk-show-grants does)

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

The output from either of these methods will result in the GRANT commands for all non-anonymous users (which is version independent). Once the MySQLUserGrants.sql file is made, load that into the target DB server.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文