防伪码:竹密无妨溪水过,天高不碍白云飞。
一、MySQL Server 简介
什么是 MySQL
MySQL 是由 MySQL AB 公司(目前已经被 ORACLE 公司收归麾下)自主研发的,目前 IT 行业最流行的开放源代码的数据库管理系统之一,它同时也是一个支持多线程高并发多用户的关
系型数据库管理系统。
MySQL 数据库以其简单高效可靠的特点,在最近短短几年的时间就从一个名不见经传的
数据库系统,变成一个在 IT 行业几乎是无人不知的开源数据库管理系统。从
小型的 web 网站,至大型的企业级应用,到处都可见其身影的存在。
MySQL 数据库在发展过程中一直有自己的三个原则:简单、高效、可靠。
MySQL 的主要适用场景
MySQL 是目前最为流行的开源数据库管理系统软件了。那么 MySQL 主要用于什么场景下
1)Web 网站系统
Web 站点,是 MySQL 最大的客户群,MySQL 之所以能成为 Web 站点开发者们最青睐的数
据库管理系统,是因为 MySQL 数据库的安装配置都非常简单,使用过程中的维护也不像很
多大型商业数据库管理系统那么复杂,而且性能出色。还有一个非常重要的原因就是 MySQL
是开放源代码的,完全可以免费使用。
2)日志记录系统
MySQL 数据库的插入和查询性能都非常的高效,如果设计地较好,在使用 MyISAM 存储引
擎的时候,两者可以做到互不锁定,达到很高的并发性能。所以,对需要大量的插入和查询
日志记录的系统来说,MySQL 是非常不错的选择。比如处理用户的登录日志,操作日志等
是非常适合的应用场景。
3)数据仓库系统
随着现在数据仓库数据量的飞速增长,我们需要的存储空间越来越大。数据量的不断增长,
使数据的统计分析变得越来越低效,也越来越困难。怎么办?这里有几个主要的解决思路,
一个是采用昂贵的高性能主机以提高计算性能,用高端存储设备提高 I/O 性能,效果理想,
但是成本非常高;第二个就是通过将数据复制到多台使用大容量硬盘的廉价 pc server 上,
以提高整体计算性能和 I/O 能力,效果尚可,存储空间有一定限制,成本低廉;第三个,通
过将数据水平拆分,使用多台廉价的 pc server 和本地磁盘来存放数据,每台机器上面都只
有所有数据的一部分,解决了数据量的问题,所有 pc server 一起并行计算,也解决了计算
能力问题,通过中间代理程序调配各台机器的运算任务,既可以解决计算性能问题又可以解
决 I/O 性能问题,成本也很低廉。在上面的三个方案中,第二和第三个的实现,MySQL 都
有较大的优势。通过 MySQL 的简单复制功能,可以很好的将数据从一台主机复制到另外一
台,
不仅仅在局域网内可以复制,在广域网同样可以。当然,其他的数据库同样也可以做到,不
是只有 MySQL 有这样的功能。但是 MySQL 是免费的,其他数据库大多都是按照主机数量或
者 cpu 数量来收费,当我们使用大量的 pcserver 的时候,license 费用相当惊人。第一个方
案,基本上所有数据库系统都能够实现,但是其高昂的成本并不是每一个公司都能够承担的。
二、MySQL 架构组成
Mysql 物理文件组成:
1 ) 日志文件 : 主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志
日志是 mysql 数据库的重要组成部分。日志文件中记录着 mysql 数据库运行期间发生的变
化;也就是说用来记录 mysql 数据库的客户端连接状况、SQL 语句的执行情况和错误信息
等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文
件进行数据恢复。
1、错误日志:Error Log
在 mysql 数据库中,错误日志功能是默认开启的。默认情况下,错误日志存储在 mysql
数据库的数据目录中。错误日志文件通常的名称为 hostname.err。其中,hostname 表
示服务器主机名。
默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息、服务
器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务
器进程时产生的信息。
注 1:MySQL有很多系统变量可以设置,系统变量设置不同,会导致系统运行状态的不同。
因此 mysql 提供两组命令,分别查看系统设置和运行状态。
1、查看系统设置:
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW VARIABLES:show the values of MySQL system variables.
2、运行状态:
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW STATUS:provides server status information.
如何修改系统配置
方法 1:配置文件设置 my.cnf
如:binlog_cache_size = 1M
方法 2:set global binlog_cache_size = 1048576;
注 2:查看 mysql 的版本
或
或
一般而言,日志级别的定义没有会话变量都只是在全局级别下进行定义
错误日志的状态:
其中
log_error 定义为错误日志文件路径
log_error_verbosity:
The MySQL error log has received some attention in MySQL 5.7, with a new setting
called log_error_verbosity.
There are three possible values, as documented in the manual:
Verbosity ValueMessage Types Logged1Errors only2 Errors and warnings
3 Errors, warnings, and notes (default) 更改错误日志位置可以使用 log-error 来设置形式如下
#vi /etc/my.cnf
log-error = /usr/local/mysql/data/mysqld.err
查看 mysql 错误日志:
#tail /usr/local/mysql/data/mysqld.err
为了方便维护需要,有时候会希望将错误日志中的内容做备份并重新开始记录,这时候
就可以利用 MySQL 的 FLUSH LOGS 命令来告诉 MySQL 备份旧日志文件并生成新的日志文
件。备份文件名以“.old”结尾。
删除错误日志:
数据库管理员可以删除很长时间之前的错误日志,以保证 mysql 服务器上的硬盘空间。
mysql 数据库中,可以使用 mysqladmin 命令开启新的错误日志。mysqladmin 命令的
语法如下:
mysqladmin –u root –p flush-logs 也可以登录 mysql 数据库中使用 FLUSH LOGS
语句来开启新的错误日志。
先重命名原来的错误日志文件,执行 mysqladmin –u root –p flush-logs 也可以登录
mysql 数据库中使用 FLUSH LOGS 语句来开启新的错误日志。
方式如下:
更多信息请查阅官方文档:
http://dev.mysql.com/doc/refman/5.5/en/error-log.html
http://dev.mysql.com/doc/refman/5.6/en/error-log.html
http://dev.mysql.com/doc/refman/5.7/en/error-log.html
2、二进制日志:Binary Log & Binary Log Index
二进制日志,也就是我们常说的 binlog,也是 MySQL Server 中最为重要的日志之一,主要
用于记录修改数据或有可能引起数据改变的 mysql 语句,并且记录了语句发生时间、执行
时长、操作的数据等等。所以说通过二进制日志可以查询 mysql 数据库中进行了哪些变化。
一般大小体积上限为 1G。
当我们通过“log-bin=file_name”打开了记录的功能之后,MySQL 会将所有修改数据库数据
的 query 以二进制形式记录到日志文件中,还包括每一条 query 所执行的时间,所消耗的
资源,以及相关的事务信息。
binlog 记录功能需要“log-bin=file_name”参数的显式指定才能开启,如果未指定 file_name,
则会在数据目录下记录为 mysql-bin.******(*代表 0~9 之间的某一个数字,来表示该日志
的序号)。
二进制开启状态:
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4 事件开始处
#170112 19:18:34 server> #170112 19:18:34 年月日的简写方式;end_log_pos 事件结束处
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
CmZ3WA8BAAAAdwAAAHsAAAABAAQANS43LjEzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAKZndYEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AfVtpm8=
'/*!*/;
# at 123
#170112 19:18:34 server> # [empty]
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
删除二进制日志信息:
二进制日志会记录大量的信息(其中包含一些无用的信息)。如果很长时间不清理二进制日
志,将会浪费很多的磁盘空间。但是,删除之后可能导致数据库崩溃时无法进行恢复,所以
若要删除二进制日志首先将其和数据库备份一份,其中也只能删除备份前的二进制日志,新
产生的日志信息不可删。也不可在关闭 mysql 服务器之后直接删除因为这样可能会给数据
库带来错误的。若非要删除二进制日志需要做如下操作:导出备份数据库和二进制日志文件
进行压缩归档存储。删除二进制文件的方法如下:
方法 1:根据文件或时间点来删除二进制日志:
语法形式:
mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }
其 中 TO 'log_name' 表 示 把 这 个 文 件 之 前 的 其 他 文 件 都 删 除 掉 , 也 可 使 用
BEFORE datetime_expr 指定把哪个时间之前的二进制文件删除了。