MySQL 5.7 vs 8.0,你选谁?网友:我继续原地踏步~

mysql8和5.7区别_MySQL8.0和MySQL 5的区别 虽然MySQL8.0.x都出来了,自己一直使用 5.7的版本,对于新的版本今天抽了些时间来了解一下新的特性。而对于新的版本的了解往往都是从版本区别开始的,今天便算是作一个笔记吧。Oracle发布新版本的MySQL时,直接从5.7.x 跳到了 8.0,可谓是一个大的版本跳跃,当然也可以从侧面反映,这里面的功能会有不少的变化,新版本的MySQL增加了不少的亮点。下面简要介绍 MySQL 8 中值得关注... 阅读详情

推荐阅读:

背景

测试mysql5.7和mysql8.0 分别在读写、只读、只写模式下不同并发时的性能(tps,qps)

前提

  • 测试使用版本为mysql5.7.22和mysql8.0.15
  • sysbench测试前先重启mysql服务,并清空os的cache(避免多次测试时命中缓存)
  • 每次进行测试都是新生成测试数据后再进行mysql5.7和mysql8.0的测试
  • 每次测试时保证mysql5.7和mysql8.0的配置参数一致

环境

机器
cat /etc/redhat-release | xargs echo '版本 ’ && dmidecode -s system-product-name | xargs echo '是否虚拟化 ’ && cat /proc/cpuinfo |grep “processor”|wc -l | xargs echo 'cpu核数 ’
版本 CentOS Linux release 7.5.1804 (Core)
是否虚拟化 KVM
cpu核数 4

myql5.7.22

5.7.22-log
innodb_buffer_pool_size 128M
innodb_log_buffer_size  64M
innodb_log_file_size    48M
binlog_format   ROW
log_bin ON
transaction_isolation   REPEATABLE-READ

mysql8.0.15

8.0.15
innodb_buffer_pool_size 128M
innodb_log_buffer_size  64M
innodb_log_file_size    48M
binlog_format   ROW
log_bin ON
transaction_isolation   REPEATABLE-READ

sysbench

sysbench -V
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)

测试

  • 在不同的持久化策略下(binlog, redo log持久化)mysql5.7和mysql8.0 在读写模式、只读模式、只写模式(oltp_read_write,oltp_read_only,oltp_write_only)下的性能表现
  • sysbench 测试时间为60s,测试的表数量为20
  • 测试分别在双1模式(安全性)和0 2模式(高性能)下进行
参数可选值含义
sync_binlog0binlog刷盘持久化由操作系统完成,性能好,存在丢失binlog的风险
sync_binlog1事务提交后刷盘持久化,最安全
sync_binlogN在每N个事务提交后进行刷盘持久化
innodb_flush_log_at_trx_commit0每秒钟写redo log 并刷盘持久化
innodb_flush_log_at_trx_commit1事务提交后写redo log 并刷盘持久化,最安全
innodb_flush_log_at_trx_commit2事务提交后写redo log , 每秒刷盘持久化

双1模式下

SHOW GLOBAL  VARIABLES WHERE Variable_name IN('sync_binlog','innodb_flush_log_at_trx_commit');
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
| sync_binlog                    | 1   |
+--------------------------------+-------+

mysql5.7和mysql8.0 在读写模式下的表现

  • 双1 配置,读写模式下,mysql5.7.22 和mysql8.0.15 tps 、qps 性能差不多,mysql8.0.15 在120 线程并发时,性能出现了下降抖动

mysql5.7和mysql8.0 在只读模式下的表现

  • 双1 配置,只读模式下,mysql5.7.22 的tps、qps比mysql8.0.15 好1/3 左右;并发线程数增加后,tps、qps并没有随着增加,反而出现了下降的趋势

mysql5.7和mysql8.0 在只写模式下的表现

  • 双1 配置,只写模式下,随着并发数的上升,mysql5.7.22 的性能比mysql8.0.15 好1/4左右

0 2 模式下

SHOW GLOBAL  VARIABLES WHERE Variable_name IN('sync_binlog','innodb_flush_log_at_trx_commit');
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2     |
| sync_binlog                    | 0   |
+--------------------------------+-------+

mysql5.7和mysql8.0 在读写模式下的表现

  • 0 2配置,读写模式下,并发数低时,mysql5.7.22性能好于mysql8.0.15; 并发数比较高时,mysql8.0.15 性能好于mysql5.7.22;在80 线程的并发以上时,性能开始下降

mysql5.7和mysql8.0 在只读模式下的表现

  • 0 2配置,只读模式下,mysql5.7.22性能比mysql8.0.15 好1/3左右;随着并发数的上升,性能也没有上升,反而有下降的趋势

mysql5.7和mysql8.0 在只写模式下的表现

  • 0 2 配置,只写模式下,mysql5.7.22的tps 抖动比较大;mysql5.7.22 的qps比mysql8.0.15好1/3左右

结论

  • 整体来看,mysql5.7.22在读写模式、只读模式、只写模式下的表现是优于mysql8.0.15的
  • 随着并行数的增加,性能表现不会也跟着增加,还会出现下降
  • 本次测试结果是在配置很低的情况下进行的,不代表绝对

注意
sysbench 需要设置–db-ps-mode=disable 禁用预编译语句,不然并发测试线程多时会报下面的错误
FATAL: mysql_stmt_prepare() failed
FATAL: MySQL error: 1461 “Can’t create more than max_prepared_stmt_count statements (current value: 16382)”
FATAL: mysql_stmt_prepare() failed
FATAL: MySQL error: 1461 “Can’t create more than max_prepared_stmt_count statements (current value: 16382)”
FATAL: thread_init' function failed: /usr/local/share/sysbench/oltp_common.lua:288: SQL API error FATAL: mysql_stmt_prepare() failed FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)" FATAL:thread_init’ function failed: /usr/local/share/sysbench/oltp_common.lua:288: SQL API error
FATAL: mysql_stmt_prepare() failed

使用脚本

 cat sysbench_test_mysql5.7_8.0_tps_qps.sh
#!/bin/bash
#用于sysbench 测试在读写模式、只读模式、只写模式下 mysql5.7和mysql8.0 的tps,qps
#nohup bash $0 >/tmp/sysbench_test 2>& 1 &
#

user=admin
passwd=admin
ports="8015 57222"
host=127.0.0.1
sysbench_test_mode="oltp_read_write oltp_read_only oltp_write_only"
sysbench_test_info_path=/tmp/sysbench-test

function red_echo () {

        local what="$*"
        echo -e "$(date +%F-%T) \e[1;31m ${what} \e[0m"
}

function check_las_comm(){
    if [ $1 -ne 0 ];then
        red_echo $2
        exit 1
    fi
}

function  restart_mysqld(){
  service mysqld${1} restart
  sleep 2
}

function  purge_binlog(){
port=$1
mysql -u$user -p$passwd -P$port -h$host<<EOF
purge binary logs before now();
EOF
}

function clean_os_cache(){
  echo 3 > /proc/sys/vm/drop_caches
}

function  sysbench_with_diff_thread(){

thread_num=$1
port=$2
order=$3
test_mode=$4
sysbench /usr/local/share/sysbench/${test_mode}.lua --mysql_storage_engine=innodb  --table-size=100000 --tables=20 --mysql-db=test_1 --mysql-user=$user --mysql-password=$passwd --mysql-port=$port  --mysql-host=$host --threads=$thread_num  --time=60 --report-interval=2 --db-ps-mode=disable --events=0 --db-driver=mysql $order

}

function  main(){
for test_mode in $sysbench_test_mode;do

  for port in $ports;do
    for thread_num in {5,10,20,30,40,80,120,200};do
      restart_mysqld "$port"
      check_las_comm  "$?" "restart mysqld${port} failed "
      clean_os_cache
      purge_binlog "$port"

      red_echo "sysbench $thread_num  threads cleanup mysqld${port}"
      sysbench_with_diff_thread "$thread_num" "$port" "cleanup" "$test_mode">/dev/null

      red_echo "sysbench $thread_num  threads prepare mysqld${port}"
      sysbench_with_diff_thread "$thread_num" "$port" "prepare" "$test_mode">/dev/null

      mkdir -p $sysbench_test_info_path
      red_echo "sysbench $thread_num  threads run mysqld${port} $test_mode"
      sysbench_with_diff_thread "$thread_num" "$port" "run" "$test_mode" > $sysbench_test_info_path/${test_mode}_${thread_num}_$port

      # service mysqld{port} stop
    done
  done
done

}

main
【项目实战】选择 MySQL 8.X 还是 5.7 需要根据具体需求、项目阶段和技术环境综合权衡。新项目或长期维护项目:优先选择 MySQL 8.0,现有项目或稳定性优先:可暂用 MySQL 5.7。 在选择 MySQL 8.X 还是 5.7 时,需根据项目需求、技术环境和长期规划进行权衡。MySQL 8.0 提供了更优的性能、新功能(如窗口函数、CTE、增强的 JSON 支持)和更高的安全性(默认加密连接、严格密码策略),适合新项目或长期维护项目。然而,MySQL 5.7 在稳定性和兼容性方面表现更佳,尤其适合现有项目或对稳定性要求高的场景,尽管其官方支持已于 2023 年 10 月终止。升级到 8.0 可能面临兼容性问题和工具依赖挑战,但经过调优后,8.0 的性能潜力更大。企业决策时需考虑维护和迁移成 阅读详情

相关推荐

Mysql8 和mysql 5.7 的区别

1. NoSql存储 Mysql从5.7 版本提供了NoSQL的存储功能,在8.0中这部分得到一些修改,不过这个在实际中用的极少 2.隐藏索引 隐藏索引的特性对于性能调试非常有用,在8.0 中,索引可以被隐藏和显示,当一个索引隐藏时,他不会被查询优化器所使用 也就是说可以隐藏一个索引,然后观察对数据库的影响.如果性能下降,就说明这个索引是有效的,于是将其”恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多于的,可以删掉了 隐藏一个索引的语法 ALTER TABLE t ALTER IND

JineD的博客 1万+

MySQL安装流程 及 8.0与5.7区别

但是,需要注意的是,MySQL 8.0版本仍然是一个发展中的版本,因此在某些情况下可能存在一些bug和问题。但需要注意的是,MySQL 8.0版本仍然是一个发展中的版本,因此在某些情况下可能存在一些bug和问题。安全性:MySQL 5.7版本已经针对5.7以下的版本进行常规的bug修复和性能优化,并在安全性和性能方面进行了很多改进。虽然已经推出了新版本(如 MySQL 8.0),但 MySQL 5.7 仍然是一个稳定、流行的数据库版本,有很多企业级应用仍然在使用。

zpWang37的博客 968

实战指南!基于STM32的智能环境监测系统(代码+硬件设计+云端控制)

本文详细介绍了基于STM32的智能环境监测系统的设计与实现,包括硬件选型、电路设计、软件架构和云端控制。系统通过DHT11温湿度传感器和MQ-2烟雾传感器实时监测环境数据,STM32F103C8T6主控芯片处理数据并通过ESP8266上传至中国移动物联网平台,支持手机APP远程监控。项目成本低、稳定性高,适合智能家居和环境监测应用。

weixin_29194817的博客 433

MySQL 5.7与MySQL 8.0对比

综上所述,MySQL 8.0相对于MySQL 5.7在功能、性能、安全性和管理等方面都有显著的改进和提升。这些改进使得MySQL 8.0能够更好地满足现代应用的需求和挑战,为用户提供更加高效、可靠和安全的数据库服务。因此,对于正在使用MySQL的用户来说,升级到8.0版本是一个值得考虑的选择。

Qrind的博客 2255

从零到一:手把手教你用Verilog实现一个AHB-Lite总线主机(附完整代码)

本文详细介绍了如何使用Verilog从零开始实现一个AHB-Lite总线主机,涵盖协议解析、状态机设计、突发传输处理等关键环节,并提供完整代码示例。通过实战指南,帮助数字IC设计工程师掌握AMBA3.0总线协议的核心实现技术,提升SoC设计能力。

weixin_29209825的博客 363

ROS入门必学导航算法——Navigation

该平台集成了多款无人车底盘,包括履带式、四轮差速、阿克曼、麦克纳姆轮底盘等,以满足不同形式和配置的需求,并搭载了RTK定位系统、双目相机、深度相机和激光雷达等多种传感器,以满足开发者的科研需求。amcl节点接收里程计数据(通过"odom"话题)和激光雷达数据(通常通过"scan"话题),结合已知的地图,实时地估计出机器人在该地图上的位置。在ROS中,这是通过"tf库"变换实现的,通过将传感器数据转换到共同的参考系中,系统可以更容易地集成来自不同传感器的数据,并确保它们在相同的空间和时间范围内可用。

AMOVLAB(阿木实验室) 2910

MySQL 5.7 vs 8.0,你选那个?网友:我继续原地踏步~

作者:jiaxin出处:http://www.cnblogs.com/YangJiaXin/# 背景测试mysql5.7和mysql8.0 分别在读写、只读、只写模式下不同并发时的性能(...

JAVA葵花宝典 4370

基于大模型的JMeter日志智能分析服务化实践

在软件性能测试领域,日志分析是定位系统瓶颈、评估稳定性的关键环节。传统基于规则或正则表达式的分析方法,在面对格式多变、上下文关联复杂的海量日志时,往往效率低下且难以深入。大语言模型(LLM)凭借其强大的自然语言理解与推理能力,为这一挑战提供了新的解决方案。其技术价值在于能够自动化地从非结构化文本中提取语义信息、关联分散的上下文,并生成可操作的根因分析与优化建议,从而将工程师从繁琐的日志筛查中解放出来,显著提升问题诊断的深度与效率。这一技术可广泛应用于自动化测试报告生成、实时监控预警、脚本调试辅助等工程实践场

weixin_28839549的博客 339

mysql5.7和8选择_MySQL 5.7 vs 8.0,你选那个?网友:我继续原地踏步~

阅读本文大概需要 分钟。背景测试mysql5.7和mysql8.0 分别在读写、只读、只写模式下不同并发时的性能(tps,qps)前提测试使用版本为mysql5.7.22和mysql8.0.15sysbench测试前先重启mysql服务,并清空os的cache(避免多次测试时命中缓存)每次进行测试都是新生成测试数据后再进行mysql5.7和mysql8.0的测试每次测试时保证mysql5.7和m...

weixin_39702335的博客 2155

微磁模拟实战指南:从OOMMF安装到首个3D模型运行

本文详细介绍了OOMMF微磁模拟软件的安装与使用,从环境配置到首个3D模型运行的完整教程。涵盖Windows、Linux和macOS平台的安装避坑指南,以及MIF文件编写、并行计算优化等实战技巧,帮助研究人员快速掌握这一开源工具在磁畴壁运动、磁滞回线等微磁学问题中的应用。

weixin_29294597的博客 154

ISCE+Mintpy进行SBASInSAR处理(持续更新)

通过调用pairs_misregistration方法,利用safe_dict中的数据信息,对每对SLC数据进行配准误差的计算和分析,以确定数据之间的精确差异,为后续的时间序列处理提供基础。给定同一地区的两景SAR影像,经过配准之后,对应像元进行共轭相乘得到相位差,并形成干涉图,但是从干涉图中得到的相位差实际上是主值,即在(-π,π)呈周期性变化,为了还原其真实的相位差,必须在主值的基础上加或减整数倍的相位周期2π,把被卷叠的相位展开,才能顺利地反演出地面目标的高程和形变。

Cyy2511250589的博客 3736

不支持: redis_看完后,我才明白Redis为什么默认16个数据库?

www.toutiao.com/a6752317753866060299导读:在实际项目中Redis常被应用于做缓存,分布式锁、消息队列等。但是在搭建配置好Redis服务器后很多朋友应该会发现和有这样的疑问,为什么Redis默认建立了16个数据库,如下图所示。一、16个数据库的由来Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存...

weixin_39602737的博客 1090

YOLO26剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

针对没有如何去选择剪枝的内容LAMP是层自适应幅度调整剪枝,无需任何参数,通过算法内部自己计算每个层的重要程度进行剪枝。基于权重重要程度和该层权重大小关系,权重越大表明该层越重要的思想进行优化。这个跟我前面说的非结构化全局剪枝是一个解法(MP),也就是lamp是在我前面那个非结构化剪枝的基础上进行优化的。但是这个逐层进行非结构剪枝目前还没有一个清晰的概念,确定每个层要剪枝多少。LAMP得分是一个平方权重大小,由层中所有“幸存权重”的总和归一化。

m0_64661770的博客 675

如何用 Redis 统计独立用户访问量?

文章来源:https://url.cn/5tQPEQg今天来聊一聊拼多多的一道后台面试真题,是一道简单的架构类的题目:拼多多有数亿的用户,那么对于某个网页,怎么使用Redis来统计一个网...

JAVA葵花宝典 111

YOLOv10改进,YOLOv10二次创新C2f结构采用WTConv卷积(感受野的小波卷积),ECCV 2024

WTConv 的核心思想是通过结合卷积神经网络(CNN)的强大特征提取能力与小波变换的多尺度特性,来实现大感受野的卷积操作,同时避免传统大卷积核带来的参数爆炸问题。传统的卷积操作通过滑动小窗口在图像上逐步执行局部特征提取,感受野的大小直接取决于卷积核的尺寸。随着卷积核的增大,参数量呈指数增长,导致网络训练效率降低、计算资源消耗增加。为解决这些问题,WTConv 提出了在小波域中执行卷积操作的策略。小波变换是一种常用于信号处理的技术,能够将信号分解为不同频率成分。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1025

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

redis key命名规范_看完后,我才明白Redis为什么默认16个数据库?

www.toutiao.com/a6752317753866060299导读:在实际项目中Redis常被应用于做缓存,分布式锁、消息队列等。但是在搭建配置好Redis服务器后很多朋友应该会发现和有这样的疑问,为什么Redis默认建立了16个数据库,如下图所示。一、16个数据库的由来Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存...

weixin_39867327的博客 379

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

看完后,我才明白Redis为什么默认16个数据库?

www.toutiao.com/a6752317753866060299导读:在实际项目中Redis常被应用于做缓存,分布式锁、消息队列等。但是在搭建配置好Redis服务器后很多朋友应该...

JAVA葵花宝典 137

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

如何黑掉一台根本不联网的电脑

一直以来,拿到一台电脑上的密钥,方法无非有以下三种:1、直接拿到这台电脑,然后输入木马病毒进行盗取。(此种略微LowB的方法风险在于:如果被电脑主人“捉奸在床”,愤而报警,则需要黑客有一...

JAVA葵花宝典 550

Android 手机的高级终端 Termux 安装使用、busybox、安卓 手机 web

手机已经 root安装 tsu,这是一个 su 的 Termux 版本,是一个真正的 root 权限,用来在 Termux上替代su,操作不慎可能对手机有安全风险,因为官方封装了,所以安装也很简单:安装 tsu:pkg install tsu -y切换到 root:tsu退出 root:exittsu切换 root 用户时会弹出 root 授权提示,给予其 root 权限即可。在管理员身份下输入 exit 可回到普通用户身份。

freeking101的博客 10万+

Python 是增长最快的主流编程语言 | StackOverflow 重磅调查

也不知道是从哪一年开始,GitHub 有了一个响亮的名号「最大的同性交友网站」,以至于程序员都把 GitHub 调侃称 GayHub。一对一补习 https://www.hfjy.com (是谁在耳边,说,爱我永不变 结对编程) 那程序员群体的性取向到底如何呢? 近日,全球知名的开发者社区 Stack Overflow 发布了 2019 年度开发者调查报告。今年全球 190 个国家和地区共有近 9...

weixin_43932460的博客 127

程序员群体的性取向如何?Stack Overflow 年度调查有亮点

(给程序员的那些事加星标)原创整理:程序员的那些事(ID:iProgrammer)也不知道是从哪一年开始,GitHub 有了一个响亮的名号「最大的同性交友网站」,以至于程...

程序员的那些事 475

MySQL 8.0 vs MySQL 5.7: 详细比较

MySQL是世界上最流行的开源关系数据库之一,随着技术的进步,每个新版本都带来了许多重要的更新和改进。在本文中,我们将深入探讨MySQL 8.0和5.7两个版本之间的主要差异,涵盖从性能改进、新特性到安全性增强等多个方面。

Mortal3306的博客 1万+

mysql5.7和mysql8.0区别

mysql5.7和mysql8.0区别(连接navicate报错:2059 - Authentication plugin 'caching_ sha2_ password' cannot be loaded: 4X99000

Da_Xiong的博客 1万+

MySQL 5.7

说性能的话,其实阿里云卖数据库的页面就有性能对比,可以看得出 PostgreSQL > MySQL 5.7 >> MySQL 8.0。虽然 MySQL 官网说 8.0 比 5.7 性能好,但是无论是个人测试还是阿里云给出的测试结果都是 5.7 优于 8.0 到底是什么原因就不得而知了。MySQL 有些地方确实怪怪的,看评论区老哥也有提到:MySQL 加锁居然是整个语句结束后才会释放非目标行,PostgreSQL 是扫一行发现不是目标行就立即释放了。

weixin_48345177的博客 598
上一篇: 恕我直言!你的分页PageHelper的用法一直是错的!
下一篇: 说实话,DataGrip真得厉害,只是很多人不会用而已~
「已注销」
博客等级 码龄6年 36粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值