我使用 MySQLBackup 实时备份我的 MySQL 数据库。它与 MySQL Community Server 5.7 完美兼容。升级到 8.0 后,TIMESTAMP 列在备份中消失了。(8.0.11 和 8.0.14 版本之间似乎甚至存在差异:将 TIMESTAMP 替换为 DATETIME 并将 CURRENT_TIMESTAMP 保留为默认值,备份在 8.0.11 中仍然可用)。
我需要时间戳,因为数据库是由没有真实日期/时间(未连接到互联网)的 Raspberry 提供的,我查看了导出选项,但似乎都与问题无关。
这是备份的日志文件:
-- MySqlBackup.NET 2.0.9.2
-- Dump Time: 2019-02-07 09:22:47
-- --------------------------------------
-- Server version 8.0.14 MySQL Community Server - GPL
--
-- Create schema db_1
--
CREATE DATABASE IF NOT EXISTS `db_1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */;
Use `db_1`;
-- Definition of tab_1
DROP TABLE IF EXISTS `tab_1`;
CREATE TABLE IF NOT EXISTS `tab_1` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`W_1` int(11) DEFAULT '0',
`W_2` int(11) DEFAULT '0',
`Time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8;
--
-- Dumping data for table tab_1
--
/*!40000 ALTER TABLE `tab_1` DISABLE KEYS */;
INSERT INTO `tab_1`(`ID`,`W_1`,`W_2`) VALUES
(12,2,2),
(13,3,3,),
(14,4,4,);
/*!40000 ALTER TABLE `tab_1` ENABLE KEYS */;
-- Dump completed on 2019-02-07 09:22:48
-- Total time: 0:0:0:0:136 (d:h:m:s:ms)
有人知道发生了什么吗?我将非常感激您的帮助!
答案1
大家好。我是这个类库的作者MySqlBackup.NET
。
我刚刚发现这是一个错误并且已经修复。您可以通过 Nuget 下载新包:
感谢你的支持。
对于 MySql.Data.DLL PM> Install-Package MySqlBackup.NET https://www.nuget.org/packages/MySqlBackup.NET/
对于 dotConnector Devart.Express.MySql PM> Install-Package MySqlBackup.Net.DevartExpress https://www.nuget.org/packages/MySqlBackup.Net.DevartExpress/
对于 MySqlConnector (MIT) PM> Install-Package MySqlBackup.NET.MySqlConnector https://www.nuget.org/packages/MySqlBackup.NET.MysqlConnector/
答案2
今天我发现了导致 MySQLBackup.NET 从转储中排除 TIMESTAMP 类型列的因素。
对于 Date / DateTime / TimeStamp 类型的列,删除默认的 CURRENT_TIMESTAMP,否则这些列将被丢弃。
我刚刚使用 MySQLBackup.NET 2.3.3.1 和 MySQL 服务器 8.0.17 进行了测试。无论我在 C# 代码中放置什么选项,我的 TIMESTAMP 列都不会出现在转储中。删除 DEFAULT CURRENT_TIMESTAMP 后,该列现在出现在转储中。