1:参数
``参数,也被称之为MySQL
的系统变量,这些变量是影响MySQL
运行的关键,对每个参数做出不同调整,都有可能直接影响到线上数据库的性能,具体的完整系统参数可参考《MySQL官网文档-系统变量》,官方提供的系统参数数量大致如下:
通过xpath
的方式提取数据,大概能够得知MySQL
系统变量大概一千个上下,因此这里就不做过多的详细介绍,简单介绍一些较为常用的即可,其他具体的可参考前面给出的官网链接。
但是要注意,虽说
MySQL
中有一千多个对外暴露的系统参数,但并不是所有的参数都可以让用户调整,MySQL
的系统参数分为了三类:
一类是由MySQL
自己维护的参数,这类参数用户无法调整。
第二类是以配置文件的形式加载的参数,这类参数必须在MySQL
停机的情况下才能更改。
第三类是运行时的系统参数,这类是可以由用户去做动态调整的。
咱们需要关心的重点就是第三类参数,那如何观察这类参数呢?方式如下:
-
show global variables;
:查看全局所有用户级别可以看到的系统变量。 -
show session variables; | show variables;
:查看当前会话的所有系统变量。 -
show variables like '%关键字%';
:使用模糊查询搜索某个系统变量。
MySQL5.1
与MySQL8.0
版本的执行结果如下:
通过xpath
的方式提取数据,大概能够得知MySQL
系统变量大概一千个上下,因此这里就不做过多的详细介绍,简单介绍一些较为常用的即可,其他具体的可参考前面给出的官网链接。
但是要注意,虽说
MySQL
中有一千多个对外暴露的系统参数,但并不是所有的参数都可以让用户调整,MySQL
的系统参数分为了三类:
一类是由MySQL
自己维护的参数,这类参数用户无法调整。
第二类是以配置文件的形式加载的参数,这类参数必须在MySQL
停机的情况下才能更改。
第三类是运行时的系统参数,这类是可以由用户去做动态调整的。
咱们需要关心的重点就是第三类参数,那如何观察这类参数呢?方式如下:
-
show global variables;
:查看全局所有用户级别可以看到的系统变量。 -
show session variables; | show variables;
:查看当前会话的所有系统变量。 -
show variables like '%关键字%';
:使用模糊查询搜索某个系统变量。
MySQL5.1
与MySQL8.0
版本的执行结果如下:
可以很明显的从结果中得知:MySQL5.1
版本中存在278
个系统变量,MySQL8.0
版本中存在557
个系统变量,这仅仅只是社区版,而在商业版的MySQL
中,其系统参数会更多,下面调出一些重点来聊一聊。
-
max_connections
:MySQL
的最大连接数,超出后新到来的连接会阻塞或被拒绝。 -
version
:当前数据库的版本。 -
ft_min_word_len
:使用MyISAM
引擎的表中,全文索引最小搜索长度。 -
ft_max_word_len
:使用MyISAM
引擎的表中,全文索引最大搜索长度。 -
ft_query_expansion_limit
:MyISAM
中使用with query expansion
搜索的最大匹配数。 -
innodb_ft_min_token_size
:InnoDB
引擎的表中,全文索引最小搜索长度。 -
innodb_ft_max_token_size
:InnoDB
引擎的表中,全文索引最大搜索长度。 -
optimizer_switch
:MySQL
隐藏参数的开关。 -
skip_scan
:是否开启索引跳跃扫描机制。 -
innodb_page_size
:InnoDB
引擎数据页的大小。 -
tx_isolation
:事务的隔离级别。 -
autocommit
:事务自动提交机制。 -
innodb_autoinc_lock_mode
:插入意向锁的工作模式。 -
innodb_lock_wait_timeout
:InnoDB
锁冲突时,阻塞的超时时间。 -
innodb_deadlock_detect
:是否开启InnoDB
死锁检测机制。 -
innodb_max_undo_log_size
:本地磁盘文件中,Undo-log
的最大值,默认1GB
。 -
innodb_rollback_segments
:指定回滚段的数量,默认为1
个。 -
innodb_undo_directory
:指定Undo-log
的存放目录,默认放在.ibdata
文件中。 -
innodb_undo_logs
:指定回滚段的数量,默认为128
个,也就是之前的innodb_rollback_segments
。 -
innodb_undo_tablespaces
:指定Undo-log
分成几个文件来存储,必须开启innodb_undo_directory
参数。 -
back_log
:回滚日志的最大回撤长度(一条数据的最长版本链长度)。 -
innodb_undo_log_truncate
:是否开启Undo-log
的压缩功能,即日志文件超过一半时自动压缩,默认关闭。 -
innodb_flush_log_at_trx_commit
:设置redo_log_buffer
的刷盘策略,默认每次提交事务都刷盘。 -
innodb_log_group_home_dir
:指定redo-log
日志文件的保存路径,默认为./
。 -
innodb_log_buffer_size
:指定redo_log_buffer
缓冲区的大小,默认为16MB
。 -
innodb_log_files_in_group
:指定redo
日志的磁盘文件个数,默认为2
个。 -
innodb_log_file_size
:指定redo
日志的每个磁盘文件的大小限制,默认为48MB
。 -
innodb_log_write_ahead_size
:设置checkpoint
刷盘机制每次落盘动作的大小。 -
innodb_log_compressed_pages
:是否对Redo
日志开启页压缩机制,默认ON
。 -
innodb_log_checksums
:Redo
日志完整性效验机制,默认开启。 -
log_bin
:是否开启bin-log
日志,默认ON
开启,表示会记录变更DB
的操作。 -
log_bin_basename
:设置bin-log
日志的存储目录和文件名前缀,默认为./bin.0000x
。 -
log_bin_index
:设置bin-log
索引文件的存储位置,因为本地有多个日志文件,需要用索引来确定目前该操作的日志文件。 -
binlog_format
:指定bin-log
日志记录的存储方式,可选Statment、Row、Mixed
。 -
max_binlog_size
:设置bin-log
本地单个文件的最大限制,最多只能调整到1GB
。 -
binlog_cache_size
:设置为每条线程的工作内存,分配多大的bin-log
缓冲区。 -
sync_binlog
:控制bin-log
日志的刷盘频率。 -
binlog_do_db
:设置后,只会收集指定库的bin-log
日志,默认所有库都会记录。 -
log-error
:error-log
错误日志的保存路径和名字。 -
slow_query_log
:设置是否开启慢查询日志,默认OFF
关闭。 -
slow_query_log_file
:指定慢查询日志的存储目录及文件名。 -
general_log
:是否开启查询日志,默认OFF
关闭。 -
general_log_file
:指定查询日志的存储路径和文件名。 -
innodb_buffer_pool_size
:InnoDB
缓冲区的大小。 -
innodb_adaptive_hash_index
:是否开启InnoDB
的自适应哈希索引机制。 -
innodb_compression_level
:调整压缩的级别,可控范围在1~9
,越高压缩效果越好,但压缩速度也越慢。 -
innodb_compression_failure_threshold_pct
:当压缩失败的数据页超出该比例时,会加入数据填充来减小失败率,为0
表示禁止填充。 -
innodb_compression_pad_pct_max
:一个数据页中最大允许填充多少比例的空白数据。 -
innodb_log_compressed_pages
:控制是否对redo-log
日志的数据也开启压缩机制。 -
innodb_cmp_per_index_enabled
:是否对索引文件开启压缩机制。 -
character_set_client
:客户端的字符编码格式。 -
character_set_connection
:数据库连接的字符编码格式。 -
character_set_database
:数据库的字符编码格式。 -
character_set_results
:返回的结果集的编码格式。 -
character_set_server
:MySQL-Server
的字符编码格式。 -
character_set_system
:系统的字符编码格式。 -
collation_database
:数据库的字符排序规则。 -
......
:剩下的就不再列出来了,大家可根据查询出的变量名,去官网文档查询释义即可。
2:常见错误码
程序Bug
、错误、异常.....,这些词汇天生与每位程序员挂钩,当一个程序出现问题时,用户第一时间想到的是这个平台的程序员不行,而身为开发者逃不开一点是:又得背锅和加班解决问题!
而MySQL
作为整个系统的后方大本营,自然也无法避免会出现错误与异常,在MySQL
内部其实定义了一系列错误码,当运行过程中发生错误,或执行语句时出现异常时,一般情况下都会向客户端返回错误码以及错误信息。
但往往很多时候有些错误咱们没见过,所以面对问题时难免有些束手无策,也正因为如此,本节将罗列
MySQL
中常见的错误码,当你碰到问题时可以直接通过错误码在此搜索,以此来定位问题出现的原因,以此进一步推导出问题的解决方案。
MySQL
的错误信息由ErrorCode、SQLState、ErrorInfo
三部分组成,即错误码、SQL
状态、错误信息三部分组成,如下:
ERROR 1045 (28000): Access denied for user 'zhuzi'@'localhost' (using password: YES)
其中1045
属于错误状态码,28000
属于SQL
状态,后面跟着的则是具体的错误信息,不过MySQL
内部大致定义了两三千个错误码,其错误码的定义位于include/mysqld_error.h、include/mysqld_ername.h
文件中,而SQLState
的定义则位于include/sql_state.h
文件中,所有的错误信息列表则位于share/errmsg.txt
文件中,因此大家感兴趣的可自行编译MySQL
源码查看。