MySQL5.7 参数详解

目录

一、参数读取顺序

二、参数类型

三、参数详解

四、参考资料


一、参数读取顺序

        通过命令:/bin/mysql --verbose --help| grep -A 1 'Default options',可以查看MySQL的参数配置,查询出来具有顺序性。以下查询可以看出,MySQL是按/etc/my.cnf → /etc/mysql/my.cnf → /usr/etc/my.cnf → ~/.my.cnf 顺序读取。

[root@micro-service-b-1 ~]$ which mysql
/bin/mysql
[root@micro-service-b-1 ~]$ /bin/mysql --verbose --help| grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 
[root@micro-service-b-1 ~]$ 

        注意:多个配置文件配置相同参数,以最后的读取为准。同时,MySQL数据库可以没有配置文件的情况下,则按照MySQL编译时默认参数和源代码指定参数的默认值来启动MySQL实例。

二、参数类型

        MySQL数据库的参数以键值对(key/value)的形式配置。通过show variables命令查询所有的参数配置,也可以通过like来过滤参数名。如下所示,查询Innodb存储引擎处理io的线程配置。

mysql> show variables like 'innodb_%io_threads'\G;
*************************** 1. row ***************************
Variable_name: innodb_read_io_threads
        Value: 4
*************************** 2. row ***************************
Variable_name: innodb_write_io_threads
        Value: 4
2 rows in set (0.01 sec)

        MySQL的参数类型分为两类:

  • 动态(dynamic)参数:MySQL实例运行中,可以修改的参数
  • 静态(static)参数:整个MySQL实例生命周期不能修改(只读),启动实例前可以修改
mysql> set global datadir='/db/mysql';
ERROR 1238 (HY000): Variable 'datadir' is a read only variable

        设置参数命令:set global | session 或 set @@global | @@session。global是全局参数,即:整个实例生命周期都有效;session是当前会话参数设置。注意全局设置是对当前启动的实例生命周期都有效,但是实例本身不会对参数文件中的值进行修改

三、参数详解

        以下参数,通过show variables或show variables like查询。

类型名称描述
错误日志log_error

1. 不仅记录所有的错误信息,也记录警告和正常信息;

2. 默认路径数据目录下.err结尾的文件

查询日志general_log

1. 是否开启查询日志文件(记录所有对MySQL请求信息);

2. 默认关闭OFF,原因是日志量非常庞大

general_log_file

1. 查询日志文件路径;

2. 默认./(数据库数据目录,即:data目录)

慢查询日志slow_query_log

1. 是否开启慢查询日志;

2. 默认关闭OFF,开启ON

long_query_time

1. 大于时间阈值时则记录;

2. 默认10s(>10s时记录)

slow_query_log_file

1. 慢查询日志文件路径;

2. 默认./(数据库数据目录,即:data目录)

log_output

1. 慢查询/通用查询日志输出格式;

2. 默认FILE;若TABLE时,则mysql.slow_log表

log_queries_not_using

_indexes

1. SQL没有使用索引时,是否记录到慢查询日志;

2. 默认关闭OFF,ON开启

log_throttle_queries_not

_using_indexes

1. SQL没有使用索引时,每分钟记录到慢查询日志中的个数;

2. 默认0,即:没有限制

二进制日志log-bin

1. 是否开启二进制日志文件,log-bin=[name];

2. 默认路径是datadir指定,文件名称name指定

max_binlog_size

1. 单个二进制日志文件的最大值,默认1073741824= 1G;

2. 超过该值后,则生成一个新文件,后缀名+1,并记录到index

binlog_cache_size

1. 事务开始时,所有未提交的二进制日志记录到一个缓存中,等待事务提交时,直接将缓存写入二进制日志文件;

2. 当线程开启一个事务时,会自动创建一个缓存;

3. 默认缓存大小32768 = 32KB,超出时,则写入临时文件

sync_binlog

1. sync_binlog=[N],表示每写缓冲N次就触发同步到磁盘;

2. sync_binlog=1表示同步写磁盘,即:不使用缓存直接写入磁盘

innodb_support_xa

1. 是否支持XA事务,默认开启ON;

2. sync_binlog=1时,事务已提交,而写磁盘时宕机,通过该参数完成二进制日志与数据文件的同步

binlog_format

1. 二进制日志文件输出格式,默认ROW;

2. 格式类型:Statement(内容SQL语句,但是Mysql函数不会写入),Row(更新的记录),Mixed(SQL+Row)

表空间innodb_data_file_path

1. 共享表空间的路径,默认数据目录下的ibdata1;

2. 多文件组成一个表空间;

3. 共享表空间存放所有表数据

innodb_file_per_table

1. 是否开启为每个表建立独立表空间;

2. 默认开启ON,表空间为:表名.ibd;

3. 独立表空间存储:表数据、索引、插入缓冲的BITMAP信息,其他存储在默认共享表空间。

重做日志innodb_log_file_size

1. 每个重做日志文件的大小;

2. 不能大于512G

innodb_log_files_in_group

1. 重做日志文件组中的文件数量;

2. 默认2,数据目录下的:ib_logfile0、ib_logfile1

innodb_log_group_home

_dir

1. 重做日志文件所在的路径;

2. 默认./,即:数据目录下

innodb_log_buffer_size重做日志缓冲大小,默认8MB

innodb_flush_log_at_trx

_commit

1. 控制事务提交时处理重做日志方式;

2. 默认1:事务提交时,redo log buffer写入磁盘、

           0:等待master thread每秒刷新到磁盘、

           2:异步写入磁盘,注意事务提交时不能确保写入重做日志中

   注意:0、2导致事务丢失

PID文件pid_fileMySQL实例的进程ID文件,默认路径数据目录
临时目录

tmpdir

1. 临时文件存放路径,如:存放临时表、socket文件等;

2. 默认/tmp

套接字文件socket

1. 连接MySQL实例使用套接字方式;

2. 默认路径:/tmp目录

InnoDB版本innodb_version查看InnoDB版本,也可以使用select version()语句
读写线程innodb_read_io_threads配置InnoDB从磁盘读取数据的线程个数,默认4
innodb_write_io_threads配置InnoDB从缓冲写入磁盘的线程个数,默认4
Purge线程innodb_purge_threads

1. 配置线程个数回收事务提交后的undolog页;

2. 默认线程数4

Buffer Poolinnodb_buffer_pool_size

1. 设置缓冲池大小,影响着MySQL整体性能;

2. 默认值128MB

innodb_buffer_pool_instances缓冲池实例个数,默认1
innodb_buffer_pool_filename

1. 设置缓冲池名;

2. 默认ib_buffer_pool,在数据目录下

LRU算法innodb_old_blocks_pct

1. 新读取的页插入LRU列表中的位置(midpoint);

2. 默认37%,该位置的前部是new部分,后部是old部分

innodb_old_blocks_time

1. 在midpoint等待多久移到到LRU列表的前端;

2. 默认1000ms=1s;

3. page made young:该时间过后,移动到LRU首端;

    page not made young:没有移动到LRU首端

Checkpoint

innodb_fast_shutdown

1. MySQL关闭时,所有脏页刷新到磁盘;

2. 默认1,表示开启;

3. 属于Sharp Checkpoint

innodb_lru_scan_depth

1. LRU列表可用页的数量,默认1024页;

2. 少于该值时,触发Checkpoint;

3. 属于Fuzzy Checkpoint

innodb_max_dirty_pages

_pct

1. 脏页占缓冲池的百分比,默认75%;

2. 占比超出该值后,触发Checkpoint;

3. 属于Fuzzy Checkpoint

Change Bufferinnodb_change_buffering

1. 开启INSERT/DELETE/UPDATE的各种缓冲;

2. 默认all,开启以上三种缓冲

innodb_change_buffer

_max_size

1. Change Buffer占缓冲池的百分比,默认25%;

2. 该参数最大值50%,即:占缓冲池的一半

Double WriteInnodb_dblwr_pages_written写的页数,使用show global status查询
Innodb_dblwr_writes

1. 写入磁盘的次数,使用show global status查询;

2. 页数 : 次数远小于64:1,说明系统写入压力不高

Native AIO

innodb_use_native_aio

1. 是否开启Native AIO,即:使用内核的AIO;

2. 默认ON启用

刷新邻接页innodb_flush_neighbors

1. 是否开启刷新邻接页,即:刷新页时,该页所在的区(extent)的所有脏页是否刷新到磁盘;

2. 默认开启1,关闭0

MySQL关闭innodb_fast_shutdown

1. MySQL关闭时的操作,默认1;

2. 值:1:无需完成所有的purge和merge insert buffer,缓冲池的脏页刷新即可

            0:完成所有的purge和merge insert buffer

            2:没有完成1和2,需要日志写入日志文件

MySQL启动innodb_force_recovery

MySQL启动时的操作,默认0(进行所有的恢复)

数据页

完整性检查

innodb_checksums

1. 是否开启页的完整性检查;

2. 默认开启ON(即:每次从磁盘读取页的时候,检查页的完整性)

innodb_checksum

_algorithm

页的完整性检查的checksum函数算法,默认crc32

行格式

innodb_file_format

1. 查询文件格式;

2. 当前值为Barracuda,包括:Antelope(老版本行记录格式:Compact/Redudant) + Dynamic + Compressed

innodb_file_format

_check

1. 是否开启检查InnoDB对file_format的支持;

2. 默认开启ON(检查是否支持)

SQL入参审查

sql_mode

1. 审查sql的输入参数,可多值;

2. 默认:ONLY_FULL_GROUP_BY,

               STRICT_TRANS_TABLES,

               NO_ZERO_IN_DATE,

               NO_ZERO_DATE,

               ERROR_FOR_DIVISION_BY_ZERO,

               NO_AUTO_CREATE_USER,

               NO_ENGINE_SUBSTITUTION

分区支持

show plugins

1. 查询MySQL是否支持分区;

2. 使用该命令,查看:Name: partition

                                    Status: ACTIVE

外键检查

foreign_key_checks

1. 是否开启外键即时检查;

2. 默认开启ON,即:子表插入数据时检查外键;

3. 子表大批量插入数据时,可以暂时关闭外键检查

索引算法

old_alter_table

1. 创建或删除索引的算法;

2. 默认关闭OFF(采用INPLACE);

3. INPLACE:无需创建临时表,采用Online DDL;

    COPY:创建临时表

Online DDL

缓存

innodb_online_alter

_log_max_size

1. Online DDL时,DML操作日志的缓存大小;

2. 默认128MB

Cardinality值

采样

innodb_stats_sample

_pages

Cardinality的每次采样统计的页数,默认8

innodb_stats_method

1. Cardinality采样统计对Null的处理;

2. 默认nulls_equal(NULL值作为相同记录)、   

           nulls_unequal(NULL值作为不同记录)、

           nulls_ignored(忽略NULL)

innodb_stats_persistent

1. analyze table触发Cardinality统计时,其值是否存入磁盘;

2. 默认ON(减少重新计算每个索引的Cardinality值)

innodb_stats_on

_metadata

1. show table status、show index、访问information_schema下的TABLES和STATISTICS时,是否开启Cardinality统计;

2. 默认OFF

innodb_stats_persistent

_sample_pages

1. 参数innodb_stats_persistent为ON时,使用analyze table每次采样统计的页数;

2. 默认20

innodb_stats_transient

_sample_pages

代替innodb_stats_sample_pages参数,默认8

优化器

optimizer_switch

1. 优化器开关,多值;

2. 如:可启用MRR(Multi-Range Read):mrr为on(默认)表示开启,mrr_cost_based为on(默认)表示是否通过cost based方式来启用MRR;为off时,表示总是启用MRR

如:可启用ICP(Index Condition Pushdown):index_condition_pushdown为on(默认)表示开启

read_rnd_buffer_size

MRR的键值对的缓冲区大小,默认256KB

自适应

Hash索引

innodb_adaptive_hash

_index

开启自适应哈希索引,默认开启ON

全文检索

索引

innodb_ft_aux_table

1. 哪些表通过INNODB_FT_INDEX_TABLE表来查询表的倒排索引的辅助表(Auxiliary Table);

2. 默认空

innodb_ft_cache_size

全文检索索引缓存的大小设置,默认32MB

innodb_ft_server_stopword

_table

1. 用户自定义stopword(忽略的全文检索词)的表;

2. 默认空

innodb_ft_min_token_size

1. 全文检索查询字段的最小长度;

2. 默认3,若少于该值时,则忽略该查询

innodb_ft_max_token_size

1. 全文检索查询字段的最大长度;

2. 默认83,若大于该值时,则忽略该查询

自增长

innodb_autoinc_lock_mode

1. 自增长模式;

2. 默认1(simple inserts则使用互斥量对内存中的计数器累加操作;bulk inserts则为表锁的AUTO-INC locking)、

           0(表锁)、

           2(insert-like则表锁,其他为非表锁)

关闭

Gap Lock

innodb_locks_unsafe

_for_binlog

1. 是否关闭Gap Lock;

2. 默认OFF,即0(启用Gap Lock)、

                         1(关闭Gap Lock)

阻塞事务

innodb_lock_wait_timeout

阻塞事务的等待时间

innodb_rollback_on_timeout

1. 阻塞事务超时后,是否进行回滚;

2. 默认OFF不回滚(静态参数)

undo log

innodb_undo_directory

1. undo日志rollback segment所在的路径;

2. 默认./(ibdata1)

innodb_undo_logs

1. undo日志rollback segment的个数;

2. 默认128

innodb_undo_tablespaces)

1. undo日志空间数量(构成rollback segment的文件数);

2. 默认0

purge操作

innodb_purge_batch_size

1. 每次purge操作需要清理的undo page的数量;

2. 默认300

innodb_max_purge_lag

1. 控制history list(事务提交的顺序列表)的最大长度;

2. 默认0(不对history list做任何限制),

   若大于0时,则每次DML操作时,更新行有延迟

innodb_max_purge_lag

_delay

更新行,最大延迟的毫秒数,默认0

group commit

binlog_max_flush_queue

_time

1. 组提交(group commit)时的flush阶段中等待时间;

2. 默认0(不等待)

事务提交后的行为

completion_type

1. 控制事务提交后的行为;

2. 默认0(NO_CHAIN没有任何操作,即:commit=commit work)、

           1(commit work等同于commit and chain,链式事务:事务提交后,自动开启相同隔离级别的事务)、

           2(自动断开与服务器的连接)

四、参考资料

MySQL :: MySQL 5.7 Reference Manual :: 1.4 Server and Status Variables and Options Added, Deprecated, or Removed in MySQL 5.7

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 5.7 的权限系统主要分为以下几个方面: 1. 用户管理:包括创建、修改、删除用户及其密码等。 2. 权限管理:包括授权、回收权限等。 3. 角色管理:角色是一组权限的集合,可以将角色授权给用户,简化权限管理。 4. 权限检查:在用户访问数据库时进行权限检查,决定用户是否有权进行操作。 下面是具体的权限详解: 1. 用户管理 创建用户:可以使用 CREATE USER 语句创建用户。例如,创建一个名为 "test" 的用户并设置密码: ``` CREATE USER 'test'@'localhost' IDENTIFIED BY 'password'; ``` 修改用户:可以使用 ALTER USER 语句修改用户信息,例如,修改用户的密码: ``` ALTER USER 'test'@'localhost' IDENTIFIED BY 'new_password'; ``` 删除用户:可以使用 DROP USER 语句删除用户: ``` DROP USER 'test'@'localhost'; ``` 2. 权限管理 授权:可以使用 GRANT 语句授权给用户或角色执行某些操作的权限。例如,授权用户 "test" 在 "example" 数据库中查询、插入、更新和删除的权限: ``` GRANT SELECT, INSERT, UPDATE, DELETE ON example.* TO 'test'@'localhost'; ``` 回收权限:可以使用 REVOKE 语句回收用户或角色的某些权限。例如,回收用户 "test" 在 "example" 数据库中删除数据的权限: ``` REVOKE DELETE ON example.* FROM 'test'@'localhost'; ``` 3. 角色管理 创建角色:可以使用 CREATE ROLE 语句创建角色。例如,创建一个名为 "developer" 的角色: ``` CREATE ROLE developer; ``` 授权角色:可以使用 GRANT 语句将权限授予角色。例如,将 "developer" 角色授权在 "example" 数据库中查询的权限: ``` GRANT SELECT ON example.* TO developer; ``` 将角色授权给用户:可以使用 GRANT 语句将角色授权给用户。例如,将 "developer" 角色授权给用户 "test": ``` GRANT developer TO 'test'@'localhost'; ``` 回收角色授权:可以使用 REVOKE 语句回收角色的授权。例如,将 "developer" 角色从用户 "test" 中回收: ``` REVOKE developer FROM 'test'@'localhost'; ``` 删除角色:可以使用 DROP ROLE 语句删除角色。例如,删除 "developer" 角色: ``` DROP ROLE developer; ``` 4. 权限检查 MySQL 在用户访问数据库时会进行权限检查,判断用户是否有权限进行操作。如果用户没有权限,则会拒绝该操作并返回错误信息。例如,当用户 "test" 尝试在 "example" 数据库中删除数据时,如果该用户没有删除数据的权限,则会返回以下错误信息: ``` ERROR 1142 (42000): DELETE command denied to user 'test'@'localhost' for table 'example' ``` 以上就是 MySQL 5.7 的权限系统的详解

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值