MySQL 8.0 Public Key Retrieval is not allowed 错误的解决方法
在使用 MySQL 8.0 时重启应用后提示 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
最简单的解决方法是在连接后面添加 allowPublicKeyRetrieval=true
文档中(https://mysql-net.github.io/MySqlConnector/connection-options/)给出的解释是:
如果用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥;可以在连接中通过 ServerRSAPublicKeyFile 指定服务器的 RSA 公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥;但是需要注意的是 AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以 ...
Ceph集群部署
一、Ceph 简介
一个 Ceph 存储集群需要至少一个 Ceph 监视器、Ceph 管理器和 Ceph OSD(对象存储守护进程)。在运行 Ceph 文件系统客户端时,也需要 Ceph 元数据服务器。
Monitors:
Ceph 监视器(ceph-mon)维护着展示集群状态的各种图表,包括监视器图、管理器图、OSD 图、MDS 图和 CRUSH 图。这些图是 Ceph 守护进程相互协调所必需的关键集群状态。
监视器还负责管理守护进程和客户端之间的身份验证。为了实现冗余和高可用性,通常需要至少三个监视器。
Managers: Ceph Manager守护程序(ceph-mgr)
负责跟踪运行时指标和 Ceph 群集的当前状态,包括存储利用率、当前性能指标和系统负载。
Ceph Manager 守护程序还托管基于 python 的模块来管理和公开 Ceph 群集信息,包括基于 Web 的Ceph 仪表板和 REST API。高可用性通常需要至少两个管理器。
OSDs: Ceph OSD (object storage daemon, ceph-osd)存储数据,处理 ...
Ceph 安装记录
ceph 安装记录
bash12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667sudo suapt install -y python-is-python3 systemd chronychronyc sources172.31.18.113 ceph-01172.31.26.40 ceph-02172.31.24.19 ceph-03# 安装 dockersudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg1 gnupg2curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -apt-key fingerprint 0EBFCD88sudo ad ...
vi 常用命令
Vi 常用命令进入 vi 的命令
命令
描述
vi filename
打开或新建文件,并将光标置于第一行首
vi +n filename
打开文件,并将光标置于第 n 行首
vi + filename
打开文件,并将光标置于最后一行首
vi +/pattern filename
打开文件,并将光标置于第一个与 pattern 匹配的串处
vi -r filename
在上次正用 vi 编辑时发生系统崩溃,恢复 filename
vi filename….filename
打开多个文件,依次进行编辑
移动光标类命令
命令
描述
h
光标左移一个字符
l
光标右移一个字符
space
光标右移一个字符
Backspace
光标左移一个字符
k 或 Ctrl+p
光标上移一行
j 或 Ctrl+n
光标下移一行
Enter
光标下移一行
w 或 W
光标右移一个字至字首
b 或 B
光标左移一个字至字首
e 或 E
光标右移一个字至字尾
(
光标移至句首
)
光标移至句尾
{
光标移至段 ...
Java 精选面试题 (持续更新)
Java 基础为什么 HashMap 是线程不安全的?在 jdk1.8 中,在多线程环境下,会发生数据覆盖的情况。
jdk1.8 中 HashMap在 jdk1.8 中对 HashMap 进行了优化,在发生 hash 碰撞,不再采用头插法方式,而是直接插入链表尾部,因此不会出现环形链表的情况,但是在多线程的情况下仍然不安全,这里我们看 jdk1.8 中 HashMap 的 put 操作源码:
123456789101112131415161718192021222324252627282930313233343536373839404142final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i; if ((tab = table) == null || (n = tab.length) == 0) ...
HashMap 与 TreeMap
HashMap 和 TreeMap 的实现HashMap:基于哈希表实现。使用 HashMap 要求添加的键类明确定义了 hashCode()和 equals() [可以重写 hashCode()和 equals()] ,为了优化 HashMap 空间的使用,您可以调优初始容量和负载因子。
HashMap(): 构建一个空的哈希映像
HashMap(Map m): 构建一个哈希映像,并且添加映像 m 的所有映射
HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像
HashMap(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空的哈希映像
TreeMap:基于红黑树实现。TreeMap 没有调优选项,因为该树总处于平衡状态。
TreeMap():构建一个空的映像树
TreeMap(Map m): 构建一个映像树,并且添加映像 m 中所有元素
TreeMap(Comparator c): 构建一个映像树,并且使用特定的比较器对关键字进行排序
TreeMap(SortedMap ...






