我有一个数据库,喜欢备份和恢复我的备份。我的数据库更复杂,但我会给给予一个简短的例子是什么是不工作。
CREATE DATABASE `bug`CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE TABLE `bug`.`doc` ( `id` BIGINT, `xls` VARCHAR(16000) );
CREATE TABLE `bug`.`user` ( `id` BIGINT, `name` VARCHAR(16000) );
CREATE VIEW `bug`.`user_doc` AS (SELECT d.xls,u.name FROM `user` u JOIN doc d ON d.id = u.id);
我可以备份数据库:
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`bug` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `bug`;
/*Table structure for table `doc` */
DROP TABLE IF EXISTS `doc`;
CREATE TABLE `doc` (
`id` bigint DEFAULT NULL,
`xls` varchar(16000) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*Data for the table `doc` */
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint DEFAULT NULL,
`name` varchar(16000) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*Data for the table `user` */
/*Table structure for table `user_doc` */
DROP TABLE IF EXISTS `user_doc`;
/*!50001 DROP VIEW IF EXISTS `user_doc` */;
/*!50001 DROP TABLE IF EXISTS `user_doc` */;
/*!50001 CREATE TABLE `user_doc`(
`xls` varchar(16000) ,
`name` varchar(16000)
)*/;
/*View structure for view user_doc */
/*!50001 DROP TABLE IF EXISTS `user_doc` */;
/*!50001 DROP VIEW IF EXISTS `user_doc` */;
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `user_doc` AS select `d`.`xls` AS `xls`,`u`.`name` AS `name` from (`user` `u` join `doc` `d` on((`d`.`id` = `u`.`id`))) */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
但我无法恢复数据库我得到这些错误:
Error Code: 1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
MySQL正在创建一个在我的数据库中不存在的表user_doc,并希望在创建后立即删除该表。我认为MySQL这样做是因为视图可以依赖于视图,并且创建视图的顺序可以不同。但现在我无法导入转储文件。
/*!50001 CREATE TABLE `user_doc`(
`xls` varchar(16000) ,
`name` varchar(16000)
)*/
/*!50001 DROP TABLE IF EXISTS `user_doc` */;
如何在不编辑转储的情况下还原数据库?
1条答案
按热度按时间mm5n2pyu1#
这不是MySQL的bug。转储是由一个名为SQLYog的应用程序。如果我使用mysql创建转储,那么将不会创建user_doc表。如果使用SQLYog进行转储,则将创建表user_doc。所以这不是mysql的bug,而是SQLYog(13.2.0)的bug。