zoukankan      html  css  js  c++  java
  • MYSQL复习笔记1-物理文件和系统架构

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

  • 相关阅读:
    根据之前发的那SQL语句查询表结构的语句做了个MSSQL实体类生成器!
    Struts1.1中的配置(转载)
    回首2011,展望My 2012
    Struts1中execute实现过滤控制
    接口通信的方式(上 )http方式
    创建表分区的总结
    mongodb系列一windowXP下的安装
    does not contain method named
    ORA12514 TNS: 监听程序当前无法识别连接描述符中请求的服务
    oracle9i卸载
  • 原文地址:https://www.cnblogs.com/diege/p/3538278.html
Copyright © 2011-2022 走看看