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 优化模块
表变更管理模块
表维护模块
系统状态管理模块
表管理器
日志记录模块
复制模块
存储引擎借口模块

MYSQL复习笔记1-物理文件和系统架构的更多相关文章

  1. iOS学习笔记(三)——iOS系统架构

    iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa Touch l ...

  2. (1)-Android学习笔记之:初识Android系统架构和项目结构

    Android系统架构 Android程序结构 创建一个Android项目,为初学便于理解,将程序项目结构切换为Project模式,项目结构如下 .gradle和.idea:这两个目录下放的都是And ...

  3. mysql复习笔记

    阅读目录 1.什么是SQL语句2.使用sql语句创建数据库和表3.创建数据表4.数据完整性约束5.四中基本字符类型说明6.SQL基本语句7.类型转换函数8.日期函数9.数学函数10.字符串函数11.联 ...

  4. MySQL 复习笔记

    本文内容 SQL 语句 创建数据库 创建数据表 数据完整性约束 四种基本字符类型说明 SQL 基本语句 类型转换函数 日期函数 数学函数 字符串函数 合并结果集 union CASE 函数用法 IF ...

  5. MYSQL复习笔记3-用户和安全

    Date: 20140115Auth: Jin参考:http://dev.mysql.com/doc/refman/5.1/en/security.html 一.权限系统实现方式相关权限信息存储在几个 ...

  6. MYSQL复习笔记12-视图

    Date: 20140223Auth: Jin参考:http://blog.sina.com.cn/s/blog_436732df0100e768.html 一.介绍1.概念视图是从一个或几个基本表( ...

  7. MYSQL复习笔记10-连接

    Date: 20140219Auth: Jin 一.介绍连接是二元运算,可以对两个表或多个表进行查询.T-SQL中分两大类,一是符合SQL标准的连接谓词表示形式,二是T-SQL扩展的使用关键字JOIN ...

  8. MYSQL复习笔记9-存储过程

    date: 20140208auth: Jin参考引用:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解一.基本介绍1. ...

  9. MYSQL复习笔记7-索引

    Date: 20140207Auth: Jin 索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表. 索引的主要作用 快速存取数据 保证数据记录的唯一性 实现表与表之间的参照完整 ...

随机推荐

  1. 为什么Windows7打开项目的方式是灰的不能修改

    http://jingyan.baidu.com/article/d3b74d64a964691f77e60900.html 进入组策略编辑器,即运行gpedit.msc,进入“用户配置”-“管理模板 ...

  2. ubuntu下定时弹窗记录工作日志

    背景 记录工作日志,是一个很好的习惯,但不容易坚持,本来打算每天记录,但经常拖延,拖着拖着,有一些事情就忘记了. 等到写周报或月报的时候,才会开始翻邮件,聊天记录,各个仓库的提交log等,回忆都干了些 ...

  3. Linux汇编教程03:大小比较操作

    我们在上一讲中,简单了解了汇编程序大概的样子.接下来我们来了解一下,汇编程序的大小比较操作.所以我们以编写寻找一堆数中的最大值作为学习的载体. 在编写程序之前,先要分析我们的目的,在得出解决方案. 目 ...

  4. CNN中千奇百怪的卷积方式大汇总

    1.原始版本 最早的卷积方式还没有任何骚套路,那就也没什么好说的了. 见下图,原始的conv操作可以看做一个2D版本的无隐层神经网络. 附上一个卷积详细流程: [TensorFlow]tf.nn.co ...

  5. JavaScript中数组对象详解

    Array对象即数组对象用于在单个变量中存储多个值,JS的数组是弱类型的,所以允许数组中含有不同类型的元素,数组元素甚至可以是对象或者其他数组. 创建数组的语法 1.Array构造器 1.var li ...

  6. [New learn]GCD的卡死现象分析研究

    https://github.com/xufeng79x/GCDDemo 1.简介 前接[New learn]GCD的基本使用,我们分析了GCD的一般使用方法,其中比较特殊的是在分析到主队列的时候发生 ...

  7. 14:django 用户认证系统

    django认证系统包含三个部分:用户.权限和分组 安装 django项目默认启用了认证系统,如果不是使用django-admin.py创建项目的可以通过在settings配置文件里面的INSTALL ...

  8. opencv python基本操作

    Python usage crop frame: croppedframe = frame[ymin:ymax, xmin:xmax] resize frame: reszframe = cv2.re ...

  9. GT-----FAQ整理

    1.pss0,pss1,这里的序号0和1是什么意思?      说明选的目标调试 App 有至少 2 个进程,先启动的那个进程的 pss 值会被加后缀 0,后启动那个会被加后 缀 1.所有参数前面的“ ...

  10. LR脚本用户自定义C语言函数

    LR脚本实战:用户自定义C语言函数 Loadrunner可以使用标准C语言的函数,因此我们可以在脚本中编写自己的函数用于调用,把脚本结构化,更好的进行重用. 先看一个例子: Action() { in ...