写这篇博客的日期是2020.12.31,新的一年又快到了,当别人都忙着庆祝2021年的到来的时候,突然想起来,我的服务器要到期了!于是赶紧登录后台各种备份,转移数据到我另外一台有效期到2023年8月份的服务器。由于续费太太太太贵了,相当于好几个月的生活费呢,续费是不可能续费了,于是抽空开始着手服务器搬家。因为我的另外一台服务器和当前正在用的服务器不在同一个厂商,所以没有办法直接制作镜像。害,没钱就拿操作来凑吧......
在搬家中遇到的一些问题,接下的几天我会陆续通过博客的形式记录下来,希望能够帮助到屏幕前有相同问题的你。同时也提醒我自己在之后的搬网站搬家过程中也注意一下相关问题。
好了,废话就不说了,咱们切入正题:
问题1:迁移后丢失少量数据表。
问题出现的背景:使用宝塔面板导入数据库。
解决方法:使用phpMyAdimin,或者其他数据库管理软件导入,而不要使用宝塔面板导入数据库。
问题2:迁移后数据库内的特殊符号,小表情等变为?。
问题出现的背景:使用宝塔面板导出数据库。
解决方法:使用phpMyAdimin,或者其他数据库管理软件导出,而不要使用宝塔面板导出数据库。
问题3:迁移后的数据库字段部分类型的长度丢失,部分未丢失。
问题出现的背景:迁移前数据库版本为MySQL 5.7.32(低于8.0.17),迁移后数据库版本为MySQL 8.0.20(高于8.0.17)。
解决方法:①使用低于8.0.17版本的MySQL数据库,②就保持现状,因为使用8.0.17之后的版本不支持。
知识点:
1.宝塔面板定时任务备份的数据库是.tar.gz压缩格式(即gzip压缩格式),手动备份数据库的压缩格式为.zip格式。
2.宝塔面板导出数据库可能会有字符集的问题,比如可能数据库中的特殊字符会变成?
3.宝塔面板导入数据库可能会出现个别数据表导入失败的问题,但是没有任何错误提示,提示还是成功。
4.为了数据不丢失,大家还是老老实实的登录phpMyAdmin,然后导出和数据库字符集相同的文件(比如utf-8)。
2.从MySQL 8.0.17版本开始,TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT类型的显示宽度将失效(是8.0.17版本之后,之前的不受影响)。
至此,本文干货结束,下面是详细记录的问题发现及解决步骤:
网站搬家的时候涉及到网站数据库的搬家,于是便直接下载了宝塔面板内的自动备份文件,然后传到目的数据库中,但是发现两个数据表变少了,打开网站一看,果不其然报错了,这还得了,赶紧找Bug!
迁移前:
迁移后:
首先,联想到可能是宝塔面板导出数据库的问题,于是我在宝塔面板后台又手动备份了一遍数据库,竟然发现手动备份的数据库格式为.zip(跟定时任务备份的数据库文件命名和压缩方式都不同),清空目的数据库后再次导入,发现问题依然没有解决。同时发现了一个严重的问题,就是数据库中的特殊字符竟然全部变成了?。
于是拿记事本打开导出的.sql文件,果然,所有的特殊字符全变成了?,这说明问题就出现在数据库的导出上。(所以以后还是别偷懒,用宝塔面板的一键导出有问题,老老实实的去数据库里面导)
(别问我为什么不用Notepad++,那玩意儿的作者说过啥咱们都知道,咱不稀罕用它!)
难道是宝塔面板导出数据库的时候出的问题?于是换了个思路,不从宝塔面板数据库备份那个窗口备份数据库然后再导出了,用phpMyAdmin打开相应数据库,直接导出,然后通过目标服务器的宝塔面板导入到目标数据库中。
再次检查导入的数据,发现特殊符号可以正常查看了,于是激动的跑去再次打开网站,发现网站还是报错,再仔细一看...数据表还是缺了几个没有倒入进来......
折腾了半天,最后还是决定直接用phpMyAdmin数据库管理后台导入.sql文件,然后emm...问题就解决了。
就解决了!
正当我高兴的时候,突然发现,数据表是没缺,数据表里面的数据行数也是对的,但是为啥大小都差一点点呢?
我拿两个数据库对比了半天,最后才发现...有些类型的长度丢失了(如下图)
迁移前
迁移后
(扯个题外话,知道的同学可能一眼就看出来这个是Discuz Q!的数据库哈哈)
郁闷至极,打开百度一搜,啊哈,原来不是我一个人遇到了这样的问题。
参考了这篇博文:https://blog.csdn.net/shunshengli/article/details/106473613
看完之后才发现,这个其实不算是一个问题,只是说做了一些调整而已。如果说一定需要添加限制的话,可以将MySQL降级到8.0.17版本以下。
附上官网的说明&链接:https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8-0-19.html
MySQL Server 8.0.17 deprecated the display width for the TINYINT
, SMALLINT
, MEDIUMINT
, INT
, and BIGINT
data types when the ZEROFILL
modifier is not used, and MySQL Server 8.0.19 has removed the display width for those data types from results of SHOW CREATE TABLE
, SHOW CREATE FUNCTION
, and queries on INFORMATION_SCHEMA.COLUMNS
, INFORMATION_SCHEMA.ROUTINES
, andINFORMATION_SCHEMA.PARAMETERS
(except for the display width for signed TINYINT(1)
). This patch adjusts Connector/J to those recent changes of MySQL Server and, as a result, DatabaseMetaData
, ParameterMetaData
, and ResultSetMetaData
now report identical results for all the above-mentioned integer types and also for the FLOAT
and DOUBLE
data types. (Bug #30477722)
根据官网资料可知:从8.0.17版本开始,TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT类型的显示宽度将失效。
好啦,这次遇到的问题都搞明白啦,我们下期再见啦,拜拜~
本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。