个人博客
https://blog.youkuaiyun.com/cPen_web
OLTP和OLAP 在线事务处理和在线分析处理
https://my.oschina.net/u/2969788/blog/2875200
oltp和olap
oltp和olap是两种常见的业务模式
oltp(on line transcation processing) 在线事务处理 它具有以下特点,常见的系统如银行财务
实时性要求高
数据量相对较小
要求绝对的事务完整性,增删改查操作一般都会涉及
并发量高
olap(on line analytical processing) 在线分析处理,这种业务一般是日志的分析和深度挖掘,常见如淘宝的交易记录,百度地图的人口迁徙记录 具有以下特点,olap的结果一般是为决策提供支持
数据量通常非常大
对事务要求不高 通常只有 添加和查询操作
实时性要求不高通常只有汇总后的结果,而汇总分析过程通常可以执行很久
日志
日志 (log)
作用:
1 .排错
2 .了解MySQL运行情况
类型:
1 .二进制日志
2 .错误日志
3 .慢日志
4 .查询日志
错误日志
错误日志:mysql本身就是开启的
错误日志:记录用户登录和服务启动出错相关的信息 --> 默认开启
在配置文件里指定错误日志的路径
[root@cPen mysql]# vim /etc/my.cnf
#log-error=/var/log/mysql/mysql.log
log-error=/data/mysql/mysql.log
默认存放的路径在数据目录下 (路径会存在/data目录下)
编译安装路径:/data/mysql/mysql_compile.err 命令格式:主机名.err
记录用户登录和服务启动出错相关的信息 --> 默认开启的
默认放到与数据目录所在的地方,主机名.err
什么时候会写数据到错误日志文件?
1 .登录失败会记录到错误日志
2 .配置文件出错也会记录 --> 没有看到效果,编译安装的MySQL --> 需要进一步测试
3 .启动过程出问题也会记录
mysql_compile.pid 记录mysqld的pid号
如果指定错误日志的路径,注意目的地的目录需要给mysql用户写的权限
[root@cPen ~]# cd /data/mysql/
[root@cPen mysql]# ls |grep "err"
mysql_compile.err
#示例:指定错误日志
[root@cPen mysql]# vim /etc/my.cnf
[mysqld]
log-error=/var/log/mysql/mysql.log
#注:log-error和log_error都可以
[root@cPen mysql]# mkdir /var/log/mysql
[root@cPen mysql]# cd /var/log/
[root@cPen log]# chown mysql:mysql mysql/ #注:加权限,mysql用户要有写的权利
root@(none) mysql>show variables like "log_error"; #注:在MySQL里查看变量的值
#示例:删除pid文件mysql_compile.pid,mysql服务不能关闭,因为里面放了mysqld 的pid号
[root@cPen mysql]# cd /data/mysql/
[root@cPen mysql]# ls |grep mysql_compile.pid
mysql_compile.pid
慢日志
慢日志
默认是关闭的
作用:记录消耗时间比较长的SQL语句,为数据库性能提升提供了线索
存放在数据目录下,名字是主机名 + slow.log
#示例:慢日志默认是关闭的
root@(none) mysql>show variables like "%slow_query%";
| Variable_name | Value |
| slow_query_log | OFF |
| slow_query_log_file | /data/mysql/cPen-slow.log |
#示例:SQL定义的慢查询时间为 10毫秒
root@(none) mysql>show variables like "long_query_time";
| Variable_name | Value |
| long_query_time | 10.000000 |
#注:如果一条SQL的执行时间超过10毫秒,就算一条慢SQL,会产生慢日志
#示例:配置慢日志
[root@cPen ~]# vim /etc/my.cnf
[mysqld]
#slow query log
slow_query_log = 1
long_query_time = 0.001
slow_query_log_file = /data/mysql/cPen-slow.log
[root@cPen ~]# service mysqld restart
[root@cPen ~]# tail -f /data/mysql/cPen-slow.log
……
最近数据库压力 (负载特别高),客户反映网站或者应用使用特别慢,领导要求你查明原因?
1 .SQL语句需要优化,在数据库里启用慢日志,找出执行时间比较长的SQL
2 .业务量太大了,硬件已经达到极限了,top、glances、dstat
通用查询日志
优点
会记录所有的SQL操作 --> 审计
缺点
消耗大量的磁盘空间
消耗cpu、内存、磁盘资源
#示例:查看通用查询日志功能是否开启
root@TENNIS mysql>show variables like 'general_log%';
| Variable_name | Value |
| general_log | ON |
| general_log_file | /data/mysql/cPen.log |
#注:通用查询日志默认不开启
#示例:开启通用查询日志 --> 临时开启
root@TENNIS mysql>set global general_log = 1; #注:临时开启
#注:1是开启,0是关闭
root@TENNIS mysql>show variables like 'general_log';
| Variable_name | Value |
| general_log | ON |
#示例:开启通用查询日志 --> 配置文件里设置
[root@cPen ~]# vim /etc/my.cnf
[mysqld]
#general log
general_log
general_log_file=/data/mysql/cPen.log
[root@cPen ~]# tail -f /data/mysql/cPen.log
……
二进制日志
二进制日志 binary log
二进制日志文件里存放的是二进制数据,不能使用tail、head、cat去查看
默认不开启
默认一个二进制文件的大小是1G
root@(none) mysql>show variables like 'max_binlog_size';
| max_binlog_size | 1073741824 |
作用
记录了什么?
DML语句、DDL、DCL等
修改了数据的操作 #注:select语句不会产生二进制日志
可以用来恢复数据
主从复制 #注:主 master 从 slave
存放的位置
数据目录下
主机名-bin.00000*
cPen-bin.000001
以二进制的形式存放的日志,里面不是文本的格式,使用cat,vim不能查看里面的内容
一个二进制日志文件是否记录了整个mysql进程里所有的库的操作?
答:是的,对所有库进行的操作都会记录到一个二进制文件里
如果需要记录到不同的日志文件里,可以采用多实例
mysql实例:正在运行的一个mysql进程,这个进程里有哪些库可以操作,二进制日志就记录哪些库的操作
多实例:
多启动几个mysqld的进程,一个mysqld的进程对应一个库
隔离应用,避免一个库使用特别频繁,影响其他的库
多实例任然受到整个机器整体系统资源的限制
经典的例子:一款游戏对应一个实例
多实例的替代方案:使用云服务器:一款游戏使用一台云服务器
#示例:查看二进制日志是否开启
root@(none) mysql>show variables like 'log_bin';
| Variable_name | Value