date:20140101
auth:Jin
一、物理组成
(一) 日志文件
参考:http://dev.mysql.com/doc/refman/5.1/en/server-logs.html
1、错误日志 error log
配置
log-error = /data/logs/mysql/3306_error.log
启动参数
--log-error=/data/logs/mysql/3306_error.log
变量
# mysqladmin -S /data/mysql/mysql.sock --password=password Variables |grep log_error
| log_error | /data/logs/mysql/3306_error.log
2、二进制日志 Binary LOG & Binary Index
二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。
语句以“事件”的形式保存,它描述数据更改。
运行服务器时若启用二进制日志则性能大约慢1%
1)常规配置
log-bin=mysql-bin log-bin = binlogs/mysql-bin 文件存放目录前缀 binlog_format = ROW #格式 #binlog_format=mixed expire_logs_day=1 #过期时间 超过自动清除 max_binlog_size=700M #每个文件大小 log-bin-index[=file_name] #二进制日志索引文件的文件名。当mysqld在运行时,不应手动编辑该文件 binlog_cache_size=3M
对非事务表的更新执行完毕后立即保存到二进制日志中。对于事务表,例如BDB或InnoDB表,所有更改表的更新(UPDATE、DELETE或INSERT) 被缓存起来,直到服务器接收到COMMIT语句。
在该点,执行完COMMIT之前,mysqld将整个事务写入二进制日志。当处理事务的线程启动时,它为缓冲查询分配binlog_cache_size大小的内存。如果语句大于该值,线程则打开临时文件来保存事务。线程结束后临时文件被删除
max_binlog_cache_size(默认4GB)可以用来限制用来缓存多语句事务的缓冲区总大小。如果某个事务大于该值,将会失败并 回滚
[root@master1 ~]# mysqladmin -S /data/mysql/mysql.sock --password=password Variables |grep binlog_cache
| binlog_cache_size | 32768 |
| max_binlog_cache_size | 4294963200
2)清除LOG
手动删除二进制LOG
可以用RESET MASTER语句删除所有二进制日志文件,或用PURGE MASTER LOGS只删除部分二进制文件
EG:
mysql -uroot -pE6Wm0grV -e "PURGE BINARY LOGS BEFORE '`date -v -2d +%Y-%m-%d`';"
3)影响记录到二进制日志知的内容
binlog-do-db=db_name
如果当前的数据库(即USE选定的数据库)是db_name,应将更新记录到二进制日志中。其它所有没有明显指定的数据库 被忽略。
binlog-ignore-db=db_name
当前的数据库(即USE选定的数据库)是db_name,不应将更新保存到二进制日志中
一般情况应该是所有数据都打开
多个库的情况
binlog-do-db = zabbix
binlog-do-db = cacti
4)使用binlog
可以用mysqlbinlog实用工具检查二进制日志文件。如果你想要重新处理日志止的语句,这很有用。例如,可以从二进制日志更新MySQL服务器,方法如下:
shell> mysqlbinlog log-file | mysql -h server_name
3、慢日志
long_query_time = 2
slow-query-log-file = /data/logs/mysql/3306_slow.log
查看
mysqldumpslow命令获得日志中显示的查询摘要来处理慢查询日志。
mysqldumpslow /data/logs/mysql/3306_slow.log
4、通用查询日志
所有mysql操作,一般不打开,耗资源
log = /data/logs/mysql/3306.log
内容格式
131113 5:56:28 5 Query SELECT DATABASE()
5 Init DB zabbix
131113 5:56:31 5 Query create table tb_text ( id varchar(10),name varchar(25),age int,sex bit
5、innodb 在线REDO日志
MySQL性能优化之分区:iblog、binlog、datafile
参考:http://hi.baidu.com/higkoo/item/e3140516a069c5701009b5fe
innodb_log_file_size = 512M #单个iblog文件大小 innodb_log_files_in_group = 4 #一共有几个iblog innodb_log_group_home_dir = /ib_log #存放iblog的目录 innodb_log_arch_dir = /usr/local/mysql/var/ 可以忽略 innodb_flush_log_at_trx_commit = 2 #iblog刷入时机 innodb_flush_method = O_DIRECT #iblog的刷入方式
默认iblog和datafile是放在相同目录的,这样在写入负载高时极易造成磁盘瓶颈。
InnoDB 启动选项
http://man.chinaunix.net/database/mysql/inonodb_zh/2.htm
(二)数据文件
1、MyISAM
[root@master1 ~]# ll /data/mysql/mysql |grep user
-rw-rw---- 1 mysql mysql 10466 Oct 7 23:25 user.frm
-rw-rw---- 1 mysql mysql 512 Oct 7 23:34 user.MYD
-rw-rw---- 1 mysql mysql 2048 Oct 7 23:39 user.MYI
.frm 表结构定义信息
.MYD 表数据
.MYI 索引相关信息
每个表都有这个三个文件
2、InnoDB
修改表默认的存储引擎
default_table_type = INNODB
[root@master1 ~]# ll /data/mysql/dfs/
total 16
-rw-rw---- 1 mysql mysql 61 Nov 14 03:46 db.opt
-rw-rw---- 1 mysql mysql 8616 Nov 14 03:52 tb_dfs.frm
[root@master1 ~]# ll /data/mysql/ |grep ib
-rw-rw---- 1 mysql mysql 524288000 Nov 14 03:57 ibdata1
-rw-rw---- 1 mysql mysql 524288000 Nov 13 06:16 ibdata2
-rw-rw---- 1 mysql mysql 268435456 Nov 14 03:57 ib_logfile0
-rw-rw---- 1 mysql mysql 268435456 Oct 7 23:21 ib_logfile1
# cat /data/mysql/dfs/db.opt
default-character-set=utf8
default-collation=utf8_general_ci
用来记录该库的默认字符集编码和字符集排序规则用的。也就是说如果你创建数据库指定默认字符集和排序规则,
那么后续创建的表如果没有指定字符集和排序规则,那么该新建的表将采用db.opt文件中指定的属性。
/data/mysql/dfs/tb_dfs.frm
表结构
数据文件ibdata或者.idb 存储数据和索引的地方
1)共享表空间
默认未共享表空间 数据文件ibdata1
2)独享表空间
Mysql分表
innodb_file_per_table=1
独享表空间也有ibdata1 存放一些元数据
[root@master1 dev]# ll /mysql/dev/data12/ |grep ib
-rw-rw---- 1 mysql mysql 104857600 Nov 14 04:53 ibdata1
-rw-rw---- 1 mysql mysql 104857600 Nov 14 04:22 ibdata2
-rw-rw---- 1 mysql mysql 52428800 Nov 14 04:53 ib_logfile0
-rw-rw---- 1 mysql mysql 52428800 Nov 14 04:22 ib_logfile1
[root@master1 dev]# ll /mysql/dev/data12/zabbix/
total 112
-rw-rw---- 1 mysql mysql 65 Nov 14 04:58 db.opt
-rw-rw---- 1 mysql mysql 8614 Nov 14 05:08 tb_zabbix.frm
-rw-rw---- 1 mysql mysql 98304 Nov 14 05:09 tb_zabbix.ibd
tb_zabbix.ibd每个表一个idb文件,存放数据和索引
(三)Replication相关文件
1、master.info
slave服务器中
[root@Server1 mysql]# cat dev/data11/master.info
18
mysql-bin.000111
197334657
192.168.204.253
dbslave
password
3311
60
0
0
1800.000
0
slave数据库中,存放master信息
包括
master主机地址
连接端口
连接用户
连接密码
当前日志位置
已经读取到的日志位置信息
2、relay-log.info
slave服务器中
# cat dev/data11/relay-log.info
./mysql-relay-bin.000043
143908
mysql-bin.000111
197334657
8
通过slave的IO线程写入本地的relay-log.info ,以便slave端的IO线程以及某些管理操作随时能够获取当前复制的相关信息
3、mysql-relay-bin.index 和 mysql-relay-bin.000042
# cat dev/data11/mysql-relay-bin.index
./mysql-relay-bin.000042
./mysql-relay-线程
存放着slave端的IO线程从Master端所读取的Binary LOG信息,然后由Slave的SQL线程从该relay log中读取并解析相应的日志信息,
转换为Master所执行的Query语句,接着在Slave端应用。
(四)其他文件
my.cnf,pid,socket
二、系统架构
SQL Layer 和Storage Engine Layer
核心模块
初始化模块
核心API
网络交互模块
client & Server 交互协议模块
用户模块
访问控制模块
连接管理,连接线程和线程管理模块
Query解析和转发模块
Query Cache模块
Query 优化模块
表变更管理模块
表维护模块
系统状态管理模块
表管理器
日志记录模块
复制模块
存储引擎借口模块