MariaDB配置文件主要参数含义

配置文件 my-innodb-heavy-4G.cnf

主要参数

  • password:mysql客户端连接mysql时的密码
  • port:mysql监听端口,默认是3306
  • skip-networking:这个选项默认没有开机,开启后只能进行本地连接,其他主机无法通过网络连接到这个数据库
  • back_log:是操作系统在队列中能保持的连接数,如果连接率很高或者在连接数据库时出现了“connection refuse”的报错,可以增加这个参数的值。但是如果将back_log设定到比操作系统能打开的文件数要高,将会没有效果。可以使用命令“more /proc/sys/fs/file-nr”查看系统文件打开数,该命令会输出3个参数,分别代表已分配文件句柄的数目、已使用文件句柄的数目、文件句柄的最大数目(back_log不可大于这个值)
    在这里插入图片描述
  • external-locking:外部锁定,默认没有开启,但是如果开启的话,每个进程若是要访问数据表,就必须要等到之前的进程完成操作并且解锁,那么数据库服务将经常处于等待解锁的状态,所以在单数据库服务的时候开启此参数会使数据库性能下降。但如果是多台服务器使用同一数据库目录,那么每一台服务器都要开启external-locking。
  • max_allowed_packet:服务所能处理的请求包的最大大小以及服务所能处理的最大请求。当数据库客户端或mysqld服务受到大于max_allowed_packer字节的信息包时,将发出“信息包过大”错误,并关闭连接。对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与MySQL服务器的连接”错误。如果打算处理大的信息包,必须增加客户端和服务器上的这个变量。
  • max_heap_table_size:独立的内存表所允许的最大容量。防止意外创建一个超大的内存表导致用尽所有的内存资源。
  • read_buffer_size:mariadb的随机读缓冲区大小。当能任意顺序读取行(如,按照排序顺序)时,将分配一个随机读缓存区。进行排序查询时,数据库会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但mariadb会为每个客户连接发放改缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。
  • query_cache_size:查询缓冲,常被用来缓冲SELECT的结果并且在下一次同样查询的时候不再执行直接返回结果,如果进行数据操作时总是做相同的查询且数据库的表很少进行修改的话,打开查询缓冲可以极大地提高服务器速度。
  • log_warnings:将警告打印输出到错误log文件。如果你对于MySQL有任何问题,可以打开警告log并且仔细审查错误日志,查出可能的原因。

数据库存储引擎InnoDB和MyISAM的参数

数据库存储引擎InnoDB和MyISAM的区别:MyISAM类型不支持事务处理等高级处理,而InnoDB支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持,而且不支持外键。而InnoDB提供事务支持以及外部键等高级数据库功能,支持事务安全的引擎,支持外键、行锁、事务是他最大的特点。如果执行大量的select、insert MyISAM比较合适,如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。

关于MyISAM的设置

  • key_buffer_size:关键词缓冲的大小,一般用来缓冲MyISAM表的索引快。不可以将其设置的大于可用内存的30%,因为一部分内存同样被OS用来缓冲行数据。因为它同样会被内部临时磁盘表使用,所以即使在并不适用MyISAM表的情况下,也仍需设置8-64M内存。
  • bulk_insert_buffer_size:MyISAM使用特殊的类似树的cache来使得突发插入(如INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA INFILE等)更快。此变量限制每个进程中缓冲书的字节数,设置为0会关闭此优化,为了最优化不要将此值设置大于“key_buffer_size”。当突发插入被检测到时此缓冲将被分配。
  • myisam_sort_buffer_size:此缓冲当MySQL需要在REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一个空表中引起重建索引时被分配。 这在每个线程中被分配.所以在设置大值时需要小心。
  • myisam_max_sort_file_size:MySQL重建索引时所允许的最大临时文件的大小。如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)

关于InnoDB的设置

  • innodb_additional_mem_pool_size:附加的内存池被InnoDB用来保存 metadata 信息,如果InnoDB为此目的需要更多的内存,它会开始从OS这里申请内存。由于这个操作在大多数现代操作系统上已经足够快, 一般不需要修改此值。SHOW INNODB STATUS 命令会显示当前使用的数量.
  • innodb_buffer_pool_size:与MyISAM不同,InnoDB使用一个缓冲池来保存索引和原始数据,这里设置的值越大,在存取表里面数据时所需要的磁盘I/O越少。在一个独立使用的数据库服务器上,可以设置这个变量到服务器物理内存大小的80%
  • innodb_data_file_path:InnoDB将数据保存在一个或者多个数据文件中成为表空间。如果你只有的那个逻辑驱动保存数据,一个单个的自增文件就足够好了。其他情况下,最好每个设备一个文件。
  • innodb_write_io_threads、innodb_read_io_threads: 用来同步IO操作的IO线程的数量.
  • innodb_thread_concurrency:在 InnoDB核心内的允许线程数量,最优值依赖于应用程序、硬件以及操作系统的调度方式,过高的值可能导致线程的互斥颠簸。
  • innodb_log_file_size:在日志组中每个日志文件的大小。日志文件的总和大小应该为缓冲池大小的25%-100%来避免在日志文件覆写上不必要的缓冲池刷新行为
  • InnoDB_lock_wait_timeout:在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久。InnoDB在其拥有的锁表中自动检测事务死锁并且回滚事务。如果使用了LOCK TABLES指令,或者在同样事务中使用除了InnoDB以外的其他事务安全的存储引擎,那么一个死锁可能发生而InnoDB无法注意到,这种情况下这个timeout值对于解决这种问题就非常有帮助。

与主从复制有关的配置参数

  • server-id:每一个数据库唯一的服务辨识号,在主从复制中,master和slave之间server-id号都不可以是一样的,否则会报错。这个参数在master和slave上都需要设置。
  • log-bin:打开二进制日志功能,因为主从复制的原理是将master的操作记录到二进制日志binlog里,然后slave的I/O线程将主服务器的binlog读取过来记录到中继日志relay-log中,slave的SQL线程通过执行中继日志中的操作从而达到和master同步的目的,所以在主从复制过程中,必须打开这个功能。
  • binlog_cache_size:在一个事务中binlog为了记录SQL状态所持有的cache大小。如果需要经常使用大的,多声明的事务,可以增加这个值来获取更大的性能。所有从事务来的状态都将被缓冲在binlog缓冲中,然后在提交后一次性写入binlog中。如果事务比此值大,会使用磁盘上的临时文件来替代。
  • binlog_format: 设定记录二进制日志的格式,有三种格式,基于语句statement、基于行row、混合方式mixed。设置为statement时会记录sql语句在binlog中,有点事只需要记录会修改数据的sql语句到binlog中,减少了binlog日志量,节约I/O,提高性能。缺点是在某些情况下,会导致主从节点中数据不一致。设置为row就是mysql master将SQL语句分解为基于行更改的语句并记录在binlog中,也就是只记录哪条数据被修改了,修改成什么样。优点是不会出现某些特定情况下的存储过程、函数、trigger的调用或者触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是修改table的时候会让日志暴增,同时增加binlog同步时间。也不能通过binlog解析获取执行过的sql语句,只能看到发生的data变更。mixed是以上两种模式的混合,对于一般的复制使用STATEMENT模式保存到binlog,对于STATEMENT模式无法复制的操作则使用ROW模式来保存。MySQL会根据执行的SQL语句选择日志保存方式。
  • relay-log:在从库需要打开relay-log功能,设置好relay-log的位置。
  • master-host:master的主机名,slave需要设置来连接到对应的master。
  • master-user:当slave连接到master上时用来认证的用户名
  • master-password:当slave连接到master上时用来认证的密码。
  • master-port:master-port:master监听的端口,默认是3306
  • read_only:设置slave为只读,只有用户拥有supper权限才可以修改slave上的数据,保证slave的数据不会被其他进程随意更改。
  • expire_logs_days:这个参数主要用来控制master的二进制日志保留时间,如果超过指定时间日志会被自动删除。
  • sync_binlog:这个参数对于MySQL系统来说是至关重要的,它不仅影响到binlog对MySQL所带来的性能损耗,而且还影响到mariadb中数据的完整性。它控制着二进制日志和硬盘的同步频率。这个参数如果设置为0,则表示MySQL不控制binlog的刷新,由文件系统去控制它缓存的刷新,而如果设置为不为0的值则表示每次进行sync_binlog次事务操作,MySQL就会调用一次文件系统的刷新操作刷新binlog到磁盘中。这个参数设为1是最安全的,即发生一个事务就会刷新一次,在系统故障时最多丢失一个事务的更新,但是会对性能有所影响,一般情况下会设置为100或0,牺牲一定的一致性来获取更好的性能。
  • slave-skip-errors:这个参数可以跳过指定的错误代码的错误继续进行下一步的复制。
  • relay-log-space-limit:这个参数是为了防止中继日志写满磁盘所设置的中继日志最大限额。但此设置存在主库崩溃,从库中继日志不全的情况,不到万不得已,不推荐使用。
  • binlog-do-db:在主库上设置,设置从库只能同步指定数据库。用法: binlog-do-db = databases
  • binlog-ignore-db:在主库上设置,设置同步时忽略指定数据库不进行同步。用法:binlog-ignore-db = database
  • replicate-do-db:在从库上设置,设置只能同步指定数据库。用法:replicate-do-db = database
  • replicate-do-table:在从库上设置,设置只能同步指定数据库的指定表。用法:replicate-do-table = database.table
  • replicate-ignore-db :在从库上设置,设置同步时忽略指定数据库不进行同步。用法:replicate-ignore-db = database
  • replicate-ignore-table:在从库设置,设置同步时忽略制定数据库的指定表不进行同步。用法:replicate-ignore-table = database.table

注:从库忽略复制数据库的设置时,从库的relay-log中是存在关于master的相关日志的,只是从库没有使用。

slave的master-host、masterr-user、master-password和master-port参数不建议在配置文件里更改,因为一旦选择更改配置文件的方式更改这些参数,在第一次启动复制后(即使因为输错密码或其他原因没有和master成功连接),slave都会创建一个master.info文件,之后任何对于这个文件内的参数的变化都会被忽略。并且由于master.info文件内的内容不会自动加载,所以除非关闭slave服务,删除master.info并且重启slave服务,否则slave连接master的参数都不会修改。所以建议slave的设置在登录到数据库后使用change master to语句来代替。

猜你喜欢

转载自blog.csdn.net/xiguashixiaoyu/article/details/107882357