《MySQL DBA修炼之道》——2.6 MySQL的主要参数设置
本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第2章,第2.6节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.6 MySQL的主要参数设置研发、测试人员往往熟悉SQL语句的撰写、表结构的设计,而不熟悉MySQL的配置,这可能会导致一些困惑,比较常见的是,在线上运行良好的查询,到了线下就变慢了,下面介绍几个常见的参数配置。一般情况下,配置好这几个参数可以满足大部分开发环境和测试环境的要求。
(1)innodb_buffer_pool_size
为了提升写性能,可以把要写的数据先在缓冲区(buffer)里合并,然后再发送给下一级存储。这样做可提高I/O操作的效率。InnoDB Buffer Pool就是InnoDB用来缓存它的数据和索引的内存缓冲区,可由innodb_buffer_pool_size设置其大小。理论上,将这个值设置得越高,访问数据需要的磁盘I/O就越少。常见的做法是让这个值大于热点数据,这样可以获得比较好的性能。如果不清楚环境的数据量和访问模式,建议将其设置为机器物理内存大小的70%~80%。
(2)innodb_log_file_size
日志组里每个日志文件的大小。在32位计算机上日志文件的合并大小必须小于4GB,默认大小是5MB,在生产环境下,这个值太小了。官方文档推荐的值为从1MB到1/N的缓冲池大小,其中N是日志组里日志文件的数目(由innodb_log_files_in_group变量来确定,一般默认为2)。值越大,在缓冲池中需要检查点刷新的行为就越少,因此也越节约磁盘I/O,但更大的日志文件也意味着在崩溃时恢复得更慢。建议将日志文件的大小设置为256MB或更大,这样可以满足一般情况下的需要。
(3)innodb_flush_log_at_trx_commit,建议设置为2
这个选项的默认值是1。当设置为2时,在每个事务提交时,日志缓冲被写到文件中,但不对日志文件做刷新到磁盘的操作。对日志文件的刷新每秒才发生一次。所以,理论上,操作系统崩溃或掉电只会丢失最后一秒的事务。
(4)sync_binlog,建议设置为0
如果是autocommit模式,那么每执行一个语句就会向二进制日志写入一次,否则每个事务写入一次。如果sync_binlog的值为正,那么每当sync_binlog参数设定的语句或事务数被写入二进制日志后,MySQL服务器就会将它的二进制日志同步到硬盘上。默认值是0,不与硬盘同步。值为1是最安全的选择,因为崩溃时,你最多丢掉二进制日志中的一个语句或事务。但是,这也是最慢的选择,成本昂贵。
另外,在MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写则不敏感。我们应设置变量lower_case_table_names=0,这也是Unix/Linux系统的默认值。开发环境、测试环境的MySQL也建议部署在Unix/Linux平台,尽可能和生产环境一致。
![6ebdeb80bbe187f13b5a95d873672acc90359ad6](https://yqfile.alicdn.com/6ebdeb80bbe187f13b5a95d873672acc90359ad6.png)
一个奇怪的MySQL慢查询,打懵了一群不懂业务的DBA! 表上的字段既然都有索引,那么按照之前的文章分析,是两个字段都可以走上索引的。既然能够利用索引,表的总大小也就是200M左右,那么为什么形成了慢查呢?我们查看执行计划,去掉limit 后,发现他选择了走全表扫描。
首先,我们来看看DBA的具体工作,我觉得 DBA 真的很忙:备份和恢复、监控状态、集群搭建与扩容、数据迁移和高可用,这是我们 DBA 的功能。
利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) Xtrabackup——MySQL DBA的必备工具 文档参照http://www.percona.com/docs/wiki/percona-xtrabackup:start mysql要使用5.1.50版本或以上。
MySQL DBA 日常工作 最近有很多同学在跑路,有的会选择加入到DBA这个行业,可能之前做过开发,或者运维等相关行业,写这篇文章就是想让大家了解一下MySQL DBA正常工作的内容。也让大家更了解MySQL DBA。
相关文章
- Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
- mysql的innodb_flush_log_at_trx_commit参数深有体会
- 【MySql】mysql 数据库数据订正
- 【MySql】mysql 的权限体系介绍
- 用Navicat连接mysql报错:2003-Can't connect to MySql server on '10.100.0.109'(10039)
- MySQL选择数据库use与mysql_select_db使用详解
- mysql实现limit分页
- MySQL--执行mysql脚本及其脚本编写
- PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)--续
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
- MYSQL错误解决:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
- MySQL · 8.0新特性· Invisible Index
- MySQL内核月报 2015.01-MySQL · 捉虫动态· mysql client crash一例
- MySQL slow query [慢查询] 资料整理
- MySQL外键约束详解
- 架构设计:Vue+nginx+jwt+zuul+eureka+ribbon+hystrix+rabbitmq+mysql集群+redis集群+elsticsearch集群
- Linux下MySQL源码编译安装(eg:mysql-5.6.27.tar.gz )
- 【项目实战】MySQL日期与字符串之间处理,MySQL日期函数大全
- 〖Python 数据库开发实战 - MySQL篇㉑〗- 数据表的外连接
- MYSQL导入数据报错|MYSQL导入超大文件报错|MYSQL导入大数据库报错:2006 - MySQL server has gone away
- mysql清空一个表中所有数据
- Mysql中Union和Union all精解
- Mysql 求滑动订单问题
- mysql常用命令有什么
- 【MySQL】CentOS编译安装MySQL5.7实战