我面临着比较多个数据库的结构的问题-但不是整体的数据库,只是它们都具有相同表的表。我可以通过界面导出其结构,但每次必须单击表列表以定义要导出的内容。有没有一种方法可以访问PHPMyAdmin运行的导出查询,以便每次都简单地复制粘贴?
答案 0 :(得分:2)
phpMyAdmin 4.5.0+支持导出模板。在导出屏幕上,可以使用所需设置创建导出模板。它们是每台服务器,但是我们可以为此做些事情。
默认情况下(可以在PMA的配置文件中配置),PMA将这些导出模板存储在数据库phpmyadmin
和表pma__export_templates
中。
只要您拥有对服务器上所有数据库(包括phpmyadmin
数据库)的完全访问权限,就可以这样做:
phpmyadmin.pma__export_templates
表中phpmyadmin.pma__export_templates
。答案 1 :(得分:0)
如果只想导出元数据,则可以使用mysqldump --no-data
。
前几天,我为公司的一名开发人员做这件事,他很困惑他们数据库的暂存实例与生产实例有所不同。
我跑了
mysqldump --no-data --skip-add-drop-table --skip-add-locks -h $staging_host > staging-dump.sql
mysqldump --no-data --skip-add-drop-table --skip-add-locks -h $prod_host > prod-dump.sql
这仅转储CREATE TABLE语句。它忽略了任何包含表数据内容的INSERT语句。关于字符集,也有一些评论和一些无害的内容。忽略这些。
我编辑了vim
中的每个文件,以从每个表创建中删除AUTO_INCREMENT选项。当然,如果表中的行数不同,这些内容也会有所不同。这是vim
命令:
:%g/AUTO_INCREMENT=[0-9]* /s///
然后并排比较文件:
diff -y staging-dump.sql prod-dump.sql > diff
输出并排显示文件(至少显示尽可能多的文件),其中一个单字符列在文件中间居中。中间的列将有|
表示不同的行,或<
表示仅在第一个文件中存在的行,或>
表示仅在第二个文件中存在的行。