【问题标题】:mysqldump does not keep view format / structuremysqldump 不保留视图格式/结构
【发布时间】: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 和许多其他标志——结果都一样。使用不同的用户来确保这不是安全问题(rootsample_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)

【问题讨论】:

    标签: mysql sql window mariadb


    【解决方案1】:

    正确答案:

    MySQL/MariaDB 将视图创建的原始源存储到“.frm”文件(在“源”下)。看起来 HeidiSQL 会首先读取此内容,如果服务器未配置为允许此内容,它将使用 INFORMATION_SCHEMA 中修改后的一行。

    没有选项可以让mysqldump 使用.frm->source 版本。

    【讨论】:

    • 我几年前就遇到过这个问题,不敢相信它没有改变 :-( 关于 HeidiSQL Export database as SQL 命令右键单击数据库,是的,100% 确定。安装在 Windows 本地计算机上并且从 Windows/linux 服务器导出到本地机器(我记得从 linux 导出的一些问题,mysql 文件夹的访问权限,不记得确切 - 这是几年前的事了),但它很有魅力。
    • @AndrejPiatnica。听起来您的 HeidiSQL 使用 LOAD_FILE.frm 文件中读取定义。检查该命令的 HeidiSQL 日志。您的服务器还需要配置为允许读取.frm 文件。默认安装现在允许这样做。
    • 是的,可能是......我想我现在应该编辑我的问题。我需要的是每日自动备份(可能是 mysqldump)。 HeidiSQL 是完美的并且可以完成它的工作,但不能安排自动备份source
    猜你喜欢
    • 2018-05-18
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多