问题如下: 比如上图中的PERSON表,查询SQL语句中如果表名是小写,就会报错说person表不存在。 因为Linux环境下的MySQL数据库的表名默认是区分大小写的,可以查看Linux上的MySQL的配置文件/etc/my.cnf:
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@VM_219_131_centos tomcat7]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [root@VM_219_131_centos tomcat7]# |
如果要使用数据库表名不区分大小写的话,就需要在[mysqld]下面添加一行配置,即 lower_case_table_names=1:
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@VM_219_131_centos tomcat7]# vi /etc/my.cnf [mysqld] lower_case_table_names=1 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid |
网上对该项配置的说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
lower_case_table_names参数详解: 其中 0:区分大小写,1:不区分大小写 MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的: 1、数据库名与表名是严格区分大小写的; 2、表的别名是严格区分大小写的; 3、列名与列的别名在所有的情况下均是忽略大小写的; 4、变量名也是严格区分大小写的; MySQL在Windows下都不区分大小写。 3、如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种: A、创建时设置: CREATE TABLE T( A VARCHAR(10) BINARY ); B、使用alter修改: ALTER TABLE`tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY; C、mysql tableeditor中直接勾选BINARY项。 |
修改完配置之后,一定要重启数据库:
1 2 3 |
[root@VM_219_131_centos tomcat7]# service mysqld restart Stopping mysqld: [ OK ] Starting mysqld: [ OK ] |
然后使用Navicat工具重新连接MySQL数据库,再次查询perosn表,这时发现不管查询SQL语句中的表名是大写还是小写都提示找不到person表了。 原因是修改配置之后,会导致原来的大写的表名PERSON无法识别,所以这一点要特别注意。 解决办法是: (1)在修改配置之前一定先将所有表的表结构和表数据导出做备份; (2)删除原来的表; (3)修改配置; (4)将表结构和表数据导入。 按照上面的步骤操作之后,再次查询person表,表名就不区分大小写了。 from:https://www.cnblogs.com/jun1019/p/7073227.html
View Details最近迷上将夜,就用主角做栗子了。 转换后: SQL代码
1 2 3 4 5 |
select substring_index(substring_index(a.userIds,',',b.help_topic_id+1),',',-1) id, substring_index(substring_index(a.userNames,',',b.help_topic_id+1),',',-1) username from jiangye_actor a join mysql.help_topic b on b.help_topic_id < (length(a.userNames) - length(replace(a.userNames,',',''))+1) |
substring_index函数的用法可以参考这篇博客 https://www.cnblogs.com/mqxs/p/7380933.html 来来来,解释一波 1. on条件后面(length(a.userNames) – length(replace(a.userNames,’,’,’’))+1)这个语法,是得到被逗号分隔的字段一共有几个, 为什么后面还有一个加1? 3+1=4;可以这样理解,一根绳子剪三刀可以分成四段,同理一个主演名字串,三个逗号可以分隔出四个主演的名字。 既然是将一个字段按照逗号分隔转成多行,那么现在已经确定了行数。 2. substring_index(substring_index(a.userNames,’,’,b.help_topic_id+1),’,’,-1)的理解如下图: 提示: mysql.help_topic这张表我们只用到了它的help_topic_id,可以看到这个help_topic_id是从0开始一直连续的,join这张表只是为了确定数据行数。现在假设我的mysql.help_topic一共只有5条数据,那么最多可转成5行数据,若果现在主演的名字有6个就不能用mysql.help_topic这张表了。 由此看出我们完全可以找其他表来替代mysql.help_topic,只要满足表的id是连续的,且数据条数超过了你要转换的行数即可。 from:https://blog.csdn.net/XDSXHDYY/article/details/84589486
View Details1、普通索引 mysql>ALTER TABLE table_name ADD INDEX index_name ( column ) 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。 2、唯一索引 mysql>ALTER TABLE table_name ADD UNIQUE ( column ) 普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。 如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。 3、主索引 mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column ) 在前面已经反复多次强调过:必须为主键字段创建一个索引,这个索引就是所谓的“主索引”。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE。 4、外键索引 mysql>ALTER TABLE table_name ADD FULLTEXT ( column) 如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。 5、复合索引 mysql>ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 ) 索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引。这种索引的特点是MySQL可以有选择地使用一个这样的索引。如果查询操作只需要用到columnA数据列上的一个索引,就可以使用复合索引INDEX(columnA,columnB)。不过,这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX(A,B,C)可以当做A或(A,B)的索引来使用,但不能当做B、C或(B,C)的索引来使用。 6、索引的长度 在为CHAR和VARCHAR类型的数据列定义索引时,可以把索引的长度限制为一个给定的字符个数(这个数字必须小于这个字段所允许的最大字符个数)。这么做的好处是可以生成一个尺寸比较小、检索速度却比较快的索引文件。在绝大多数应用里,数据库中的字符串数据大都以各种各样的名字为主,把索引的长度设置为10~15个字符已经足以把搜索范围缩小到很少的几条数据记录了。在为BLOB和TEXT类型的数据列创建索引时,必须对索引的长度做出限制;MySQL所允许的最大索引全文索引文本字段上的普通索引只能加快对出现在字段内容最前面的字符串(也就是字段内容开头的字符)进行检索操作。如果字段里存放的是由几个、甚至是多个单词构成的较大段文字,普通索引就没什么作用了。这种检索往往以的形式出现,这对MySQL来说很复杂,如果需要处理的数据量很大,响应时间就会很长。 这类场合正是全文索引(full-textindex)可以大显身手的地方。在生成这种类型的索引时,MySQL将把在文本中出现的所有单词创建为一份清单,查询操作将根据这份清单去检索有关的数据记录。全文索引即可以随数据表一同创建,也可以等日后有必要时再使用下面这条命令添加: ALTERTABLEtablenameADDFULLTEXT(column1,column2)有了全文索引,就可以用SELECT查询命令去检索那些包含着一个或多个给定单词的数据记录了。下面是这类查询命令的基本语法: SELECT*FROMtablename WHEREMATCH(column1,column2)AGAINST(‘word1′,’word2′,’word3’) 上面这条命令将把column1和column2字段里有word1、word2和word3的数据记录全部查询出来。 from:https://www.cnblogs.com/interdrp/p/8031087.html
View Details命令行下执行 sql 文件有两种方法 一、第一中方法 (未连接数据库) 不推荐这样使用 因为在密码带有特殊字符时会报错
1 |
mysql -h localhost -u username -ppassword < filepath #filepath 为绝对路径 |
二、第二中方法(已链接数据库 当提示符为 mysql> 时) 这里的 yourDatavase 为你的数据库名 filepath 为 sql 文件的绝对路径
1 2 |
use yourDatabase; source filepath; |
附: 一、命令行下创建数据库
1 |
CREATE DATABASE IF NOT EXISTS yourDatabaseName DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; |
二、命令行下创建数据表 下面的 id、title、author、date 这些字段根据实际需求填写
1 2 3 4 5 6 7 |
CREATE TABLE IF NOT EXISTS `yourTableName`( `id` INT UNSIGNED AUTO_INCREMENT, `title` VARCHAR(100) NOT NULL, `author` VARCHAR(40) NOT NULL, `date` DATE, PRIMARY KEY ( `id` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
三、删除数据库 yourDatabaseName 为你要删除的数据库名
1 |
drop database yourDatabaseName; |
四、删除数据表 yourTableName 为你要删除的数据表名
1 |
DROP TABLE yourTableName; |
五、允许远程连接mysql数据库
1 2 |
grant all privileges on *.* to 'admin'@'%' identified by '123456' with grant option; flush privileges; |
允许任何ip地址(%表示允许任何ip地址)的电脑用admin帐户和密码(123456)来访问这个mysql server。 注意admin账户不一定要存在。 六、修改表引擎方法
1 |
alter table table_name engine=innodb; |
其它数据库操作请自行查询 from:https://blog.csdn.net/ming_xiaoxiami/article/details/81905388
View Details一.maxscale简介 1.MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换。 2.官网: https://mariadb.com/kb/en/mariadb-enterprise/mariadb-maxscale-20/ 二.安装 1.安装可以通过rpm安装 2.可以直接下载文件放入指定目录,本次采用第二种方法 1 2 3 4 5 #wget https://downloads.mariadb.com/MaxScale/2.0.2/centos/5Server/x86_64/maxscale-2.0.2.centos.5.tar.gz #tar zxvf maxscale-2.0.2.centos.5.tar.gz #mkdir /usr/local/maxscale #mv ./maxscale-2.0.2/* /usr/local/maxscale/ #cp /usr/local/maxscale/etc/maxscale.cnf.template /etc/maxscale.cnf 修改启动脚本,使其可以提供service服务 1 2 #cp /usr/local/maxscale/share/maxscale/maxscale /etc/init.d/maxscale #vi /etc/init.d/maxscale 将脚本中的///bin替换为/usr/local/maxscale/bin/maxscale 这将可以使用 service maxscale start|stop|restart启动停止或重启maxscale 三.账户配置 1.在主从库上授权两个账户 a.监视账户 1 2 create user maxscale_monitor@’192.168.1.%' identified by "123456"; grant replication slave, replication client on *.* to maxscale_monitor@’192.168.1.%'; b.路由账户
1 2 3 4 5 |
create user maxscale_route@'192.168.1.%' identified by "123456"; GRANT SELECT ON mysql.user TO maxscale_route@'192.168.1.%'; GRANT SELECT ON mysql.db TO maxscale_route@'192.168.1.%'; GRANT SELECT ON mysql.tables_priv TO maxscale_route@'192.168.1.%'; GRANT SHOW DATABASES ON *.* TO maxscale_route@'192.168.1.%'; |
四.读写分离配置 0.vi /etc/maxscale.cnf 基本配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 […]
View Details1MaxScale 是干什么的? 配置好了MySQL的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡。 读写分离和负载均衡是MySQL集群的基础需求,MaxScale就可以帮着我们方便的实现这些功能。 2MaxScale 的基础构成 MaxScale 是MySQL的兄弟公司MariaDB 开发的,现在已经发展得非常成熟。MaxScale 是插件式结构,允许用户开发适合自己的插件。 MaxScale 目前提供的插件功能分为5类: 认证插件 提供了登录认证功能,MaxScale 会读取并缓存数据库中 user 表中的信息,当有连接进来时,先从缓存信息中进行验证,如果没有此用户,会从后端数据库中更新信息,再次进行验证 协议插件 包括客户端连接协议,和连接数据库的协议 路由插件 决定如何把客户端的请求转发给后端数据库服务器,读写分离和负载均衡的功能就是由这个模块实现的 监控插件 对各个数据库服务器进行监控,例如发现某个数据库服务器响应很慢,那么就不向其转发请求了 日志和过滤插件 提供简单的数据库防火墙功能,可以对SQL进行过滤和容错 3MaxScale 的安装使用 例如有 3 台数据库服务器,是一主二从的结构。 过程概述 (1)配置好集群环境 (2)下载安装 MaxScale (3)配置 MaxScale,添加各数据库信息 (4)启动 MaxScale,查看是否正确连接数据库 (5)客户端连接 MaxScale,进行测试 详细过程 (1)配置一主二从的集群环境 准备3台服务器,安装MySQL,配置一主二从的复制结构。 (2)安装 MaxScale 最好在另一台服务器上安装,如果资源不足,可以和某个MySQL放在一起。 MaxScale 的下载地址: https://downloads.mariadb.com/files/MaxScale 根据自己的服务器选择合适的安装包。 以 centos 7 为例 安装步骤如下: yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y rpm -ivh maxscale-1.4.3-1.centos.7.x86_64.rpm 如果依赖无法安装,请使用yum安装 gnutls即可 (3)配置 MaxScale 在开始配置之前,需要在 master 中为 MaxScale 创建两个用户,用于监控模块和路由模块。 创建监控用户 mysql> create user scalemon@’%' identified by "111111"; mysql> grant replication slave, replication client on *.* to […]
View Details目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列,希望可以对大家有帮助。 1. 什么是中间件 传统的架构模式就是 应用连接数据库直接对数据进行访问,这种架构特点就是简单方便。 但是随着目前数据量不断的增大我们就遇到了问题: 单个表数据量太大 单个库数据量太大 单台数据量服务器压力很大 读写速度遇到瓶颈 当面临以上问题时,我们会想到的第一种解决方式就是 向上扩展(scale up) 简单来说就是不断增加硬件性能。这种方式只能暂时解决问题,当业务量不断增长时还是解决不了问题。特别是淘宝,facebook,youtube这种业务成线性,甚至指数级上升的情况 此时我们不得不依赖于第二种方式: 水平扩展 。 直接增加机器,把数据库放到不同服务器上,在应用到数据库之间加一个proxy进行路由,这样就可以解决上面的问题了。 2. 中间件与读写分离 很多人都会把中间件认为是读写分离,其实读写分离只是中间件可以提供的一种功能,最主要的功能还是在于他可以 分库分表 ,下面是一个读写分离的示意图: 上面的图可以看出,红线代表写请求,绿线代表读请求。这就是一个简单的读写分离,下面我们在看看分库分表中间件。 上面这幅图就可以看出中间件作用,比如下面的这个SQL: [sql] view plain copy <span class="operator" style=""><span class="keyword" style="">select</span> * <span class="keyword" style="">from</span> table_name <span class="keyword" style="">where</span> id = <span class="number" style="">1</span>;</span> 按照中间件分库分表算法,此SQL将发送到DB1节点,由DB1这个MySQL负责解析和获取id=1的数据,并通过中间件返回给客户端。而在读写分离结构中并没有这些分库分表规则, 他只能在众多读节点中load balance随机进行分发,它要求各个节点都要存放一份完整的数据。 3.各类中间件比较 目前市面上中间件种类很多种 先看下各种中间件背景: Cobar: 阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护 了,阿里也开发了tddl替代cobar。 MyCAT: 社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去, OneProxy: 数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件, 楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在 高并发下很稳定。 Vitess: 这个中间件是Youtube生产在使用的,但是架构很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。 Kingshard: Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间 用go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。 Atlas: 360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试。 MaxScale与MySQL Route: 这两个中间件都算是官方的吧,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。 MySQL Route是现在MySQL 官方Oracle公司发布出来的一个中间件。 这两个中间件后面也会跟进测试下,看下效果如何。 4. 结语 这里主要是简单介绍了下各种中间件由来和特点,后面文章会陆续介绍各个中间件更详细的特性,优缺点,性能测试结果。 from:https://www.cnblogs.com/zzsdream/articles/6650690.html
View Details当初写这篇文章的初衷只是想提醒自己在用一个开源产品前不仅要了解其提供的功能,更要了解其功能和场景边界。 1.非分片字段查询 Mycat中的路由结果是通过分片字段和分片方法来确定的。例如下图中的一个Mycat分库方案: 根据 tt_waybill 表的 id 字段来进行分片 分片方法为 id 值取 3 的模,根据模值确定在DB1,DB2,DB3中的某个分片 如果查询条件中有 id 字段的情况还好,查询将会落到某个具体的分片。例如: mysql>select * from tt_waybill where id = 12330; 此时Mycat会计算路由结果 12330 % 3 = 0 –> DB1 并将该请求路由到DB1上去执行。 如果查询条件中没有 分片字段 条件,例如: mysql>select * from tt_waybill where waybill_no =88661; 此时Mycat无法计算路由,便发送到所有节点上执行: DB1 –> select * from tt_waybill where waybill_no =88661; DB2 –> select * from tt_waybill where waybill_no =88661; DB3 –> select * from tt_waybill where waybill_no =88661; 如果该分片字段选择度高,也是业务常用的查询维度,一般只有一个或极少数个DB节点命中(返回结果集)。示例中只有3个DB节点,而实际应用中的DB节点数远超过这个,假如有50个,那么前端的一个查询,落到MySQL数据库上则变成50个查询,会极大消耗Mycat和MySQL数据库资源。 如果设计使用Mycat时有非分片字段查询,请考虑放弃! 2.分页排序 先看一下Mycat是如何处理分页操作的,假如有如下Mycat分库方案: 一张表有30份数据分布在3个分片DB上,具体数据分布如下 DB1:[0,1,2,3,4,10,11,12,13,14] DB2:[5,6,7,8,9,16,17,18,19] DB3:[20,21,22,23,24,25,26,27,28,29] (这个示例的场景中没有查询条件,所以都是全分片查询,也就没有假定该表的分片字段和分片方法) 当应用执行如下分页查询时 mysql>select * from table limit 2; Mycat将该SQL请求分发到各个DB节点去执行,并接收各个DB节点的返回结果 […]
View Detailssysbench是一个压力测试工具、可以用它来测试cpu、mem、disk、thread、mysql、postgr、oracle;然而作为一个mysql dba 我当然是用它来压测mysql啦! 一、从哪里可以下载到sysbench: sysbench的源码可以在github上面下载的到,sysbench的主页
1 |
https://github.com/akopytov/sysbench |
二、sysbench的一些安装依赖:
1 |
yum -y install make automake libtool pkgconfig libaio-devel vim-common |
在我的机器上已经安装上了mysql相关的所有包,如果你机器上还没有安装过这些,那你还要安装上mysql的开发包,由于系统自带mariadb 这个mysql分支,所以在安装mysql-devel时应该是安装mariadb-devel 三、安装sysbench: 1 进入到sysbench源码目录
1 |
/home/jianglexing/Desktop/sysbench-master |
2 执行autogen.sh用它来生成configure这个文件
1 |
./autogen.sh |
3 执行configure && make && make install 来完成sysbench的安装
1 2 3 |
./configure --prefix=/usr/local/sysbench/ --with-mysql --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib make make install |
我这里之所以要这样写是因为我的mysql安装在/usr/local/;而不是默认的rpm的安装位置 四、测试是否安装成功:
1 2 |
[root@workstudio bin]# /usr/local/sysbench/bin/sysbench --version sysbench 1.1.0 |
到目前为止sysbench的安装就算是完成了! 五、sysbench的帮助内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
1 Usage: 2 sysbench [options]... [testname] [command] 3 4 Commands implemented by most tests: prepare run cleanup help 5 6 General options: 7 --threads=N number of threads to use [1] 8 --events=N limit for total number of events [0] 9 --time=N limit for total execution time in seconds [10] 10 --warmup-time=N execute events for this many seconds with statistics disabled before the actual benchmark run with statistics enabled [0] 11 --forced-shutdown=STRING number of seconds to wait after the --time limit before forcing shutdown, or 'off' to disable [off] 12 --thread-stack-size=SIZE size of stack per thread [64K] 13 --thread-init-timeout=N wait time in seconds for worker threads to initialize [30] 14 --rate=N average transactions rate. 0 for unlimited rate [0] 15 --report-interval=N periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0] 16 --report-checkpoints=[LIST,...] dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time in seconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. [] 17 --debug[=on|off] print more debugging info [off] 18 --validate[=on|off] perform validation checks where possible [off] 19 --help[=on|off] print help and exit [off] 20 --version[=on|off] print version and exit [off] 21 --config-file=FILENAME File containing command line options 22 --luajit-cmd=STRING perform LuaJIT control command. This option is equivalent to 'luajit -j'. See LuaJIT documentation for more information 23 --tx-rate=N deprecated alias for --rate [0] 24 --max-requests=N deprecated alias for --events [0] 25 --max-time=N deprecated alias for --time [0] 26 --num-threads=N deprecated alias for --threads [1] 27 28 Pseudo-Random Numbers Generator options: 29 --rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special] 30 --rand-spec-iter=N number of iterations used for numbers generation [12] 31 --rand-spec-pct=N percentage of values to be treated as 'special' (for special distribution) [1] 32 --rand-spec-res=N percentage of 'special' values to use (for special distribution) [75] 33 --rand-seed=N seed for random number generator. When 0, the current time is used as a RNG seed. [0] 34 --rand-pareto-h=N parameter h for pareto distribution [0.2] 35 36 Log options: 37 --verbosity=N verbosity level {5 - debug, 0 - only critical messages} [3] 38 39 --percentile=N percentile to calculate in latency statistics (1-100). Use the special value of 0 to disable percentile calculations [95] 40 --histogram[=on|off] print latency histogram in report [off] 41 42 General database options: 43 44 --db-driver=STRING specifies database driver to use ('help' to get list of available drivers) 45 --db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto] 46 --db-debug[=on|off] print database-specific debug information [off] 47 48 49 Compiled-in database drivers: 50 mysql - MySQL driver 51 52 mysql options: 53 --mysql-host=[LIST,...] MySQL server host [localhost] 54 --mysql-port=[LIST,...] MySQL server port [3306] 55 --mysql-socket=[LIST,...] MySQL socket 56 --mysql-user=STRING MySQL user [sbtest] 57 --mysql-password=STRING MySQL password [] 58 --mysql-db=STRING MySQL database name [sbtest] 59 --mysql-ssl[=on|off] use SSL connections, if available in the client library [off] 60 --mysql-ssl-cipher=STRING use specific cipher for SSL connections [] 61 --mysql-compression[=on|off] use compression, if available in the client library [off] 62 --mysql-debug[=on|off] trace all client library calls [off] 63 --mysql-ignore-errors=[LIST,...] list of errors to ignore, or "all" [1213,1020,1205] 64 --mysql-dry-run[=on|off] Dry run, pretend that all MySQL client API calls are successful without executing them [off] 65 66 Compiled-in tests: 67 fileio - File I/O test 68 cpu - CPU performance test 69 memory - Memory functions speed test 70 threads - Threads subsystem performance test 71 mutex - Mutex performance test 72 73 See 'sysbench <testname> help' for a list of options for each test. |
六、sysbench对数据库进行压力测试的过程: 1 prepare 阶段 这个阶段是用来做准备的、比较说建立好测试用的表、并向表中填充数据。 2 run 阶段 这个阶段是才是去跑压力测试的SQL 3 cleanup 阶段 这个阶段是去清除数据的、也就是prepare阶段初始化好的表要都drop掉 七、sysbench 中的测试类型大致可以分成内置的,lua脚本自定义的测试: 1、内置: fileio 、cpu 、memory 、threads 、 mutex 2、lua脚本自定义型: sysbench 自身内涵了一些测试脚本放在了安装目录下的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[jianglexing@cstudio sysbench]$ ll share/sysbench 总用量 60 -rwxr-xr-x. 1 root root 1452 10月 17 15:18 bulk_insert.lua -rw-r--r--. 1 root root 13918 10月 17 15:18 oltp_common.lua -rwxr-xr-x. 1 root root 1290 10月 17 15:18 oltp_delete.lua -rwxr-xr-x. 1 root root 2415 10月 17 15:18 oltp_insert.lua -rwxr-xr-x. 1 root root 1265 10月 17 15:18 oltp_point_select.lua -rwxr-xr-x. 1 root root 1649 10月 17 15:18 oltp_read_only.lua -rwxr-xr-x. 1 root root 1824 10月 17 15:18 oltp_read_write.lua -rwxr-xr-x. 1 root root 1118 10月 17 15:18 oltp_update_index.lua -rwxr-xr-x. 1 root root 1127 10月 17 15:18 oltp_update_non_index.lua -rwxr-xr-x. 1 root root 1440 10月 17 15:18 oltp_write_only.lua -rwxr-xr-x. 1 root root 1919 10月 17 15:18 select_random_points.lua -rwxr-xr-x. 1 root root 2118 10月 17 15:18 select_random_ranges.lua drwxr-xr-x. 4 root root 46 10月 17 15:18 tests |
八、通过sysbench自带的lua脚本对mysql进行测试: 1、第一步 prepare
1 2 |
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sbtest \ --mysql-password=123456 --mysql-db=tempdb oltp_insert prepare |
2、第二步 run
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sbtest --mysql-password=123456 --mysql-db=tempdb oltp_insert run sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3) Running the test with following options: Number of threads: 1 Initializing random number generator from current time Initializing worker threads... Threads started! SQL statistics: queries performed: read: 0 write: 22545 other: 0 total: 22545 transactions: 22545 (2254.37 per sec.) queries: 22545 (2254.37 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) Throughput: events/s (eps): 2254.3691 time elapsed: 10.0006s total number of events: 22545 Latency (ms): min: 0.31 avg: 0.44 max: 10.47 95th percentile: 0.67 sum: 9918.59 Threads fairness: events (avg/stddev): 22545.0000/0.00 execution time (avg/stddev): 9.9186/0.00 |
3、第三步 cleanup
1 2 3 4 |
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sbtest --mysql-password=123456 --mysql-db=tempdb oltp_insert cleanup sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3) Dropping table 'sbtest1'... |
from:https://www.cnblogs.com/JiangLe/p/7059136.html
View Details问题描述 保存数据到MySQL时遇到以下错误: Error updating database. Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (10113 > 1024). You can change this value on the server by setting the max_allowed_packet’。 原因是MySQL的max_allowed_packet设置过小引起的,默认设置的是1M,操作数据大于1M会受max_allowed_packet参数限制;改为了10M后问题解决。 使用SQL: show VARIABLES like '%max_allowed_packet%'; 查看max_allowed_packet大小。 解决方案 1. 在my.cnf中(windows下my.ini)修改 max_allowed_packet大小为10M;Max_allowed_packet = 10M。 2. 保存并退出。 3. 重启MySQL服务即可。 ——————— 作者:犁叔 来源:CSDN 原文:https://blog.csdn.net/u012739535/article/details/76132973 版权声明:本文为博主原创文章,转载请附上博文链接!
View Details