我有一个包含非常大的表的数据库,包括我想在远程机器上更新的二进制数据,每天一次。我不想转储整个表,在远程计算机上传输和重新创建它,而是只转储更新,然后使用该转储来更新远程计算机。
我已经明白我可以生成转储文件了。
mysqldump -u user -p=pass --quick --result-file=dump_file \
--where "Updated >= one_day_ago" \
database_name table_name
1)结果"恢复"在远程计算机上
mysql -u user -p=pass database_name < dump_file
只更新必要的行?还是有其他不良影响?
2)这是最好的方法吗? (我无法直接管道并使用--host
选项)
答案 0 :(得分:1)
如果只转储WHERE
子句为true的行,则只会获得包含要更新的值的.sql文件。因此,如果使用当前导出选项,则永远不会获得重复值。但是,将这些插入数据库将不起作用。您将不得不使用命令行参数--replace
,否则,如果您在表6
中转储数据库和标识为table1
的行并尝试将其导入您的其他数据库,那么您'如果行已经有id = 6
,则会在重复项上出错。使用--replace
参数,它将覆盖旧值,只有在有新值时才会发生(根据您的WHERE
子句)。
快速回答: