Skip to content

RocksDB踩坑之路-MySQL从InnoDB升级到RocksDB

参考

背景

生产环境,MySQL数据库为5.7,由于系统配置为8核16G,性能不足以支撑现有业务,尝试将MySQL数据库从InnoDB升级到MySQL 8.0 RocksDB,发现实际性能反而更差,后面将数据库,切换回到MySQL 5.7 InnoDB

准备工作

减少碎片化

image-20250526164610904

性能提升

image-20250526201233480

效果

升级成功后,通过观察,发现升级后的性能已经大大提升,但是CPU负载却增加很高。而且配置还从8核16G升级到了16核32G,CPU负载增加后,性能下降了。

image-20250526161241870

image-20250526163247575

image-20250526163306545

出现很多致命缺陷

image-20250526174516839

降级回到InnoDB

由于用mysqldump导出数据库结构后,发现默认使用的是ENGINE=ROCKSDB。所以,需要用旧数据库的结构,新数据库只导出数据。

bash
mysqldump -t database_name > database_name.20250526.sql
bash
mysqldump --single-transaction --default-character-set=utf8mb4 -h mysql2 --port 3306 -u username -p'******' -t database_name > database_name.20250526.sql

升级步骤

  1. 停止nginx
  2. 停止所有服务
  3. 开始备份数据
  4. 修改docker文件配置-host改成数据库对应的
  5. 开始恢复数据
  6. 同步对比数据库结构
  7. 新数据库配置项修改
  8. 业务主流程(云课堂、社区)

停止所有服务

image-20250527000702480

购买示例,验证性能

因为8.0与5.7大字段( varchar(8126))冲突。所以,改成MySQL5.7

image-20250527015619314

验证只读示例:

image-20250527052058509

升级数据库存储空间

image-20250527052734820

新数据库OK

image-20250527052803817

续费:

image-20250527054759495

再见,不靠谱的ROCKSDB

image-20250527020025355

导入数据,坐等数据落库。

image-20250527023442391

性能压测

(RocksDB)10次循环,10个并发

image-20250527000215315

(InnoDB)10次循环,10个并发

image-20250527045919832

人生感悟