我有一个脚本可以导出MySQL数据库的模式,我可以根据这个模式生成迁移。对于这个过程,我只需要数据库模式,而不是数据本身。这就是我目前使用的:
mysqldump -u root --p[pass] -h localhost mydb_prod --add-drop-table --no-data > mydb_prod-`date +"%Y-%m-%d-%H:%M:%S"`.sql
--no-data
选项可以解决问题。
但是,我的迁移历史记录也保存在数据库表中。这意味着我确实要导出migrations
表的数据。我知道显式忽略特定表的--ignore-table
选项,但是,这意味着我必须明确列出我将来可能导致问题的所有表,因为我们每隔一段时间只进行一次迁移
除了一个(或多个)显式指定的表外,有没有办法在没有表数据的情况下导出数据库的模式?
答案 0 :(得分:1)
我讨厌回答我自己的问题,但我找到了一个解决方法,所以我不妨分享一下。
我基本上首先导出没有数据的所有表的模式,然后我只导出我的单个迁移表和数据,并将其附加到我的.sql输出文件中:
#/bin/bash
now=$(date +%Y-%m-%d-%H:%M:%S)
output_file="mydb_prod-$now.sql"
mysqldump -u root -p[pass] -h localhost mydb_prod --add-drop-table --no-data > "$output_file"
mysqldump -u root -p[pass] -h localhost mydb_prod migration_table --add-drop-table >> "$output_file"
这给了我我所需要的,而无需明确地手动指定每个表。
答案 1 :(得分:0)
您可以使用脚本编辑转储文件本身的任何表。我有时会使用sed
来重命名表格等。