docker的mysql8.0.34版本升级过程中的问题和数据恢复

#本次升级原因一是没有妥善处理好mysql8.0.34升级8.0.38过程中报错线程不足问题,强行升级为8.1.0版本,并且参考网上修复教程删除了idb文件、等问题导致问题越来越严重,本次数据库数据为5000W左右,修复后最终缺失两个表,但是主数据没有影响,在此总结。
#如果docker版本的数据库升级不报错句柄数不足,线程不足等,在确认数据组ulimit数量正确和docker添加参数后启动依旧报错的情况下,可以添加特殊权限参数,查看是否能够正常启动和升级。

一、mysql8.0.34升级msqyl8.0.37过程中出现的报错
1.提示线程不足
解决过程: 尝试通过修改宿主机limit设置,增加线程;通过指定docker启动参数,指定docker数据库启动时的limit进程数,但是没有解决问题,通过后续排查,因是宿主机相关权限不足或限制导致的无法正常启动,
但是由于无法启动,已将8.0.34直接升级为8.1.0,虽然正常启动,但是后续无法降级和升级成8.4.1的数据库版本,并在过程中可能导致了数据库的.idb文件损坏或者相关文件确实的问题。
下面是后续数据库使用特殊权限启动的命令和参数:

docker run -p 6306:3306 --name mysql8038 --restart always   --privileged=true  -v ./mysql/conf:/etc/mysql/conf.d -v ./mysql/logs:/logs -v ./mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=密码 -d mysql:8.0.38 --lower_case_table_names=1

2.初始化字典验证不通过
解决过程: 处理完成后,后续报错为数据库初始化词典验证不通过,尝试通过innodb_force_recovery = 参数修复数据库,但是没有成功,后续通过重新启动相同版本数据库,并且拷贝mysql.idb文件后通过字典初始化。

3.恢复数据
解决过程:数据库正常启动,但是在持久化目录中,不显示数据和表,并且创建表时报错,表已存在。 后续通过在其他目录的相同版本中创建数据库和表、表结构。并重新将mysql.idb替换,重启。
通过重新关联表
ALTER TABLE <database_name>.<table_name> IMPORT TABLESPACE;
完成数据的恢复

4.过程中的报错
一、InnoDB 初始化失败

 '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
2024-07-17T09:32:44.065574Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2024-07-17T09:32:44.067921Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.38) starting as process 1
2024-07-17T09:32:44.075436Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-07-17T09:32:44.118663Z 1 [ERROR] [MY-012592] [InnoDB] Operating system error number 2 in a file operation.
2024-07-17T09:32:44.118723Z 1 [ERROR] [MY-012593] [InnoDB] The error means the system cannot find the path specified.
2024-07-17T09:32:44.118739Z 1 [ERROR] [MY-012594] [InnoDB] If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them.
2024-07-17T09:32:44.118759Z 1 [ERROR] [MY-012646] [InnoDB] File ./ibdata1: 'open' returned OS error 71. Cannot continue operation

处理:删除ibdata1文件,将其他持久化路径下的mysql.idb文件复制过去

二、关联和修复失败
ERROR 1815 (HY000): Internal error: Cannot reset LSNs in table net_log.inspection_record : Data structure corruption

处理:REPAIR TABLE net_log.inspection_record; 尝试修复表,运气好会成功
处理: docker启动命令添加参数 --innodb_force_recovery = 3 ,损坏程度的不同,可以尝试使用不同的值(1 到 6),存在数据损坏更加严重的危险,启动后尝试修复表REPAIR TABLE net_log.inspection_record;
处理: 验证是否修复SHOW TABLE STATUS LIKE ‘inspection_record’;,如果修复则去除 --innodb_force_recovery = 3 参数重启启动数据库

三、报错线程不足

'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
2024-07-17T02:50:26.978606Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2024-07-17T02:50:27.304599Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.4.1) starting as process 1
2024-07-17T02:50:27.313159Z 0 [Warning] [MY-010001] [Server] Can't create thread to handle bootstrap (errno: 1)
2024-07-17T02:50:27.313219Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2024-07-17T02:50:27.313232Z 0 [ERROR] [MY-010119] [Server] Aborting
2024-07-17T02:50:27.314894Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.4.1)  MySQL Community Server - GPL.
2024-07-17T02:50:27.314907Z 0 [System] [MY-015016] [Server] MySQL Server - end.

处理: docker启动添加参数 --privileged=true 以特殊权限启动数据库。
原因可能是权限不足导致。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生不过大梦一场

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值