mysql学习笔记之一

下载mysql安装包

http://downloads.mysql.com/archives/community/
RPM Bundle
MySQL-client-5.6.16-1.el6.x86_64.rpm  客户端      
MySQL-server-5.6.16-1.el6.x86_64.rpm  服务端
MySQL-devel-5.6.16-1.el6.x86_64.rpm 库和头文件
MySQL-shared-5.6.16-1.el6.x86_64.rpm 共享库
MySQL-shared-compat-5.6.16-1.el6.x86_64.rpm 兼容包
MySQL-embedded-5.6.16-1.el6.x86_64.rpm 嵌入式版本
MySQL-test-5.6.16-1.el6.x86_64.rpm 测试包
详细解释参考:http://dev.mysql.com/doc/refman/5.6/en/linux-installation-rpm.html
默认库的作用
Information_Schema提供了访问数据库元数据的方式。
元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
Performance_Schema是MySQL较为底层的性能监控特性,提供一系列、具备自定义收集粒度的监控体系。

mysql启动(service mysqld start)

mysqld --help --verbose |less 查看mysql启动读取配置文件顺序
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /opt/mysql/etc/my.cnf ~/.my.cnf
a) mysqld启动 [mysqld]
mysqld --defaults-file=my.cnf --user=mysql
b) mysql_safe启动, 调用mysqld [mysql_safe]
mysqld_safe is a shell script that invokes mysqld
mysqld_safe --defaults-file=my.cnf --user=mysql
c)mysql.server服务启动 [mysql_server]
mysql.server is a shell script that invokes mysqld_safe
d)mysqld_multi 多实例启动

mysql停止(service mysqld stop)
mysqladmin shutdown

设置数据库字符编码(/etc/my.cnf)

[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci

mysql>SHOW VARIABLES LIKE '%char%';

MySql配置优化(/etc/my.cnf)

1、使用 innodb_flush_method=O_DIRECT 来避免写的时候出现双缓冲区。
fdatasync模式:写数据时,write这一步并不需要真正写到磁盘才算完成(可能写入到操作系统buffer中就会返回完成),真正完成是flush操作,buffer交给操作系统去flush,并且文件的元数据信息也都需要更新到磁盘。
O_DSYNC模式:写日志操作是在write这步完成,而数据文件的写入是在flush这步通过fsync完成
O_DIRECT模式:数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲
2、分配足够 innodb_buffer_pool_size ,来将整个InnoDB 文件加载到内存 — 减少从磁盘上读。
内存的70-80%   innodb对缓冲更为敏感。Innodb引擎会把数据和索引都缓存起来。无需给操作系统留太多的内存。如果数据量比较小,则无需把innodb_buffer_pool_size设置的过大。
3、不要让 innodb_log_file_size 太大,这样能够更快,也有更多的磁盘空间 — 经常刷新有利降低发生故障时的恢复时间。
innodb_log_file_size开得太大,会明显增加innodb的log写入操作,而且会造成操作系统需要更多的Disk Cache开销。 
4、为 max_connections 指定一个小的值 — 太多的连接将耗尽你的RAM,导致整个MySQL服务器被锁定,如果你经常看到‘Too many connections’错误,是因为max_connections的值太低了。这非常常见因为应用程序没有正确的关闭数据库连接,你需要比默认的151连接数更大的值。
Mysql连接数:通过show full processlist; status中Threads:43参数
最大连接数:show variables like 'max_connections';
最大峰值连接数:show global status like 'max_used_connections';
Max_used_connections / max_connections * 100% ≈ 85%
5、innodb_flush_log_at_trx_commit = 2
主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0、1、2三个。0,表示当事务提交时,不做日志写入操作,而是每秒钟将log buffer中的数据写入日志文件并flush磁盘一次;1,则在每秒钟或是每次事务的提交都会引起日志文件写入、flush磁盘的操作,确保了事务的ACID;设置为2,每次事务提交引起写入日志文件的动作,但每秒钟完成一次flush磁盘操作。显然,设置为0或2可以减小系统的io压力,特别是0时,速度最快,提高mysql写操作的吞吐量,但mysql或操作系统的崩溃、断电都可能会引起数据的丢失,设置为2时os的崩溃和断电可能会引起数据的丢失。  
6、使用 skip-name-resolve — 移除 DNS 查找。
修改配置/etc/my.cnf

MySql相关的参数

QPS(每秒Query量) 
基于Questions计算出QPS:
mysql> show global status like 'Questions';
mysql> show global status like 'Uptime';
QPS = Questions / Uptime

TPS(每秒事务量) 
基于Com_commit和Com_rollback计算出TPS:
mysql> show global status like 'Com_commit';
mysql> show global status like 'Com_rollback';
mysql> show global status like 'Uptime';
TPS = (Com_commit + Com_rollback) / Uptime

另外一种查询,基于Com_select、Com_insert、Com_delete、Com_update计算出QPS
mysql> show global status where Variable_name in('com_select','com_insert','com_delete','com_update');
等待1秒再执行,获取间隔差值,第二次每个变量值减去第一次对应的变量值,就是QPS

计算TPS,就不算查询操作了,计算出插入、删除、更新四个值即可。
mysql> show global status where Variable_name in('com_insert','com_delete','com_update');
当数据库中myisam表比较多时,使用Questions计算比较准确。当数据库中innodb表比较多时,则以Com_*计算比较准确。

磁盘io
Iostat –xdm 1
Iops = r/s + w/s 计算

参考地址:
<http://blog.jobbole.com/87989/>
<http://blog.jobbole.com/87450/>
<http://blog.163.com/ji_1006/blog/static/106123412013101421530142/>

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!