programing

mysqldump가 보기 형식/구조를 유지하지 않음

projobs 2022. 10. 21. 21:58
반응형

mysqldump가 보기 형식/구조를 유지하지 않음

DB 백업을 복원할 때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 뷰 중 일부는 상당히 복잡하며(다른 선택 항목에서 사용됨) 이 형식을 사용하면 먼저 포맷하지 않고는 편집할 수 없습니다.다른 장소에 보관하는 것은 회피책이 아닙니다.

유사한 문제가 이미 게시되어 있습니다.Mysql 덤프를 사용하여 보기를 백업하지만 이 솔루션에서는xargsLinux에서만 사용할 수 있습니다(또한 이것이 문제의 해결책인지 확실하지 않습니다).Windows 를 사용하고 있습니다(Gow 와 같은 것이 있는 것은 알고 있습니다만, 서드 파티의 인스톨은 생략하고 싶습니다).

mysqldump를 사용해 봤다/없었다--routinesflag, 다음과 같은 가능성이 낮은 플래그를 시도합니다.--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)

정정된 답변입니다.

MySQL/MariaDB는 뷰 생성의 원래 소스를 ".frm" 파일("source" 아래)에 저장했습니다.HeidiSQL이 먼저 이것을 읽고 서버가 이것을 허용하도록 설정되어 있지 않은 경우 INFORMATION_SCHEMA에서 수정된1개의 라이너를 사용합니다.

할 수 있는 옵션은 없습니다.mysqldump사용하다.frm->source버전입니다.

언급URL : https://stackoverflow.com/questions/59999934/mysqldump-does-not-keep-view-format-structure

반응형