年底 网站备案,动易学校网站系统,360公司官网首页,四川省建设厅证件查询本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》#xff1a;python零基础入门学习 《python运维脚本》#xff1a; python运维脚本实践 《shell》#xff1a;shell学习 《terraform》持续更新中#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8… 本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》python零基础入门学习 《python运维脚本》 python运维脚本实践 《shell》shell学习 《terraform》持续更新中terraform_Aws学习零基础入门到最佳实战 《k8》从问题中去学习k8s 《docker学习》暂未更新 《ceph学习》ceph日常问题解决分享 《日志收集》ELK各种中间件 《运维日常》运维日常 《linux》运维面试100问 《DBA》db的介绍使用mysql、redis、mongodb... 数据库优化
一、数据库硬件优化选型
1.一般数据库选择
1.真实的硬件物理机
2.云产品ECS自己搭建数据库
3.云数据库RDS、DRDS
2.数据库类型
1.OLTP 在线事务处理系统支持大量并发用户定期添加和修改数据。反映随时变化的单位状态但不保存其历史记录。包含大量数据其中包括用于验证事务的大量数据。可以进行优化以对事务活动做出响应。提供用于支持单位日常运营的技术基础结构。个别事务能够很快地完成并且只需访问相对较少的数据。实时性要求高。交易一般是确定的所以OLTP是对确定性的数据进行存取。(比如存取款都有一个特定的金额)并发性要求高并且严格的要求事务的完整、安全性。2.OLAP 数据仓库数据处理数据展示使用nosql更适合ROLAPMOLAPHOLAP
3.硬件选型
1CPU选型
1.IO密集型线上系统OLTP主要是IO密集型的业务高并发OLTPE系列至强主频相对低核心数量多
2.CPU密集型数据分析数据处理OLAPcpu密集型的需要CPU高计算能力OLAP不需要很高的并发计算只用一个用户就可以了I系列的IBM主频很高核心少 打游戏一般选择CPU密集型
2内存选择
1.建议2-3倍cpu核心数量 ECC
2.内存越大它使用越多浪费越多命中率越低
3磁盘选择
1.SATA-III
2.SAS
3.Fc
4.SSDsata pci-e 级别Flash 级别
4存储选择一般大型企业
5网络选择
1.硬件买好的单卡单口网卡有很多个口选择单口的性能更好一般可以插4块卡两个内网两个外网避免一块出现问题就挂掉
2.网卡绑定bonding交换机堆叠意思就像负载均衡将两块网卡逻辑绑定一个网卡绑定一个交换机如果做了网卡绑定交换机也一定要做堆叠绑定方式负载均衡模式主备模式
4.操作系统优化
1Swap调整
echo 0 /proc/sys/vm/swappiness的内容改成0临时/etc/sysctl.conf 上添加 vm.swappiness0永久
sysctl -p这个参数决定了Linux是倾向于使用swap还是倾向于释放文件系统cache。在内存紧张的情况下数值越低越倾向于释放文件系统cache。
当然这个参数只能减少使用swap的概率并不能避免Linux使用swap。
2IO调度策略
centos 7 默认是deadline
cat /sys/block/sda/queue/scheduler#临时修改为deadline(centos6)
echo deadline /sys/block/sda/queue/scheduler vi /boot/grub/grub.conf
更改到如下内容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro rootLABEL/ elevatordeadline rhgb quiet
5.应用端优化
1. 减少烂SQL不走索引复杂逻辑切割大事务插入100万条数据可以拆成100条插入一次
2. 避免业务逻辑错误
3. 说白了就是使用数据库时操作标准一些
二、创建数据库
1.创建一个库一个表并插入100万数据
#创建库
create database opt
use opt
#创建表
create table test(id int(11),num int(11),k1 char(2),k2 char(4),dt timestamp not null);#插入100万数据
delimiter //
create procedure rand_data(in num int)
begin
declare str char(62) default abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890;
declare str2 char(2);
declare str4 char(4);
declare i int default 0;
while inum do
set str2concat(substring(str,1floor(rand()*61),1),substring(str,1floor(rand()*61),1));
set str4concat(substring(str,1floor(rand()*61),2),substring(str,1floor(rand()*61),2));
set ii1;
insert into test values(i,floor(rand()*num),str2,str4,now());
end while;
end;
//
delimiter;mysql call rand_data(1000000);
2.查看数据可用性
mysql -uroot -p123
select count(*) from opt.test;
3.进行压力测试
mysqlslap --defaults-file/etc/my.cnf \
--concurrency100 --iterations1 --create-schemaopt \
--queryselect * from opt.test where num505037 engineinnodb \
--number-of-queries20000 -uroot -p123 -verbose
三、数据库参数优化
1.Max_connections
1.简介
Mysql的最大连接数如果服务器的并发请求量比较大可以调高这个值当然这是要建立在机器能够支撑的情况下因为如果连接数越来越多
mysql会为每个连接提供缓冲区就会开销的越多的内存所以需要适当的调整该值不能随便去提高设值。2.查看方式
mysql show variables like max_connections;
mysql select max_connections;
#查看已经使用多少
mysql show status like Max_used_connections;3.一般配置
vim /etc/my.cnf
Max_connections10244.补充:1.开启数据库时,我们可以临时设置一个比较大的测试值2.观察show status like Max_used_connections;变化3.如果max_used_connections跟max_connections相同,那么就是max_connections设置过低或者超过服务器的负载上限了低于10%则设置过大.#额外指标
IOPS 每秒支持的IO
connections 连接数
TPS 每秒最多允许的事务
QPS 每秒最多的查询量
2.back_log
1.简介
mysql能暂存的连接数量当主要mysql线程在一个很短时间内得到非常多的连接请求时候它就会起作用如果mysql的连接数据达到max_connections时候
新来的请求将会被存在堆栈中等待某一连接释放资源该推栈的数量及back_log如果等待连接的数量超过back_log将不被授予连接资源。
back_log值指出在mysql暂时停止回答新请求之前的短时间内有多少个请求可以被存在推栈中只有如果期望在一个短时间内有很多连接的时候需要增加它2.查看方式
mysql show variables like %back_log%;
mysql select back_log;
#查看有没有等待的如发现大量的待连接进程时就需要加大back_log或者加大max_connections的值
mysql show full processlist3.配置方式
vim /etc/my.cnf
back_log1024
3.wait_timeout和interactive_timeout
1.简介
wait_timeout指的是mysql在关闭一个非交互的连接之前所要等待的秒数
interactive_timeout指的是mysql在关闭一个交互的连接之前所需要等待的秒数比如我们在终端上进行mysql管理使用的即使交互的连接
这时候如果没有操作的时间超过了interactive_timeout设置的时间就会自动的断开默认的是28800可调优为7200。
wait_timeout:如果设置太小那么连接关闭的就很快从而使一些持久的连接不起作用
#interactive_timeout类似跳板机过了多久没操作就会踢掉你需要重新连接2.查看方式
mysql select wait_timeout;
mysql select interactive_timeout;
#默认的都是是28800可调优为7200。3.配置方式配置这个可以减轻内存的压力
wait_timeout60
interactive_timeout1200
#如果设置太大容易造成连接打开时间过长在show processlist时候能看到很多的连接 一般希望wait_timeout尽可能低
#长连接的应用为了不去反复的回收和分配资源降低额外的开销。一般我们会将wait_timeout设定比较小interactive_timeout要和应用开发人员沟通长链接的应用是否很多。
如果他需要长链接那么这个值可以不需要调整。
4.key_buffer_size
1.简介
key_buffer_size指定索引缓冲区的大小它决定索引处理的速度尤其是索引读的速度1)此参数与myisam表的索引有关select table_name,engine from information_schema.tables where enginemyisam;2)临时表的创建有关多表链接、子查询中、union在有以上查询语句出现的时候需要创建临时表用完之后会被丢弃临时表有两种创建方式内存中-------key_buffer_size磁盘上-------ibdata1(5.6)ibtmp1 (5.72.查看方式
mysql show variables like %key_buffer_size%;
#默认是8M
#查看有多少在走索引上面的总数下面的是走磁盘的
mysql show status like key_read%;3.查看临时表创建
mysql show status like created_tmp%;
--------------------------------
| Variable_name | Value |
--------------------------------
| Created_tmp_disk_tables | 10 | #创建在磁盘的临时表
| Created_tmp_files | 6 | #一共临时文件的数量
| Created_tmp_tables | 70 | #创建在内存中的临时表
--------------------------------
#通常地我们习惯以磁盘建表百分比或者已各自的一个时段内的差额计算来判断基于内存的临时表利用率。所以
我们会比较关注 Created_tmp_disk_tables 是否过多从而认定当前服务器运行状况的优劣。
#忽略mysqldump备份时导致的大量使用磁盘表4.配置方式
key_buffer_size64M
5.query_cache_size
1.简介
查询缓存简称QC使用查询缓冲mysql将查询结果存放在缓冲区中今后对于同样的select语句区分大小写,将直接从缓冲区中读取结果。SQL层select * from t1 where name:NAME;select * from t1 where name:NAME;1查询完结果之后会对SQL语句进行hash运算得出hash值,我们把他称之为SQL_ID2会将存储引擎返回的结果SQL_ID存储到缓2.查看方式
mysql show variables like %query_cache_size%;
#查看是否开启
mysql show variables like query_cache%;
---------------------------------------
| Variable_name | Value |
---------------------------------------
| query_cache_limit | 1048576 | #超过此大小的查询将不缓存
| query_cache_min_res_unit | 4096 | #缓存块的最小大小太小的话会生成很多内存碎片
| query_cache_size | 1048576 | #查询缓存大小
| query_cache_type | OFF | #缓存类型是否开启
| query_cache_wlock_invalidate | OFF | #查询的表被锁也可以走缓存查询数据
---------------------------------------3.配置多大根据谁呢
mysql show status like %Qcache%;
----------------------------------
| Variable_name | Value |
----------------------------------
| Qcache_free_blocks | 1 | #缓存中相邻内存块的个数内存碎片
| Qcache_free_memory | 1031360 | #Query Cache 中目前剩余的内存大小
| Qcache_hits | 0 | #表示有多少次命中缓存数字越大缓存效果越理想
| Qcache_inserts | 0 | #没有命中新插入的数据
| Qcache_lowmem_prunes | 0 | #多少条Query因为内存不足而被清除出QueryCache
| Qcache_not_cached | 2002 | #不适合进行缓存的查询的数量通常是由于这些查询不是 SELECT 语句或者用了now()之类的函数
| Qcache_queries_in_cache | 0 | #当前Query Cache 中cache 的Query 数量
| Qcache_total_blocks | 1 | #当前Query Cache 中的block 数量
----------------------------------
#求命中率
Qcache_hits / (Qcache_insertsQcache_not_cachedQcache_hits)
如果出现hits比例过低其实就可以关闭查询缓存了。使用redis专门缓存数据
#判断内存够不够
Qcache_free_memory Qcache_lowmem_prunes4.一般配置
修改/etc/my.cnf,配置完后的部分文件如下
query_cache_size128M
query_cache_type1
6.max_connect_errors
1.简介
max_connect_errors是一个mysql中与安全有关的计数器值它负责阻止过多尝试失败的客户端以防止暴力破解密码等情况
当超过指定次数mysql服务器将禁止host的连接请求直到mysql服务器重启或通过flush hosts命令清空此host的相关信息 max_connect_errors的值与性能并无太大关系。2.查看方式
mysql show variables like %connect_error%;3.配置方式
修改/etc/my.cnf文件在[mysqld]下面添加如下内容
max_connect_errors2000
7.sort_buffer_size
1.简介
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速
ORDER BY、GROUP BY、distinct、union
#Sort_Buffer_Size并不是越大越好由于是connection级的参数过大的设置高并发可能会耗尽系统内存资源。
列如500个连接将会消耗500*sort_buffer_size2M1G内存2.查看方式
mysql show variables like %sort_buffer_size%;3.配置方法
修改/etc/my.cnf文件在[mysqld]下面添加如下
sort_buffer_size1M
8.max_allowed_packet
1.简介
mysql根据配置文件会限制server接受的数据包大小。所有程序都是数据包的形式访问数据库的2.查看方式
mysql show variables like %max_allowed_packet%;3.配置依据
有时候大的插入和更新会受max_allowed_packet参数限制导致写入或者更新失败更大值是1GB必须设置1024的倍数最好的方式就是让开发修改不要让数据包超过限制4.一般配置
max_allowed_packet32M
9.join_buffer_size
1.简介
每个使用join的线程分配该大小的一个缓冲区。增加这值加速
select a.name,b.name from a join b on a.idb.id where xxxx
用于表间关联缓存的大小和sort_buffer_size一样该参数对应的分配内存也是每个连接独享。
尽量在SQL与方面进行优化效果较为明显。
优化的方法在on条件列加索引至少应当是有普通索引2.查看方式
mysql show variables like %join_buffer_size%;3.一般配置
join_buffer_size2M
10.thread_cache_size
1.简介
服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时,那么客户端的线程将被放到缓存中以响应下一个客户而不是销毁(前提是缓存数未达上限),如果线程重新被请求那么请求将从缓存中读取,如果缓存中是空的或者是新的请求那么这个线程将被重新创建,如果有很多新的线程增加这个值可以改善系统性能.#每个连接数据库都会分配一部分资源如果退出资源会释放下次再来新的又会分配频繁的有用户访问和退出会对服务器线程造成很大的压力配置这个可以理解为长链接他的值不是大小而是数量2.查看方式
mysql show variables like %thread_cache_size%;
--------------------------
| Variable_name | Value |
--------------------------
| thread_cache_size | 9 | #个数而不是大小
--------------------------3.配置要根据实际情况
#查看试图连接到MySQL(不管是否连接成功)的连接数
mysql show status like threads_%;
--------------------------
| Variable_name | Value |
--------------------------
| Threads_cached | 8 |
| Threads_connected | 2 |
| Threads_created | 4783 |
| Threads_running | 1 |
--------------------------
4 rows in set (0.00 sec)Threads_cached :代表当前此时此刻线程缓存中有多少空闲线程。
Threads_connected:代表当前已建立连接的数量因为一个连接就需要一个线程所以也可以看成当前被使用的线程数。
Threads_created:代表从最近一次服务启动没有走缓存创建线程的数量如果发现Threads_created值过大的话表明MySQL服务器一直在创建线程这也是比较耗资源可以适当增加配置文件中thread_cache_size值。
Threads_running :代表当前激活的非睡眠状态线程数。并不是代表正在使用的线程数有时候连接已建立但是连接处于sleep状态。4.一般配置内存压力过大不适合设置太大
(3)配置方法
thread_cache_size32#整理
Threads_created 一般在架构设计阶段会设置一个测试值做压力测试。
结合zabbix监控看一段时间内此状态的变化。
如果在一段时间内Threads_created趋于平稳说明对应参数设定是OK。
如果一直陡峭的增长或者出现大量峰值那么继续增加此值的大小在系统资源够用的情况下内存
11.innodb_buffer_pool_size
1.简介
对于InnoDB表来说innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。
简单来说就是pool-size可以缓存索引和行数据值越大IO读写就越少如果单纯的做数据库服务该参数可以设置到电脑物理内存的80%#设置要根据自己的实际情况来设置如果设置的值不在合理的范围内并不是设置越大越好可能设置的数值太大体现不出优化效果反而造成系统的swap空间被占用导致操作系统变慢降低sql查询性能。2.查看方式默认128M
mysql show variables like %innodb_buffer_pool_size%;3.配置方法
innodb_buffer_pool_size2048M
12.innodb_flush_log_at_trx_commit 面试可能会问
1.简介
主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点取值分别为0、1、2三个。0表示当事务提交时不做日志写入操作而是每秒钟将log buffer中的数据写入日志文件并flush磁盘一次1则在每秒钟或是每次事物的提交都会引起日志文件写入、flush磁盘的操作确保了事务的ACID2每次事务提交引起写入日志文件的动作,但每秒钟完成一次flush磁盘操作。
#当innodb_flush_log_at_trx_commit被 设置为0日志缓冲每秒一次地被写到日志文件并且对日志文件做到磁盘操作的刷新但是在一个事务提交不做任何操作。当这个值为1默认值之时
在每个事务提交时日志缓冲被写到日志文件对日志文件做到磁盘操作的刷新。当设置为2之时在每个提交日志缓冲被写到文件但不对日志文件做到磁盘操作的刷新。尽管如此
在对日志文件的刷新在值为2的情况也每秒发生一次。我们必须注意到因为进程安排问题每秒一次的刷新不是100%保证每秒都发生。你可以通过设置这个值不为1来获得较好的性能
但随之你会在一次崩溃中损失二分之一价值的事务。如果你设置这个值为0那么任何mysqld进程的崩溃会删除崩溃前最后一秒的事务如果你设置这个值为2那么只有操作系统崩溃或掉电才会删除最后一秒的事务。
尽管如此InnoDB的崩溃恢复不受影响而且因为这样崩溃恢复开始作用而不考虑这个值。注意许多操作系统和一些磁盘硬件会欺骗刷新到磁盘操作。尽管刷新没有进行你可以告诉mysqld刷新已经进行。
即使设置这个值为1事务的持久程度不被保证且在最坏情况下掉电甚至会破坏InnoDB数据库。在SCSI磁盘控制器中或在磁盘自身中使用有后备电池的磁盘缓存会加速文件刷新并且使得操作更安全。
你也可以试着使用Unix命令hdparm来在硬件缓存中禁止磁盘写缓存或使用其它一些对硬件提供商专用的命令。这个选项的默认值是1。 2.配置依据
实际测试发现该值对插入数据的速度影响非常大设置为2时插入10000条记录只需要2秒设置为0时只需要1秒而设置为1时则需要229秒。因此MySQL手册也建议尽量将插入操作合并成一个事务
这样可以大幅提高速度。根据MySQL官方文档在允许丢失最近部分事务的危险的前提下可以把该值设为0或2。3.查看方式
mysql show variables like %innodb_flush_log_at_trx_commit%;4.配置方法
innodb_flush_log_at_trx_commit1
双1标准中的一个15.双一标准另一个1
sync_binlog
sync_binlog 的默认值是0像操作系统刷其他文件的机制一样MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。sync_binlog控制数据库的binlog刷到磁盘上去
默认sync_binlog0表示MySQL不控制binlog的刷新由文件系统自己控制它的缓存的刷新。这时候的性能是最好的但是风险也是最大的。因为一旦系统Crash
在binlog_cache中的所有binlog信息都会被丢失。
如果sync_binlog0表示每sync_binlog次事务提交MySQL调用文件系统的刷新操作将缓存刷下去。最安全的就是sync_binlog1了表示每次事务提交MySQL都会把binlog刷下去
是最安全但是性能损耗最大的设置。这样的话在数据库所在的主机操作系统损坏或者突然掉电的情况下系统才有可能丢失1个事务的数据。但是binlog虽然是顺序IO但是设置sync_binlog1
多个事务同时提交同样很大的影响MySQL和IO性能。虽然可以通过group commit的补丁缓解但是刷新的频率过高对IO的影响也非常大。对于高并发事务的系统来说
“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。
13.innodb_thread_concurrency
1.简介
此参数用来设置innodb线程的并发数量默认值为0表示不限制。数据库属于单进程多线程怎么保证CPU使用的
一般线程小于64设置innodb_thread_concurrency 为0如果工作负载一直很高建议设置innodb_thread_concurrency128逐渐降低测试一个最优的值一般查看CPU使用率去配置
如果CPU使用率很平均那么不需要调优如果不平均可以配置innodb_thread_concurrency由低逐渐加大来测试
设置标准1当前系统cpu使用情况均不均匀top2当前的连接数有没有达到顶峰show status like threads_%;show processlist;
设置方法:1看top ,观察每个cpu的各自的负载情况2发现不平均,先设置参数为cpu个数,然后不断增加(一倍)这个数值3一直观察top状态,直到达到比较均匀时,说明已经到位了.2.查看方式
mysql show variables like %innodb_thread_concurrency%;3.配置方式
innodb_thread_concurrency8
在官方doc上对于innodb_thread_concurrency的使用也给出了一些建议如下
如果一个工作负载中并发用户线程的数量小于64建议设置innodb_thread_concurrency0
如果工作负载一直较为严重甚至偶尔达到顶峰建议先设置innodb_thread_concurrency128
并通过不断的降低这个参数96, 80, 64等等直到发现能够提供最佳性能的线程数
例如假设系统通常有40到50个用户但定期的数量增加至6070甚至200。你会发现
性能在80个并发用户设置时表现稳定如果高于这个数性能反而下降。在这种情况下
建议设置innodb_thread_concurrency参数为80以避免影响性能。
如果你不希望InnoDB使用的虚拟CPU数量比用户线程使用的虚拟CPU更多比如20个虚拟CPU
建议通过设置innodb_thread_concurrency 参数为这个值也可能更低这取决于性能体现
如果你的目标是将MySQL与其他应用隔离你可以l考虑绑定mysqld进程到专有的虚拟CPU。
但是需 要注意的是这种绑定在myslqd进程一直不是很忙的情况下可能会导致非最优的硬件使用率。在这种情况下
你可能会设置mysqld进程绑定的虚拟 CPU允许其他应用程序使用虚拟CPU的一部分或全部。
在某些情况下最佳的innodb_thread_concurrency参数设置可以比虚拟CPU的数量小。
定期检测和分析系统负载量、用户数或者工作环境的改变可能都需要对innodb_thread_concurrency参数的设置进行调整。
14.innodb_log_buffer_size
1.简介
此参数确定些日志文件所用的内存大小以M为单位。缓冲区更大能提高性能对于较大的事务可以增大缓存大小。
设定依据1大事务2多事务事务并发提交时如果值太小会影响效率所有的事务都在等待2.查看方式
mysql show variables like %innodb_log_buffer_size%;3.配置方式
innodb_log_buffer_size128M
15.innodb_log_file_size
1.简介
设置磁盘文件的大小
设置 ib_logfile0 ib_logfile1 大小
此参数确定数据日志文件的大小以M为单位更大的设置可以提高性能.2.查看方式
mysql show variables like %innodb_log_file_size%;3.配置
innodb_log_file_size128M
16.innodb_log_files_in_group
1.简介
为提高性能MySQL可以以循环方式将日志文件写到多个文件。推荐设置为32.查看方法
mysql show variables like %innodb_log_files_in_group%;3.设置
innodb_log_files_in_group3
17.read_buffer_size
1.简介
MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区MySql会为它分配一段内存缓冲区。如果对表的顺序扫描请求非常频繁并且你认为频繁扫描进行得太慢
可以通过增加该变量值以及内存缓冲区大小提高其性能。和 sort_buffer_size一样该参数对应的分配内存也是每个连接独享2.查看方式
mysql show variables like %read_buffer_size%;3.配置
read_buffer_size1M
18.read_rnd_buffer_size
1.简介
MySql的随机读查询操作缓冲区大小。当按任意顺序读取行时(例如按照排序顺序)将分配一个随机读缓存区。进行排序查询时MySql会首先扫描一遍该缓冲以避免磁盘搜索
提高查询速度如果需要排序大量数据可适当调高该值。但MySql会为每个客户连接发放该缓冲空间所以应尽量适当设置该值以避免内存开销过大。
注顺序读是指根据索引的叶节点数据就能顺序地读取所需要的行数据。随机读是指一般需要根据辅助索引叶节点中的主键寻找实际行数据而辅助索引和主键所在的数据段不同因此访问方式是随机的。2.查看方式
mysql show variables like %read_rnd_buffer_size%;3.配置
read_rnd_buffer_size1M
19.bulk_insert_buffer_size 8M
1.简介
批量插入数据缓存大小可以有效提高插入效率默认为8M2.查看方式
mysql show variables like %bulk_insert_buffer_size%;3.一般配置
bulk_insert_buffer_size8M
20.binary log
log-bin/data/mysql-bin
binlog_cache_size 2M //为每个session 分配的内存在事务过程中用来存储二进制日志的缓存, 提高记录bin-log的效率。没有什么大事务
dml也不是很频繁的情况下可以设置小一点如果事务大而且多dml操作也频繁则可以适当的调大一点。前者建议是--1M后者建议是即 2--4Mmax_binlog_cache_size 8M //表示的是binlog 能够使用的最大cache 内存大小
max_binlog_size 512M //指定binlog日志文件的大小如果当前的日志大小达到max_binlog_size还会自动创建新的二进制日志。你不能将该变量设置为大于1GB或小于4096字节。
默认值是1GB。在导入大容量的sql文件时建议关闭sql_log_bin否则硬盘扛不住而且建议定期做删除。
expire_logs_days 7 //定义了mysql清除过期日志的时间。
二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。log-bin/data/mysql-bin
binlog_formatrow
sync_binlog1双1标准(基于安全的控制)
sync_binlog1 什么时候刷新binlog到磁盘每次事务commit
innodb_flush_log_at_trx_commit1
set sql_log_bin0;
#查看语句执行数量
show status like com_%;
21.安全参数
Innodb_flush_method(O_DIRECT, fdatasync) 1.fdatasync1)在数据页需要持久化时首先将数据写入OS buffer中然后由os决定什么时候写入磁盘2)在redo buffuer需要持久化时首先将数据写入OS buffer中然后由os决定什么时候写入磁盘但如果innodb_flush_log_at_trx_commit1的话日志还是直接每次commit直接写入磁盘
2.Innodb_flush_methodO_DIRECT1)在数据页需要持久化时直接写入磁盘2)在redo buffuer需要持久化时首先将数据写入OS buffer中然后由os决定什么时候写入磁盘但如果innodb_flush_log_at_trx_commit1的话日志还是直接每次commit直接写入磁盘1.数据库基于安全的话
innodb_flush_log_at_trx_commit1
innodb_flush_methodO_DIRECT2.数据库基于性能的话
innodb_flush_log_at_trx_commit0
innodb_flush_methodfdatasync
22.最终数据库配置
[mysqld]
basedir/usr/local/mysql
datadir/usr/local/mysql/data
socket/tmp/mysql.sock
log-errormysql.err
log_binmysql-bin
binlog_formatrow
skip-name-resolve
server-id1
log-slave-updates1
relay_log_purge0
max_connections1024
back_log128
wait_timeout60
interactive_timeout7200
key_buffer_size16M
query_cache_size64M
query_cache_type1
query_cache_limit50M
max_connect_errors20
sort_buffer_size2M
max_allowed_packet32M
join_buffer_size2M
thread_cache_size200
innodb_buffer_pool_size1024M
innodb_flush_log_at_trx_commit1
innodb_log_buffer_size32M
innodb_log_file_size128M
innodb_log_files_in_group3
binlog_cache_size2M
max_binlog_cache_size8M
max_binlog_size512M
expire_logs_days7
read_buffer_size2M
read_rnd_buffer_size2M
bulk_insert_buffer_size8M
[client]
socket/tmp/mysql.sock