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. 如何更新远程主机上的 Linux 内核

    如何更新远程主机上的 Linux 内核 http://blog.csdn.net/robertsong2004/article/details/47277121 转载至:http://www.tiny ...

  2. Cause: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.ibatis.mapping.MappedStatement

    我用的是pagehelper 4.2.0,利用其进行表单的分页处理并进行展示,在第一次执行的时候能够看到分页后的结果,刷新一下第二次就显示不出来,控制台出现: Cause: java.lang.Cla ...

  3. ASPxTreeList的右键按钮事件

    ASPxTreeList应该是比较长用的控件了~现在就来说说它的右键按钮事件 这里实现的是右键里有折合和展开所有节点的功能 code: <dx:ASPxTreeList ID="ASP ...

  4. Mac 使用自带的Ruby 安装brew

    Homebrew简称brew,OSX上的软件包管理工具,在Mac终端可以通过brew安装.更新.卸载软件. 首先要安装brew,在 mac 中使用finder 搜索 终端(terminal)打开命令行 ...

  5. 虚拟机 VMware Workstation12 安装OS X 系统

      Windows下虚拟机安装Mac OS X —– VMware Workstation12安装Mac OS X 10.11 本文即将介绍WIN虚拟MAC的教程.完整详细教程(包含安装中的一些问题) ...

  6. php设计模式六----桥接模式

    1.简介 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦. 这种模式涉及到一个作为桥接 ...

  7. redis之(十四)redis的主从复制的原理

    一:redis主从复制的原理,步骤.   第一步:复制初始化 --->从redis启动后,会根据配置,向主redis发送SYNC命令.2.8版本以后,发送PSYNC命令. --->主red ...

  8. nodejs里的express自动刷新gulp-express使用【转载】

    搬运自[http://blog.csdn.net/zhu_free/article/details/51476525] gulp-express实现实时刷新 本来使用gulp-connect可以创建本 ...

  9. Centos Nodejs

    设置Nodejs环境 第二节:Installing Node.js, PM2 and Yarn on CentOS https://www.youtube.com/watch?v=XCgCjasqEF ...

  10. 一:Ionic Framework初体验

    因项目关系,需要开发一个平板使用的应用程序,刚开始以为需要使用Andriod,后来经理提供了一个解决方案,Ionic Framework https://ionicframework.com/ 第一步 ...