【问题标题】:MySql export schema without data没有数据的 MySql 导出模式
【发布时间】:2011-09-04 18:02:00
【问题描述】:

我正在使用带有 Java 程序的 MySql 数据库,现在我想将该程序提供给其他人。

如何导出MySql数据库结构,里面没有数据,只有结构?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以使用 mysqldump 命令使用 --no-data 选项

    mysqldump -h yourhostnameorIP -u root -p --no-data dbname > schema.sql
    

    【讨论】:

    • 恕我直言,mysqldump 是最好的答案。 MySQL Administrator 已被废弃,而 MySQL Workbench 仍然存在很多问题。
    • 如果您不想或不能使用表锁,也可以考虑使用--single-transaction 选项。
    • -d 简称--no-data。
    • 如果你的数据库有存储过程/函数,还可以考虑添加 --routines
    • 默认情况下,这不包括CREATE DATABASE 命令。要包含,请将dbname 替换为--databases dbname(简写:-B dbname)。然后在另一台服务器上导入,使用mysql -u root -p < schema.sql
    【解决方案2】:

    是的,您可以将mysqldump--no-data 选项一起使用:

    mysqldump -u user -h localhost --no-data -p database > database.sql
    

    【讨论】:

    • 我很惊讶这不是公认的答案,尽管早在十秒之前就发布了,并且如果与公认的答案不同,它会更完整。
    • @zypA13510,显然 10 秒可以相差 749 票。
    【解决方案3】:

    您还可以使用--no-data 选项提取单个表

    mysqldump -u user -h localhost --no-data -p database tablename > table.sql
    

    【讨论】:

      【解决方案4】:

      您可以在 mysqldump 命令中使用 -d 选项

      mysqldump -u root -p -d databasename > database.sql
      

      【讨论】:

        【解决方案5】:

        不使用输出的转储。

        mysqldump --no-data <database name> --result-file=schema.sql
        

        【讨论】:

          【解决方案6】:

          如果您使用 IntelliJ,您可以启用数据库视图(视图 -> 工具窗口 -> 数据库)

          在该视图中连接到您的数据库。然后您可以右键单击数据库并选择“复制 DDL”。其他 IDE 可能会提供类似的功能。

          【讨论】:

          • 我试了一下,它不包含任何触发器(天知道还有什么没有)
          【解决方案7】:

          请注意,尽管 --no-data 选项不会包含视图定义。所以如果你有如下观点

          create view v1 
           select `a`.`id` AS `id`,
           `a`.`created_date` AS `created_date` 
          from t1;
          

          使用 --no-data 选项,视图定义将更改为以下

          create view v1
           select 1 AS `id`, 1 AS `created_date`
          

          【讨论】:

            【解决方案8】:

            您可以免费使用 MYSQL 管理员工具 http://dev.mysql.com/downloads/gui-tools/5.0.html

            你会发现很多选项来导出你的 MYSQL 数据库

            【讨论】:

              【解决方案9】:

              如果你想从所有数据库中转储所有表并且没有数据(只有数据库和表结构),你可以使用:

              mysqldump -P port -h hostname_or_ip -u username -p --no-data --all-databases > db_backup.sql
              

              这将生成一个 .sql 文件,您可以将其加载到 mysql 服务器上以创建新数据库。 在生产环境中用例并不多,但我每周都会这样做以重置链接到演示网站的服务器,因此无论用户在一周内做什么,在周日晚上一切都会回滚到“新”: )

              【讨论】:

                【解决方案10】:

                使用 mysql-backup4j 很容易用几行代码备份任何数据库。这将为数据库生成 sql 转储,以后可以用来轻松恢复数据库。

                为此需要的maven依赖是:

                 <dependency>
                        <groupId>com.smattme</groupId>
                        <artifactId>mysql-backup4j</artifactId>
                        <version>1.0.1</version>
                    </dependency>
                

                这里是java中的实现..你可以玩很酷的参数集

                /**
                 * Creator : Tanvir Chowdhury
                 * Date    : 2021-11-15
                 */
                public class BackupDatabase {
                    public static void main(String[] args) throws Exception {
                
                        Properties properties = new Properties();
                        properties.setProperty(MysqlExportService.DB_NAME, "hcs_test_db");
                        properties.setProperty(MysqlExportService.DB_USERNAME, "root");
                        properties.setProperty(MysqlExportService.DB_PASSWORD, "root");
                        properties.setProperty(MysqlExportService.DELETE_EXISTING_DATA, "true");
                        properties.setProperty(MysqlExportService.DROP_TABLES, "true");
                        properties.setProperty(MysqlExportService.ADD_IF_NOT_EXISTS, "true");
                        properties.setProperty(MysqlExportService.JDBC_DRIVER_NAME, "com.mysql.cj.jdbc.Driver");
                        properties.setProperty(MysqlExportService.JDBC_CONNECTION_STRING, "jdbc:mysql://localhost:3306/hcs_test_db");
                
                        properties.setProperty(MysqlExportService.TEMP_DIR, new File("/Users/tanvir/Desktop/backups/backup.sql").toString());
                        properties.setProperty(MysqlExportService.PRESERVE_GENERATED_ZIP, "true");
                
                        MysqlExportService mysqlExportService = new MysqlExportService(properties);
                        mysqlExportService.export();
                
                    }
                }
                

                如果需要,您还可以很容易地使用邮件发送选项将备份文件发送到任何电子邮件地址。

                或者您可以使用 mysqldump 命令的 --no-data 选项来执行此操作。如果您想从 java 执行此操作,则将此命令作为参数传递给运行时 exec() 方法。

                mysqldump -u root -h localhost --no-data -proot hcs_db_one?useSSL=false > db_one_dump.sql
                

                【讨论】:

                  【解决方案11】:

                  获取单个表的创建脚本:
                  - 选择所有表格(使用 shift 键)
                  - 只需右键单击表名,然后单击复制到剪贴板 > 创建语句。

                  【讨论】:

                  • 您可能想要更新您在哪个程序中执行此操作的答案,例如 MS SQL Server Mgmt。 Studio 或 Oracle SQL Developer... ;-)
                  【解决方案12】:

                  您可以使用以下方法服用

                  mysqldump -d <database name> > <filename.sql> // -d : without data
                  

                  希望对你有帮助

                  【讨论】:

                  • 这个答案没有增加其他答案尚未说过的内容。
                  【解决方案13】:

                  shell> mysqldump --no-data --routines --events test > dump-defs.sql

                  【讨论】:

                  • 欢迎来到 StackOverflow。如果您提供更多信息和限制条件,您可以从中得出一个很好的答案。
                  【解决方案14】:

                  添加 --routines 和 --events 选项以包括存储的例程和事件定义

                  mysqldump -u <user> -p --no-data --routines --events test > dump-defs.sql
                  

                  【讨论】:

                    猜你喜欢
                    • 2023-02-24
                    • 2015-08-14
                    • 2018-11-14
                    • 2020-03-10
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-05-26
                    相关资源
                    最近更新 更多