kubernetes mysql-StatefulSet报错处理
我们使用网上mysql-StatefulSet集群教程时候mysql-1启动错误,init-error。
第一次尝试解决:我从官网上下载yaml部署依然报错。
第二次尝试解决:网上换各种版本的yaml部署依旧报错。
第三次尝试解决:自己手动加mysql集群密码,依旧报密码错误之类的问题。
第四次尝试解决:不用动态PVC模式,手动创建pv。依旧报错
第五次尝试解决:删除动态pvc和sc nfs-client-provisioner 等等,使用网上n多版本的依旧报错。
第六次尝试解决:更换xtrabackup image,依旧报错
第n次尝试解决:心态早崩溃了,尼玛官网给的yaml都不行。让我怎么弄啊。
第n+1次尝试解决:手动创建xtrabackup pod,进去一探究竟。终于水落石出。
查看报错内容如下:
[root@master mysql]# kubolor logs -f mysql-1 -c clone-mysql + [[ -d /var/lib/mysql/mysql ]] ++ hostname + [[ mysql-1 =~ -([0-9]+)$ ]] + ordinal=1 + [[ 1 -eq 0 ]] + ncat --recv-only mysql-0.mysql 3307 + xbstream -x -C /var/lib/mysql + xtrabackup --prepare --target-dir=/var/lib/mysql xtrabackup version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2) xtrabackup: cd to /var/lib/mysql xtrabackup: Error: cannot open ./xtrabackup_checkpoints xtrabackup: error: xtrabackup_read_metadata() xtrabackup: This target seems not to have correct metadata... InnoDB: Number of pools: 1 InnoDB: Operating system error number 2 in a file operation. InnoDB: The error means the system cannot find the path specified. xtrabackup: Warning: cannot open ./xtrabackup_logfile. will try to find. InnoDB: Operating system error number 2 in a file operation. InnoDB: The error means the system cannot find the path specified. xtrabackup: Fatal error: cannot find ./xtrabackup_logfile. xtrabackup: Error: xtrabackup_init_temp_log() failed.
查看各种资料,这个报错是因为/var/lib/mysql没有文件。所以恢复失败。有了原因就知道怎么处理了,先保留一下想法,你们留言发挥一下怎么解决吧。我真的快疯了。
2022年9月15日补充,过了这么久很快有要忘了。赶紧补习一下知识。其实就是官方文档没有指定datadir=/var/lib/mysql的问题。在configmap里写好就行了。下面是我的configmap.yaml配置文件
apiVersion: v1 kind: ConfigMap metadata: name: mysql namespace: default labels: app: mysql data: master.cnf: | # Apply this config only on the master. [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] log-bin datadir=/var/lib/mysql default-time_zone = '+8:00' max_connections=3000 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci' slave.cnf: | # Apply this config only on slave. [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] super-read-only datadir=/var/lib/mysql default-time_zone = '+8:00' max_connections=3000 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'