k8s集群下mysql容器更换pvc存储迁移数据,报错InnoDB: Your database may be corrupt

本文主要是介绍k8s集群下mysql容器更换pvc存储迁移数据,报错InnoDB: Your database may be corrupt,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景:

在业务生产环境维护过程中会出现k8s集群下mysql容器需要更换pvc存储的场景,更换pvc存储就必须得做数据迁移,不然会出现业务数据丢失的情况。实施的方案主要有两种:

方案一:
1、将需要迁移的mysql容器里的数据通过mysqldump的方式导出来;
2、然后更换pvc存储,然后通过source 数据文件.sql的方式导入到新的数据库中;
方案二:

1、先新建pvc存储,然后挂载到mysql容器中的另一个目录上;
2、然后在容器里将mysql的数据复制到新的pvc存储挂载的目录上,修改权限和属主;

3、替换旧的pvc存储,然后mysql容器;

二、实施mysql容器数据迁移:

这里主要选择是方案二的操作。

1、创建新的pvc存储:

 

2、在mysql容器上挂载新pvc存储:

 

这里是将新pvc存储挂载mysql容器的/mnt目录下,记得生效容器配置。 

3、登入到mysql容器里cp迁移数据:

 cd到mysql存放数据的目录,这里默认的是/var/lib/mysql的

root@mysql-ozthj-b7b7cb9cd-m8hr4:/# cd /var/lib/mysql
root@mysql-ozthj-b7b7cb9cd-m8hr4:/var/lib/mysql# ls
auto.cnf    ca.pem           client-key.pem  ib_logfile0  ibdata1  mysql               private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   performance_schema  public_key.pem   server-key.pem   xxl_job

然后通过cp命令将/var/lib/mysql目录下的所有数据复制到/mnt/目录下,并设置属主: 

root@mysql-ozthj-b7b7cb9cd-m8hr4:/var/lib/mysql# ls
auto.cnf    ca.pem           client-key.pem  ib_logfile0  ibdata1  mysql               private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   performance_schema  public_key.pem   server-key.pem   xxl_job
root@mysql-ozthj-b7b7cb9cd-m8hr4:/var/lib/mysql# cp -r * /mnt/
root@mysql-ozthj-b7b7cb9cd-m8hr4:/var/lib/mysql# cd /mnt
root@mysql-ozthj-b7b7cb9cd-m8hr4:/mnt# ls
auto.cnf    ca.pem           client-key.pem  ib_logfile0  ibdata1  lost+found  performance_schema  public_key.pem   server-key.pem  xxl_job
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   mysql       private_key.pem     server-cert.pem  sys
root@mysql-ozthj-b7b7cb9cd-m8hr4:/mnt# chown -R mysql:mysql *
root@mysql-ozthj-b7b7cb9cd-m8hr4:/mnt# ls -l
total 188496
-rw-r----- 1 mysql mysql       56 Jan 31 03:07 auto.cnf
-rw------- 1 mysql mysql     1676 Jan 31 03:07 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 Jan 31 03:07 ca.pem
-rw-r--r-- 1 mysql mysql     1112 Jan 31 03:07 client-cert.pem
-rw------- 1 mysql mysql     1680 Jan 31 03:07 client-key.pem
-rw-r----- 1 mysql mysql      678 Jan 31 03:07 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648 Jan 31 03:07 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Jan 31 03:07 ib_logfile1
-rw-r----- 1 mysql mysql 79691776 Jan 31 03:07 ibdata1
-rw-r----- 1 mysql mysql 12582912 Jan 31 03:07 ibtmp1
drwx------ 2 mysql mysql    16384 Jan 31 03:02 lost+found
drwxr-x--- 2 mysql mysql     4096 Jan 31 03:07 mysql
drwxr-x--- 2 mysql mysql     4096 Jan 31 03:07 performance_schema
-rw------- 1 mysql mysql     1680 Jan 31 03:07 private_key.pem
-rw-r--r-- 1 mysql mysql      452 Jan 31 03:07 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 Jan 31 03:07 server-cert.pem
-rw------- 1 mysql mysql     1676 Jan 31 03:07 server-key.pem
drwxr-x--- 2 mysql mysql    12288 Jan 31 03:07 sys
drwxr-x--- 2 mysql mysql     4096 Jan 31 03:07 xxl_job

4、然后替换pvc存储:

 5、mysql容器运行时可能有一个报错:

InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but

解决方案:

需要删除两个文件即可:

root@mysql-ozthj-b7b7cb9cd-m8hr4:/var/lib/mysql# rm -rfv ib_logfile0
root@mysql-ozthj-b7b7cb9cd-m8hr4:/var/lib/mysql# rm -rfv ib_logfile1

然后重新启动一下mysql容器即可:

[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.386544Z 0 [Note] Plugin 'FEDERATED' is disabled.
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.396895Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.396920Z 0 [Note] Skipping generation of SSL certificates as certificate files are present in data directory.
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.398866Z 0 [Warning] CA certificate ca.pem is self signed.
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.398926Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.399541Z 0 [Note] InnoDB: Buffer pool(s) load completed at 240131  3:14:42
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.400190Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.400242Z 0 [Note] IPv6 is available.
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.400257Z 0 [Note]   - '::' resolves to '::';
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.400277Z 0 [Note] Server socket created on IP: '::'.
[mysql] [2024-01-31 11:14:42] 2024-01-31T03:14:42.402599Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
[mysql] [2024-01-31 11:14:43] 2024-01-31T03:14:43.014325Z 0 [Note] Event Scheduler: Loaded 0 events
[mysql] [2024-01-31 11:14:43] 2024-01-31T03:14:43.014613Z 0 [Note] mysqld: ready for connections.
[mysql] [2024-01-31 11:14:43] Version: '5.7.32'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

三、验证业务数据:

经过业务人员的验证及功能验证,数据是正确的,没有任何问题。

这篇关于k8s集群下mysql容器更换pvc存储迁移数据,报错InnoDB: Your database may be corrupt的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663817

相关文章

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE