Mysql 压力测试记录

一:环境与工具准备

  1. 安装mysql(此处略)

  2. 安装sysbench

sudo brew install sysbench

  注意:mac 现在已经不允许在root账号下使用brew了,如果执行过程中遇到权限问题,可能需要为安装的sysbench赋予新的权利。

二:数据库准备

  1. 创建数据库

  2. 创建压测用户

// 以下代码可以通过Navicat获得,不需要自己写
GRANT USAGE ON *.* TO 'db_press_test_user'@'192.168.226.162' IDENTIFIED BY '82046722'
WITH MAX_QUERIES_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0;
GRANT ALL ON `press\_test\_db`.* TO `db_press_test_user`@`192.168.226.162`;  
// 权限刷新
Flush Privileges;

    此处遇到一点问题:在我的Mac笔记本上执行的时候,抛出了以下异常:Error : Access denied for user 'root'@'%' (using password: YES)。

    直接在服务器上登录数据库,执行的时候就没有抛出异常,可见我当前用来远程的用户的访问权限还是不完整。

  3. 准备数据

  下面的语句中的双引号实际操作中是不需要的。   

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=“我的数据库服务器IP” --mysql-port=3306 --mysql-user=press_test_user 
--mysql-password=“我的密码” --mysql-db=press_test_db --tables=20 --table_size=500000 oltp_read_write --db-ps-mode=disable prepare

  参数解析:

  1. --db-driver,数据库驱动

  2. --time, 连续访问时间,单位秒

  3. --thread,并发访问线程数量(这个会受限于发出请求的服务器的CPU核心数量)

  4. --report-interval=1,每隔1秒输出压测报告

  5. mysql开头的都是与数据源相关的,这里先跳过

  6. --tables,插入表的数量;--table_size,表的行数

  7. oltp_read_write,测试类型,这类是读写测试

  8. --db-ps-mode=disable prepare,关闭预处理模式

 

  这里又遇到一个问题,因为我在创建用户的时候,host填写的是内网ip,所以我一开始sysbench没能成功登陆数据库,抛出如下异常:

FATAL: unable to connect to MySQL server on host '121.37.156.220', port 3306, aborting...
FATAL: error 1045: Access denied for user 'press_test_user'@'183.156.138.5' (using password: YES)
FATAL: `sysbench.cmdline.call_command' function failed: ...al/Cellar/sysbench/1.0.20/share/sysbench/oltp_common.lua:83: connection creation failed

  后来依次修改mysql.user表和mysql.db表,修改其中的Host为'%',并刷新权限后,得以解决。

 

 

 

 插入后的数据表

三:执行压测命令

  TPS 测试

sysbench   --db-driver=mysql                  #基于mysql的驱动去连接mysql数据库

      --time=300                  #连续访问300秒

      --threads=10            #用10个线程模拟并发访问

      --report-interval=1          #每隔1秒输出一下压测情况

      --mysql-host=121.37.156.220         #数据库连接参数

      --mysql-port=3306

      --mysql-user=db_press_test_user

      --mysql-password=82046722

      --mysql-db=press_test_db    #在test_db这个库里

      --tables=20                                 #构造20个测试表,测试表的名字会是类似于sbtest1,sbtest2这个样子的

      --table_size=500000        #每个测试表里构造100万条测试数据

      oltp_read_write           #执行oltp数据库的读写测试

      --db-ps-mode=disable run     #禁止ps模式

其他模式:

  只读测试:oltp_read_only

  删除:oltp_delete

  更新索引字段:oltp_update_index

  更新非索引字段:oltp_update_non_index

  插入:oltp_insert

  写入:oltp_write_only

  清理:oltp_clean

四:结果

  

五:参考文章

  (需要购买课程)https://apppukyptrl1086.pc.xiaoe-tech.com/detail/i_5e383c5357307_MjhluwMb/1?from=p_5e0c2a35dbbc9_MNDGDYba&type=6

 

  

 

 

 

 

 

 

posted @ 2020-11-28 17:29  上课爱睡觉  阅读(277)  评论(0)    收藏  举报