【发布时间】:2011-09-04 18:02:00
【问题描述】:
我正在使用带有 Java 程序的 MySql 数据库,现在我想将该程序提供给其他人。
如何导出MySql数据库结构,里面没有数据,只有结构?
【问题讨论】:
我正在使用带有 Java 程序的 MySql 数据库,现在我想将该程序提供给其他人。
如何导出MySql数据库结构,里面没有数据,只有结构?
【问题讨论】:
您可以使用 mysqldump 命令使用 --no-data 选项
mysqldump -h yourhostnameorIP -u root -p --no-data dbname > schema.sql
【讨论】:
mysqldump 是最好的答案。 MySQL Administrator 已被废弃,而 MySQL Workbench 仍然存在很多问题。
--single-transaction 选项。
CREATE DATABASE 命令。要包含,请将dbname 替换为--databases dbname(简写:-B dbname)。然后在另一台服务器上导入,使用mysql -u root -p < schema.sql
是的,您可以将mysqldump 与--no-data 选项一起使用:
mysqldump -u user -h localhost --no-data -p database > database.sql
【讨论】:
您还可以使用--no-data 选项提取单个表
mysqldump -u user -h localhost --no-data -p database tablename > table.sql
【讨论】:
您可以在 mysqldump 命令中使用 -d 选项
mysqldump -u root -p -d databasename > database.sql
【讨论】:
不使用输出的转储。
mysqldump --no-data <database name> --result-file=schema.sql
【讨论】:
如果您使用 IntelliJ,您可以启用数据库视图(视图 -> 工具窗口 -> 数据库)
在该视图中连接到您的数据库。然后您可以右键单击数据库并选择“复制 DDL”。其他 IDE 可能会提供类似的功能。
【讨论】:
请注意,尽管 --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`
【讨论】:
您可以免费使用 MYSQL 管理员工具 http://dev.mysql.com/downloads/gui-tools/5.0.html
你会发现很多选项来导出你的 MYSQL 数据库
【讨论】:
如果你想从所有数据库中转储所有表并且没有数据(只有数据库和表结构),你可以使用:
mysqldump -P port -h hostname_or_ip -u username -p --no-data --all-databases > db_backup.sql
这将生成一个 .sql 文件,您可以将其加载到 mysql 服务器上以创建新数据库。 在生产环境中用例并不多,但我每周都会这样做以重置链接到演示网站的服务器,因此无论用户在一周内做什么,在周日晚上一切都会回滚到“新”: )
【讨论】:
使用 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
【讨论】:
获取单个表的创建脚本:
- 选择所有表格(使用 shift 键)
- 只需右键单击表名,然后单击复制到剪贴板 > 创建语句。
【讨论】:
您可以使用以下方法服用
mysqldump -d <database name> > <filename.sql> // -d : without data
希望对你有帮助
【讨论】:
shell> mysqldump --no-data --routines --events test > dump-defs.sql
【讨论】:
添加 --routines 和 --events 选项以包括存储的例程和事件定义
mysqldump -u <user> -p --no-data --routines --events test > dump-defs.sql
【讨论】: