我正在将MariaDB数据库迁移到Linux Docker容器中。
我正在使用mariadb:最新的Ubuntu 20 LTS通过Windows 10 WSL 2通过VSCode远程WSL。
我已经将sql
转储复制到容器中,并将其导入到具有DEFAULT CHARACTER SET utf8的InnoDB数据库中。它没有报告任何错误:
> source /test.sql
该文件执行以下操作(此帖子的实际数据被截断):
USE `mydb`;
DROP TABLE IF EXISTS `opsitemtest`;
CREATE TABLE `opsitemtest` (
`opId` int(11) NOT NULL AUTO_INCREMENT,
`opKey` varchar(50) DEFAULT NULL,
`opName` varchar(200) DEFAULT NULL,
`opDetails` longtext,
PRIMARY KEY (`opId`),
KEY `token` (`opKey`)
) ENGINE=InnoDB AUTO_INCREMENT=4784 DEFAULT CHARSET=latin1;
insert into `opsitemtest`(`opId`,`opKey`,`opName`,`opDetails`) values
(4773,'8vlte0755dj','VTools addin for MSAccess','<p>There is a super helpful ...'),
(4774,'8vttlcr2fTA','BAS OLD QB','<ol>\n<li><a href=\"https://www.anz.com/inetbank/bankmain.asp\" ...'),
(4783,'9c7id5rmxGK','STP - Single Touch Payrol','<h1>Gather data</h1>\n<ol style=\"list-style-type: decimal;\"> ...');
如果I source
是所述表的12个记录的子集,则所有列都被正确填充。
如果我source
同一个表(4700行)的完整数据集,其中其他内容都相同,许多opDetails长文本字段的长度显示在sqlYog中,但没有数据可见。如果我在该列上运行SELECT,没有错误,但一些opDetails字段为“空”(即:您看不到任何数据),而且当我序列化该字段时,某些记录(不是全部)opDetails列
"opDetails" : "\u0000\u0000\u0000\u0000\u0000\u0000\",
(以及更多功能\u0000)。
opDetails字段包含HTML片段。我猜它与该内容有关,可能与CHARSET有关,但这并不能解释为什么只有在导入大量行时才会出现错误。通过一组12行导入的同一行可以正常工作。
同样的测试,在一个Windows盒子上的全套数据与MariaDB运行在该主机上(即没有Ubuntu或WSL等)都完美地工作。
我尝试将表的字符集设置为utf8以匹配数据库默认值,但没有效果。我假设这是某种Windows WSL问题,但我正在Ubuntu主机内的容器上运行source
命令。
MariaDB数据文件夹使用卷进行Map,同样都在Ubuntu容器中:
volumes:
- ../flowt-docker-volumes/mariadb-data:/var/lib/mysql
有没有人能提供任何建议,而我通过,并尝试手动删除内容,直到它的工作?我真的在黑暗中这里。
**编辑:**我刚刚在Mac上运行了相同的导入过程,导入到OSX主机上的MariaDB容器中,以检查它是否 * 实际上 * 与Windows WSL等相关,OSX数据库是否存在相同的问题。所以,可能是MariaDB Docker问题?
**EDIT 2:**看起来它与opDetails的实际内容无关。对于显示症状的给定行,数据是否正确导入似乎取决于我导入的行数!对于少量行,一切正常。对于大量行,会缺少数据,但总是相同的行和opDetails字段。我将尝试以小块导入,但总的来说表并不那么大!
**编辑3:**我尝试了一个没有卷的docker-compose,并将数据直接导入到MariaDB容器中。同样的问题。我想知道这是文件系统不兼容还是某种速度问题。是的,抓住救命稻草!
谢谢你,默里
1条答案
按热度按时间06odsfpq1#
好的。我让它工作了。:-)
我忽略了一个信息,它可能是无关紧要的,无论如何,是我从一个sql转储从
10.1.48-MariaDB-0ubuntu0.18.04.1
导入,因为我正在迁移一个遗留应用程序。所以,用我的docker-compose:
| 版本号|测试结果|
| - -|- -|
| mysql:最新的|数据已正确导入|
| mariadb:最新的|由于此问题而失败|
| 乐器名称:乐器名称:10.7.4|由于此问题而失败|
| 玛丽亚b:玛丽亚b:10.7|由于此问题而失败|
| 马里亚德布:10.6|数据已正确导入|
| 马里亚德布:10.5|数据已正确导入|
| mariadb :10.2|数据已正确导入|
重要提示:请记住在两次测试之间完全删除外部卷装载文件夹内容!
所以,现在我不确定这个问题是我需要注意的某种sql不兼容,还是v10.6和10.7之间引入的bug,所以我没有记录bug报告。如果其他更专业的人认为这是bug,我很乐意报告。
现在我很高兴使用10.6,这样我就可以进行迁移-最后期限即将到来!
所以,这算是“解决”了。
谢谢你所有的帮助。如果我发现任何进一步的东西,我会张贴回这里。默里