一次升级MySQL版本的记录
多灾多难!
Mysql 索引长度限制
事情的起因是这样的,正在准备一个新项目,测试平台的时候发现新建数据库的时候发生错误Specified key was too long; max key length is 767 bytes
,一查才知道 MySql 5.6 的索引最大长度是 767bytes,5.7 的最大长度是 3000,本来网上查出来有几种解决方案:
- 前缀索引,不使用列的全部内容作为索引,使用一部分,例如在原有的例子中我们使用了 test 列作为索引无法建表,但是如果改为使用 test(255)作为索引就可以了,这就是所谓的使用前缀索引;
- 升级 MySql;
- 缩小索引长度(256 缩小到 255 以下);
- 修改字符集(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] |
然后就发现 CPU 狂转,tomcat 又没启动,然后了解到,tomcat 的 startup.sh 是不会常驻进程的,运行完启动代码就完事了,supervisor 以为他死了就会给重启,结果可想而知,所以这里不能配 autorestart。
FME 读取器读取数据条数和起始位置
Postgis 空间数据库配置好之后,我使用 FME 导入数据,当然这个中间有很多处理运算,当数据量太大之后,FME 会报错说内存不够用了,虽然这个时候我电脑的内存一半都没用上,反正他说内存不够用就是不够用了,怎么也转换不成功,所以以前导入的时候我都手动给数据分成好多份,这次导入的时候发现 FEM 的读取器可以设置数据读取条数以及读取的起始位置,这就不用我手动分割数据了。
GeoServer 中文注记乱码问题
正常部署的 GeoServer 中文注记符号会是乱码,设置的中文字体不可用,我记得以前是给 Geoserver 添加字体来着,不过这次发现,直接改变 SLD 文件的编码就可以解决。
|
GeoServer 无法显示默认符号的问题
刚部署的 Geoserver 在设置符号的时候发现符号示例是破损图片,直接访问图片地址得到如下结果
|
搜索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> |
GeoServer图层组符号不会根据图层符号变化而变化
本来以为改变了图层符号,相关的图层组的符号也会变化的,然而并不会,需要删了重新添加图层才行。