一次升级MySQL版本的记录

多灾多难!

Mysql 索引长度限制

事情的起因是这样的,正在准备一个新项目,测试平台的时候发现新建数据库的时候发生错误Specified key was too long; max key length is 767 bytes,一查才知道 MySql 5.6 的索引最大长度是 767bytes,5.7 的最大长度是 3000,本来网上查出来有几种解决方案:

  1. 前缀索引,不使用列的全部内容作为索引,使用一部分,例如在原有的例子中我们使用了 test 列作为索引无法建表,但是如果改为使用 test(255)作为索引就可以了,这就是所谓的使用前缀索引;
  2. 升级 MySql;
  3. 缩小索引长度(256 缩小到 255 以下);
  4. 修改字符集(utf-8 修改到 GBK)。

最终我想一劳永逸直接升级到 5.7 算了。

宝塔升级 MySQL 的坑

我的 MySql,Nginx 和 Tomcat 是使用宝塔面板一键部署的,以及部署在 MySql 里的若干数据库,部署在 Nginx 里的若干网站,部署在 Tomcat 里的 Geoserver,以及一个基于 PostgreSQL11 的一个 postgis 空间数据库。

既然使用宝塔面板部署的,我也就用宝塔面板升级了,然而,失败,安装进度可以到 49%左右,然后 CPU 保持 15%左右的运转几个小时,然后失败,MySql 就此不见了,还好数据在升级之前做了备份。

其实这个过程我试了好几次,甚至宝塔面板都崩了启动不了了,重装了个宝塔面板重新部署各种网站,浪费了好多时间。。。最后算了,给之前的 MySql 卸载干净,然后直接独立安装 MySql,不用宝塔了。

MySQL 与 PostgreSQL 的冲突

首先卸载 MySql 相关的包

sudo apt-get remove mysql-*

当输入这条命令的时候会发现,他竟然会卸载 PostgresSQL 相关的包,于是我小心翼翼一个个卸载与 mysql 相关的,保留与 PostgresSQL 相关的。

然后删除与 MySql 相关的数据

dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

然后就会发现,MySQL 的数据被删了,PostgresSQL 的数据文件也被删了,具体表现就是连上数据库,库在,表在,点开表的时候提示说表相关的文件不在了。

于是重装 PostgreSQL 和 MySQL 以及各种数据库配置,恢复数据。

宝塔部署 tomcat 的坑

前面说到宝塔面板崩了重装了,用宝塔部署的 tomcat 已经在 tomcat 里面的 geoserver 也没了,使用宝塔面板安装 tomcat 的时候发现出问题了,怎么也无法运行 spring 的应用(Geoserver 是 Spring 应用),包括 tomcat 自己的 manager 也启动不了。于是决定独立自己部署 tomcat,不用宝塔了。

Supervisor 配置 tomcat

我是用 supervisor 作为守护进程工具的,运行这 dotnet 应用、frp 应用等等,自己部署 tomcat 的时候 tomcat 直接使用 starup.sh 启动,想着设置成自动启动,避免机器重启了还需要手动启动。然后照着以前的配置就给复制了一份:

[program:tomcat]
command=~/startup.sh
directory=~
autostart=true
autorestart=true

然后就发现 CPU 狂转,tomcat 又没启动,然后了解到,tomcat 的 startup.sh 是不会常驻进程的,运行完启动代码就完事了,supervisor 以为他死了就会给重启,结果可想而知,所以这里不能配 autorestart。

FME 读取器读取数据条数和起始位置

Postgis 空间数据库配置好之后,我使用 FME 导入数据,当然这个中间有很多处理运算,当数据量太大之后,FME 会报错说内存不够用了,虽然这个时候我电脑的内存一半都没用上,反正他说内存不够用就是不够用了,怎么也转换不成功,所以以前导入的时候我都手动给数据分成好多份,这次导入的时候发现 FEM 的读取器可以设置数据读取条数以及读取的起始位置,这就不用我手动分割数据了。

FME读取器

GeoServer 中文注记乱码问题

正常部署的 GeoServer 中文注记符号会是乱码,设置的中文字体不可用,我记得以前是给 Geoserver 添加字体来着,不过这次发现,直接改变 SLD 文件的编码就可以解决。

<?xml version="1.0" encoding="GB2312"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1.0" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:se="http://www.opengis.net/se">
.....
</StyledLayerDescriptor>

GeoServer 无法显示默认符号的问题

刚部署的 Geoserver 在设置符号的时候发现符号示例是破损图片,直接访问图片地址得到如下结果

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ServiceExceptionReport SYSTEM "http://39.100.107.70:8080/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1" >
<ServiceException>
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
Could not initialize class sun.awt.X11GraphicsEnvironment
</ServiceException>
</ServiceExceptionReport>

搜索Could not initialize class sun.awt.X11GraphicsEnvironment获得解决答案,在修改${TOMCAT_HOME}/bin/catalina.sh 开头里加上一代码。

CATALINA_OPTS=-Djava.awt.headless=true

Geoserver2.16 支持 SVG 符号了

忘了以前用的 Geoserver 什么版本了,用 QGIS 制作的符号文件,中间用到了自定义的 SVG 符号,结果在部署到 Geoserver 时不支持,最后给 svg 转换成 png 后才能再能发布,这次使用的时候意外发现竟然支持 svg 了,这就方便了。

<se:PointSymbolizer>
<se:Graphic>
<!--Parametric SVG-->
<se:ExternalGraphic>
<se:OnlineResource xlink:href="http://~/gc234.svg?fill=%23232323&amp;fill-opacity=1&amp;outline=%23232323&amp;outline-opacity=1&amp;outline-width=1" xlink:type="simple"/>
<se:Format>image/svg+xml</se:Format>
</se:ExternalGraphic>
<!--Plain SVG fallback, no parameters-->
<se:ExternalGraphic>
<se:OnlineResource xlink:href="http://~/gc234.svg" xlink:type="simple"/>
<se:Format>image/svg+xml</se:Format>
</se:ExternalGraphic>
<!--Well known marker fallback-->
<se:Mark>
<se:WellKnownName>square</se:WellKnownName>
<se:Fill>
<se:SvgParameter name="fill">#232323</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
</se:Stroke>
</se:Mark>
<se:Size>11</se:Size>
</se:Graphic>
</se:PointSymbolizer>

GeoServer图层组符号不会根据图层符号变化而变化

本来以为改变了图层符号,相关的图层组的符号也会变化的,然而并不会,需要删了重新添加图层才行。

加载评论框需要翻墙