当前位置:Gxlcms > 数据库问题 > (DBA之路【八】)关于show variables那些参数的故事

(DBA之路【八】)关于show variables那些参数的故事

时间:2021-07-01 10:21:17 帮助过:21人阅读

我的是默认lower_case_file_system=OFF,lower_case_table_name=0,表示文件系统和表名都是区分大小写的。

注:(以***释来自网上)

MYSQL在LINUX下数据库名、表名、列名、别名大小写规则如下: 
1.数据库名与表名是严格区分大小写的 
2.表的别名是严格区分大小写的 
3.列名与列的别名在所有的情况下均是忽略大小写的 
4.变量名也是严格区分大小写的 


3)max_allowed_packet  

value:16777216

最大接收包的大小(可以理解为指令集大小)

修改方法1) 方法1可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。

max_allowed_packet = 20M如果找不到my.cnf可以通过mysql --help | grep my.cnf去寻找my.cnf文件。

2) 方法2 进入mysql server在mysql 命令行中运行set global max_allowed_packet = 2*1024*1024*10然后关闭掉这此mysql server链接,再进入。show VARIABLES like ‘%max_allowed_packet%‘;查看下max_allowed_packet是否编辑成功



4)max_binlog_cache_size

max_binlog_cache_size 表示的是binlog 能够使用的最大cache 内存大小

当我们执行多语句事务的时候 所有session的使用的内存超过max_binlog_cache_size的值时

就会报错:“Multi-statement transaction required more than ‘max_binlog_cache_size‘ bytes ofstorage”



5)max_binlog_size

二进制日志最大大小

当停止或者重启时,服务器会把日志文件记入下一个日志文件,Mysql会在重启时生成一个新 的日志文件,文件序号递增,此外,如果日志文件超过max_binlog_size系统变量配置的上限时,也会生成新的日志文件,不定期处理的话长期以往硬盘扛不住。

mysql提供了mysqlbinlog命令来查看日志文件,如mysqlbinlog xxx-bin.001 | more。在记 录每条变更日志的时候,日志文件都会把当前时间给记录下来,以便进行数据库恢复。

通过SET SQL_LOG_BIN的值来设定是否启用日志。


数据恢复:

如果遇到灾难事件,应该用最近一次制作的完整备份恢复数据库,然后使用备份之后的日志 文件把数据库恢复到最接近现在的可用状态。  使用日志进行恢复时需要依次进行,即最早生成的日志文件要最先恢复:

 mysqlbinlog xxx-bin.00001 | mysql –u root –p

mysqlbinlog xxx-bin.00002 | mysql –u root –p


日志:(以***释来自网上)

1、MySQL日志文件系统的组成
  a、错误日志:记录启动、运行或停止mysqld时出现的问题。
  b、通用日志:记录建立的客户端连接和执行的语句。
  c、更新日志:记录更改数据的语句。该日志在MySQL 5.1中已不再使用。
  d、二进制日志:记录所有更改数据的语句。还用于复制。
  e、慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。
  f、Innodb日志:innodb redo log

查看日志:mysqlbinlog [options] log_file ...

例如,要显示名字为binlog.000003的日志文件,按如下方式调用即可:mysqlbinlog binlog.000003提供了mysqlbinlog命令来查看日志文件,如mysqlbinlog xxx-bin.001 | more。在记录每条变更日志的时候,日志文件都会把当前时间给记录下来,以便进行数据库恢复。

注意在进行数据恢复的时候要按文件顺序来恢复。

技术分享

技术分享技术分享

 



6)max_binlog_stmt_cache_size

max_binlog_stmt_cache_size 这个值load data导入超大的文件(10G以上)必须要加大。


7)max_connections

 实际MySQL服务器允许的最大连接数; 


8)max_connect_errors 

当客户端连接服务端超时(超过connect_timeout), 服务端就会给这个客户端记录一次error,当出错的次数达到max_connect_errors的时候,这个客户端就会被锁定。除非执行FLUSH HOSTS命令,建议:能设多大就设多大


9)max_delayed_thread 其实与max_insert_delayed_thread数目同

设定最大启动线程来处理INSERT DELAYED语句也就是可以启动的最大处理insert delayed的数量 


10)max_error_count

运行出现的最大错误总数


11)max_tmp_tables:

它规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下,

默认:mysql> show variables like "tmpdir";

优化查询语句的时候,要避免使用临时表,如果实在避免不了的话,要保证这些临时表是存在内存中的。如果需要的话并且你有很多group by语句,并且你有很多内存,增大tmp_table_size(和max_heap_table_size)的值。


12)max_heap_table_size

这个变量定义了用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。这个变量支持动态改变,即set @max_heap_table_size=#,但是对于已经存在的内存表就没有什么用了,除非这个表被重新创建(create table)或者修改(alter table)或者truncate table。服务重启也会设置已经存在的内存表为全局max_heap_table_size的值。这个变量和tmp_table_size一起限制了内部内存表的大小。


13)max_insert_delayed_thread

Innodb提供有insert buffer以批量操作减少IO(最新版本扩充为change buffer),MyISAM也有类似功能,称作insert delayed,即延迟提交;延迟插入的记录保存在内存中,如果此时断电则会丢失,当新插入行不立即被查询时可用此功能提升IO;

设定最大启动线程来处理INSERT DELAYED语句也就是可以启动的最大处理insert delayed的数量 


14)max_join_size 

允许读取的连接的数量


15)max_length_for_sort_data

mysql有两种文件排序算法(双路排序和单路排序),如果需要排序的列的总大小加上order by列的大小超过了 max_length_for_sort_data定义的字节,mysql就会使用双路排序。

可以通过改变 max_length_for_sort_data变量的值来影响mysql选择的算法。因为单路排序为将要排序的每一行创建了固定的缓冲区,varchar列的最大长度是 max_length_for_sort_data规定的值,而不是排序数据的实际大小。

双路排序:(以***释来自网上)

读取行指针和order by列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出。

双路排序的开销可能会非常巨大,因为他会读取表两次,第二次读取会引发大量的随机IO,对于myisam涞说,这个代价尤其昂贵,myisam表利用系统调用去提取每行的数据。


单路排序:
读取查询需要的所有列,按照order by 列对他们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO变成了顺序IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。


16)max_long_data_size

最大输入数据的长度


17)max_prepare_stmt_count

最大预处理命令数目,变量设置预处理语句限制数。这个功能能防止拒绝服务攻击,因为攻击可以通过大量的预处理语句致使服务器内存溢出来攻击。设置此变量就是一道安全屏障,此变量对原有的预处理语句不影响,但若是预处理语句的数量超过该变量的值,则不会新增预处理语句,而是等到预处理语句的值小于max_prepared_stmt_count的值才增加新语句。


18)max_relay_log_size

标记relay log 允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小;

区别是:从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器。


19)max_seeks_for_key

查询时最大搜索的key的个数,可以用来查询优化,启动 mysqld 时使用参数 --max-seeks-for-key=1000 或者执行 SET max_seeks_for_key=1000 来告诉优化程序,所有的索引都不会导致超过1000次的索引搜索。总之:建议这个值设定的小一点。


20)max_sort_length 

在排序blob或者text时使用的字节数量


21)max_sp_recursion_depth

mysql递归型存储的最大深度


22)max_user_connections 

是 MySQL 用户连接数的最大值设置,默认为0意思为无限制


23)max_write_lock_count

最大写锁的数量


24)max_metadata_locks_count

设定mysqld元数据锁缓存的上限。此缓存可用来避免创建或销毁同步对象(synchronization object)。


25)min_examined_row_limit

这也是判断一个查询是否是慢查询的一个变量,  若查询的结果集行数大于min_examined_row_limit值,则查询被当作慢查询写入慢查询日志。



26)multi_range_count

 设定查询语句中range范围最大个数,这个变量没什么用。


27)myisam-data-pointer-size

默认指针大小,单位是字节, MAX_ROWS不指定时,CREATE TABLE使用该变量创建MyISAM表。默认值是6。值域:2~7


28)myisam-max-sort-file-size
当用到REPAIRTABLE, ALTER TABLE, LOAD DATA INFILE的时候,相应的索引会被重建,然后要用到临时文件,此变量就是设置临时文件大小的。如果索引文件大小比此值小,系统则调用速度更慢的键值创建索引。

官网建议:如果MyISAM索引文件大于2G且硬盘空间允许,增大该值可以提高性能。注意的是增加的空间是包含原来索引文件空间的。


29)myisam-mmap-size

Mmp:memorymapping 内存映射

设置使用内存映射压缩MyISAM表文件的最大内存量的变量

如果许多压缩MyISAM表使用,可以通过降低该值来减低内存交换问题出现的可能性。


30)myisam_recover_options                

设置MyISAM存储模式,它的值可以是OFF, DEFAULT, BACKUP, FORCE, QUICK任意组合,组合值则用‘,’隔开。

默认是backup。

若非OFF的话,表示每次打开MyISAM表都检查表是否崩溃或者非正常保存,否则和尝试修复表。

修复按照值选项而定:

OFF:关闭

DEFAULT:修复中没有BACKUP, FORCE,QUICK

BACKUP:如果修复过程中用户修改数据,则把“表名.MYD”文件备份成“表名-时间.BAK”文件

FORCE:继续修复数据即便是丢失大量数据

QUICK:不检查表中的行,如果没有任何删除块。

还有的是,修复之前,mysql会在错误日志中写入note,这个note关于修复的。

官网建议:如果想在不受用户打扰的情况下修复数据,则设置为“BACKUP, FORCE”。这样的话,就强制修复即便有人删除数据,修复完了还可以用备份数据查看发生情况。


31)myisam_repair_threads               

myisam_repair_threads=1 则在repairby sort时,MyISAM表索引在各自线程中并发创建。



32)myisam_sort_buffer_size              

REPAIR TABLE或在 CREATEINDEX 和 ALTER TABLE创建索引的时候,.给分配的缓冲区的大小。


33)myisam_stats_method                    默认: nulls_unequal

变量告诉服务器,在服务器收集有关MyISAM表的索引值的分布统计时如何处理NULL值。变量可选三个值:nulls_equal,nulls_unequal, nulls_ignored.

Nulls_equal 时,所有null值都被当成一样,形成一个大小是null值个数的单值组。

nulls_unequal时,null被认为是不一样的(尽管我们看来是一样),每个null形成一个大小为1的不同值组。

nulls_ignored时,值被忽略

PS:至于为什么要这样区别对待,这里有讲解http://www.phpben.com/?post=69


34)myisam_use_mmap                   

这个变量开启的话,就利用内存映射来读和写myisam表,默认是关闭的OFF,一般内存不是很大的情况下是不会开启这一项


35)net_buffer_length

XXX  TCP/IP和套接字通信缓冲区大小,设定的大一点可以加快导入速度。


36)net_read_timeout

在终止读之前,从一个连接获得数据而等待的时间秒数;当服务正在从客户端读取数据时,net_read_timeout控制何时超时。这个参数在连接繁忙阶段(query)起作用。


37)slave_net_timeout

当slave认为连接master的连接有问题时,就等待N秒,然后断开连接,重新连接master


38)net_write_timeout

在终止写之前,等待多少秒把block写到连接;当服务正在写数据到客户端时,net_write_timeout控制何时超时,这个参数在连接繁忙阶段(query)起作用。


39)wait_timeout

与服务器端无交互状态的连接,直到被服务器端强制关闭而等待的时间,在连接空闲阶段(sleep)起作用


40)interactive_timeout 

与服务器端无交互状态的连接,直到被服务器端强制关闭而等待的时间,在连接空闲阶段(sleep)起作用


41)connect_timeout

等待一个连接响应的时间,在获取连接阶段(authenticate)起作用


42)net_retry_count                   

如果读或写一个通信端口中断,mysql放弃前尝试连接的次数。


43) new                                 

变量用于mysql4.0启用mysql4.1一些新功能,和为了保持向后兼容性。在mysql5.6中,这个变量的值都是OFF。


44) old                                    

Old是兼容性变量。默认被禁用(OFF),在旧版本的服务器可以通过重启服务器时启用。

目前,old被启用时,它改变使用索引提示的默认范围到MySQL5.1.17之前。也就是说,没有FOR子句仅适用于如何使用索引检索行,而不是解决ORDER BY或GROUP BY子句的索引提示。在复制设置启用这个变量时要注意些,基于语句的二进制日志,主从服务器有不同的模式可能会导致复制错误。


45)old_alter_table                        默认OFF

当该变量被启用,则mysql服务器不会使用alerttable 优化方法。在mysql5.0和更早版本,先用个临时表,复制数据进去,然后重命名到原始的临时表。

人气教程排行