重置 GitLab 管理员密码
手里有一个旧版本的私有化部署的 GitLab 数据,临时要启动一下看一下之前的代码。由于之前就是 Docker 部署的,所以在数据文件里查了下之前部署的版本号,直接就用 Docker 启动了。启动都很顺利,但是问题出在已经没人记得之前的管理员密码了,所以需要重置管理员密码。
手里有一个旧版本的私有化部署的 GitLab 数据,临时要启动一下看一下之前的代码。由于之前就是 Docker 部署的,所以在数据文件里查了下之前部署的版本号,直接就用 Docker 启动了。启动都很顺利,但是问题出在已经没人记得之前的管理员密码了,所以需要重置管理员密码。
由于 Chromebook 不是安卓就是 Linux 程序,那么比较起来还是 Linux 的观影体验比较好,毕竟在操作逻辑上还是 Linux 程序更加习惯。而 Linux 下的视频播放器,首选就是 VLC 了——支持的格式多,用户基数大且开源。VLC 的安装过程不再赘述,由于 Linux 子系统选择的是 Debian,直接 sudo apt install vlc
即可。安装后会自动生成软件图标,点击即可使用。
理论上 VLC 是支持中文的,但是翻遍了系统设置也没找到更改语言的地方。百度到的截图也确实都是在设置界面更改,而且一个个也都是说是 Linux 下的,但是自己这边就是没有。老规矩,百度不到去谷歌,只能说中文的搜索结果还是不行,抄来抄去就算了,还都是错的。
线上生产环境一直使用 Rancher(v2.6.5) 管理集群,在某一次通过 Web 查看 pod 日志时,因为 Rancher 默认查看 30 分钟的日志,而当时服务日志量过大,导致无法查看日志。几番搜索尝试后,发现重启机器(后面发现其实重启 rancher 的 docker 容器即可)可以解决这个问题,但后面某次在使用 kubectl 时又发生了同样的问题。仔细查看发现,出现症状后不只是 Web 无法查看日志,通过命令行 kubectl 命令也无法管理集群,唯一可以执行 kubectl 的地方是 Rancher Web 上面的命令行。因为生产环境不能频繁重启机器,所以觉得这次一定要找到好用的解决方案,好在最后也成功解决。
好不容易开到了 Oracle 的 Arm 机器,因为内存还是比较多的,所以打算用 Rancher 安装 k8s 使用。由于以前在生产环境使用 Ubuntu 安装过 Rancher,所以直接上手,可没想到这次一路波折。 因为 CentOS 8 已经停止维护了,Oracle 上面 CentOS 的镜像也更新成为了 CentOS Stream,加上也不太想用 Oracle Linux,所以直接开了最新的 Ubuntu 22.04,噩梦开始的地方。
虽然现在 Chrome 的版本号已经刷到了 101(目前个人在使用 103 的开发者版本),但是在 Chromebook 中仍然没有原生支持在其 Linux 子系统中输入除了英文之外的其他语言。所以如果想要在 Linux 及其 GUI 程序中输入中文,则需要自己安装中文输入法并配置相关环境。
fydeOS 作为本地化的 Chrome OS,官方编写了在 Linux 子系统中安装中文输入法的文章,但是步骤并不完整,导致半路无法进行,且使用了 deprecated 的文件配置环境变量,存在某个版本被删除导致出错的风险,所以重新整理下完整步骤。
之前我们提到项目上有一个跨库进行 MySQL join 操作的需求,当时选择使用了 MySQL 的 FEDERATED 存储引擎来解决这个问题,具体可以看 MySQL FEDERATED 存储引擎介绍及使用。但是 FEDERATED 本身只支持 MySQL 数据库,如果我们需要对多个不同种类的数据库进行关联操作,那么还是要依赖第三方组件来进行,比如这次要介绍的 Trino。
Trino 是基于 Java 开发的高性能的、分布式的大数据 SQL 查询引擎,支持基本上所有的常见数据源以及你所想象不到的中间件存储比如 Kafka,同时也支持在单个查询中使用多个数据源来进行关联查询。
官网:Trino
偶然间看到了一道算法题,第一眼看起来还挺简单,但是想了想发现不止这么简单,应该会有更优解。拿“波浪排序”作为关键字在百度上进行搜索,发现并没有相关题目。又以“sort wave”为关键字在谷歌上进行搜索,终于发现了相关解析,这里用自己的方式记录一下解题思路。
首先来看题目:
将给定的数组中的元素进行波浪形排序,输出任意正确结果。
波浪形排序是指: arr[0] ≥ arr[1] ≤ arr[2] ≥ arr[3] ≤ arr[4] ≥ arr[5]
例如:
输入: 1, 2, 6, 7, 5, 3, 4
输出: 4, 1, 7, 5, 6, 2, 3
由于项目上有着某些需求,所以需要使用 Sharding-JDBC。根据官方文档,引入 shardingsphere-jdbc-core
依赖并使用当前最新版本 5.1.0,结果在测试的过程中出现了两次 NoClassDefFoundError,分别记录一下解决过程。
项目上遇到了一个需求,需要在 MySQL(不同实例)进行跨库 join 操作。我们都知道如果是同一实例,那么 MySQL 跨库查询肯定是没有问题的,但是不同实例的跨库查询之前一直没有做过。不过以前还在用 Oracle 的时候,Oracle 有个功能叫做 DATABASE LINK(参见 CREATE DATABASE LINK),是将远程数据库映射到本地,这样就可以在一个实例中访问其他数据库了。在谷歌搜索 MySQL 跨库查询的时候,发现 MySQL 也有类似的东西,叫做 FEDERATED 存储引擎。所以我们就可以使用 FEDERATED 将需要 join 的远端表映射到本地数据库,这样在做查询的时候使用上就跟本地表一样了。
由于种种原因,项目上在做数据查询时,没有选择任何的 ORM 框架而是使用了 JdbcTemplate
进行数据库查询。查询出来也没做太多事情,只是简单地对数据做了下封装,然后直接返回给了前端。
1 | List<Map<String, Object>> data = new ArrayList<>(); |
本来一直岁月静好,知道某一天查了一张新表,然后后台报了异常:
1 | Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.demo.web.rest.util.ResponseEnvelope["data"]->com.demo.service.dto.SqlQueryDto["data"]->java.util.ArrayList[0]->java.util.LinkedHashMap["LOG_MSG"]->javax.sql.rowset.serial.SerialClob["asciiStream"]) |
乍一看,可以通过提示所说的设置 SerializationFeature.FAIL_ON_EMPTY_BEANS
为 false
来避免这个问题,但这个问题其实远远没有这么简单。