【发布时间】:2020-01-31 07:56:09
【问题描述】:
在10.3.13-MariaDB 上恢复数据库备份时,除视图外,一切正常。好吧,这些也被导出并且在恢复后可以正常工作,但是格式已损坏 - 整个 sql 视图在单行上。
检查转储文件时显示:
/*!50001 DROP TABLE IF EXISTS `vw_sample_view`*/;
/*!50001 DROP VIEW IF EXISTS `vw_sample_view`*/;
/*!50001 SET @saved_cs_client = @@character_set_client */;
/*!50001 SET @saved_cs_results = @@character_set_results */;
/*!50001 SET @saved_col_connection = @@collation_connection */;
/*!50001 SET character_set_client = utf8mb4 */;
/*!50001 SET character_set_results = utf8mb4 */;
/*!50001 SET collation_connection = utf8mb4_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`sample_user`@`%` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_sample_view` AS select `cm`.`name` AS `market`,`u`.`name` AS `user`,`u`.`logged_at` AS `logged_at` from (`users` `u` join `core_market` `cm` on(`cm`.`id` = `u`.`id_market`)) where `u`.`id_market` is not null order by `u`.`logged_at` desc */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
我的一些 sql 视图相当复杂(并且在其他选择中使用),这种格式使它们无法在不花时间格式化它们的情况下进行编辑。将它们放在单独的地方不是我想要的解决方法。
已经发布了一个类似的问题-Backing Up Views with Mysql Dump,但该解决方案使用了仅适用于 Linux 的xargs(不确定这是否是我的问题的解决方案)。我正在使用 Windows(我知道有类似 Gow 的东西,但想跳过第 3 方安装)
我尝试了带/不带--routines 标志的mysqldump,也尝试了不太可能的标志,例如--opt、--compact 和许多其他标志——结果都一样。使用不同的用户来确保这不是安全问题(root 和 sample_user)。
作为一个 SQL 客户端,我使用 HeidiSQL 并从中导出正是我需要的:
-- Dumping structure for view my_db.vw_sample_view
-- Removing temporary table and create final VIEW structure
DROP TABLE IF EXISTS `vw_sample_view`;
CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `vw_sample_view` AS SELECT
cm.name AS market,
u.name AS `user`,
logged_at
FROM users u
INNER JOIN core_market cm ON cm.id = u.id_market
WHERE id_market IS NOT NULL
ORDER BY logged_at DESC ;
不知道这个 HeidiSQL 是否在后台使用 mysqldump(我只是缺少正确的参数),但这正是我想要得到的输出。
更新 我的目标是每天进行计划备份(这不会破坏 SQL 视图)。 Heidi 非常适合一次性手动备份,但它不能安排用于重复任务 (https://www.heidisql.com/forum.php?t=23870)
【问题讨论】: