回顾存储引擎
1.什么是存储引擎
mysql的文件系统,主要就是与次盘进行交互
innodb和myisam
2.innodb和myisam的区别
1.InnoDB是行级锁,MyISAM是表级锁
2.InnoDB支持事务,MyISAM不支持事务
3.InnoDB支持CSR,MyISAM不支持CSR
3.表空间
1.共享表空间 ibdata1
系统数据
undo log
临时表
2.独立表空间 .ibd
用户创建数据库的数据
4.事务的日志
redo log:重做的日志 记录的是数据的变化,帮助在内存里面完成数据的修改
undo log:不做日志 记录的是是否执行了commit,执行数据修改前的状态,为了帮我们回滚数据
5.事务的锁
共享锁:在有事务操作数据时该数据也可以被查询
排它锁:在一个事务修改数据时,该数据无法被其他事物执行
乐观锁:多事务同时操作时,谁先提交以谁修改的数据为准
悲观锁:多事务同时操作时,数据只有一个人可以修改
6.隔离级别
1.RU:未提交读,一个事务还没有提交,其他事务就可以查看已经修改的值
2.RR:可重复读
3.RC:允许查看其他事务已提交的数据
4.串行化:将事务完全隔离
mysql 日志
一、mysql错误日志
1.错误日志默认是开启的
2.默认路径是 $datadir/ 下面,以 '主机名'.err 命名
3.修改方式
vim /etc/my.cnf
log_error=/data/service/data/mysql.err
4.查看错误日志
[root@db04 ~]
mysql> show variables like '%log_error%';
[root@db04 ~]
[mysqld]
basedir=/service/mysql
datadir=/service/mysql/data
port=3306
socket=/tmp/mysql.sock
skip_name_resolve
log_error=mysql.err
[mysql]
socket=/tmp/mysql.sock
二、一般查询日志
1.一般查询日志默认是关闭的
2.默认路径是 $datadir/ 下面,以 '主机名'.log 命名
3.配置开启一般查询日志
[root@db04 ~]
[mysqld]
general_log=on
general_log_file=/service/mysql/data/general.log
4.查看方式:
[root@db04 ~]
mysql> show variables like '%general%';
三、二进制日志
binlog 大小默认 生成时就是 120
binlog 查看主节点时,show master status
文件名一定时最新的binlog,为支点一定时新的binlog的大小
binlog的位置点是跟着大小改变的
1.二进制日志默认是关闭的
2.查看二进制日志的方式
[root@db04 data]
mysql> show variables like '%log_bin%';
3.配置开启binlog
vim /etc/my.cnf
server_id=1
log_bin=mysql-bin
log_bin=/server/mysql/data/mysql-bin
4.默认路径是 $datadir/ 下面,以 mysql-bin.00000N 来命名
1.二进制日志管理操作
1)开启二进制日志
[root@db04 ~]
[mysqld]
server_id=1
log_bin=mysql-bin
2)查看二进制文件
[root@db04 ~]
-rw-rw---- 1 mysql mysql 120 Apr 24 10:17 mysql-bin.000001
-rw-rw---- 1 mysql mysql 19 Apr 24 10:17 mysql-bin.index
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 120 |
+------------------+-----------+
1 row in set (0.00 sec)
3)事件的介绍
1)在binlog中最小的记录单元为event
2)一个事务会被拆分成多个事件(event)
1)每个event都有一个开始位置(start position)和结束位置(stop position)。
2)所谓的位置就是event对整个二进制的文件的相对位置。
3)对于一个二进制日志中,前120个position是文件格式信息预留空间。
4)MySQL第一个记录的事件,都是从120开始的。
4)刷新binlog
1.flush logs
2.重启数据库
3.二进制日志大小达到1G时,会自动刷新;max_binlog_size(可以修改大小)
5)删除binlog
删除二进制日志
1)原则
在存储能力范围内,能多保留则多保留
基于上一次全备前的可以选择删除
1.删除七天前数据
SET GLOBAL expire_logs_days = 7;
[root@db01 data]
[mysqld]
expire_logs_days = 7
2.只保留三天的binlog
PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
3.删除指定binglog名字之前的binlog(保留指定binlog以后的binlog)
PURGE BINARY LOGS TO 'mysql-bin.000010';
4.重置binlog
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
2.二进制日志作用
1.记录已提交的DML事务语句,并拆分为多个事件(event)来进行记录
2.记录所有DDL、DCL等语句
总之,二进制日志会记录所有对数据库发生修改的操作
binlog的作用:
1)如果我拥有数据库搭建开始所有的二进制日志,那么我可以把数据恢复到任意时刻
2)数据的备份恢复
3)数据的复制
1)数据的备份和恢复
1> 添加数据
mysql> show master status;
mysql> create database binlog;
mysql> use binlog
mysql> create table binlog_table(id int);
mysql> insert into binlog_table values(1),(2),(3);
mysql> delete from binlog_table where id=1;
mysql> update binlog_table set id=22 where id=2;
mysql> select * from binlog_table;
mysql> drop table binlog_table;
mysql> drop database binlog;
2> 恢复数据
[root@db01 data]
查看二进制日志后,发现delete语句开始以上的位置点是858
[root@db01 data]
mysql> source /tmp/binlog.sql
mysql> show databases;
mysql> use binlog
mysql> show tables;
mysql> select * from binlog_table;
3.二进制日志的工作模式
1)查看工作模式
[root@db04 data]
mysql> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)
1.语句模式
2.行级模式
3.混合模式
2)语句模式 STATEMENT
语句模式 STATEMENT (mysql 5.6 默认的模式)
[root@db04 data]
...
SET TIMESTAMP=1587695915/*!*/;
insert into binlog values(1),(2),(3)
/*!*/;
SET TIMESTAMP=1587695936/*!*/;
update binlog set id=10 where id=2
/*!*/;
...
1.不严谨,不安全
2.语句容易理解
3.日志文件不是很大,不占用磁盘
3)行级模式 row (在企业里,基本全都是用row模式)
行级模式 row (mysql 5.7 默认的模式)
[root@db04 data]
[mysqld]
server_id=1
log_bin=mysql-bin
binlog_format=row
[root@db04 data]
...
...
update binlog.binlog_table
set
@1=22 --------->@1表示binlog_table中的第一列,集合表结构就是id=22
where
@1=2 --------->@1表示binlog_table中的第一列,集合表结构就是id=2
1.严谨,安全
2.语句不容易理解
3.日志文件很大,比较占用磁盘
4)混合模式
结合上面两中模式使用
四、结合binlog升级数据库
[root@db04 data]
[root@db04 data]
mysql> insert into binlog_table values(4),(5),(6);
[root@db01 ~]
[root@db04 data]
起始位置点,当你导出数据时使用 --master-data=2 sql文件里面会有提示
结束位置点可以直接看最新的binlog的大小
[root@db04 data]
[root@db01 ~]
五、慢查询日志(慢日志)
1.作用
1)是将mysql服务器中影响数据库性能的相关SQL语句记录到日志文件
2)通过对这些特殊的SQL语句分析,改进以达到提高数据库性能的目的
2.配置慢日志
[root@db01 ~]
[mysqld]
slow_query_log = 1
slow_query_log_file=/service/mysql/data/slow.log
long_query_time=0.05
log_queries_not_using_indexes
min_examined_row_limit=100(鸡肋)
3.测试慢日志
mysql> create table slow select * from city;
mysql> insert into slow select * from slow;
mysql> insert into slow select * from slow;
mysql> insert into slow select * from slow;
mysql> insert into slow select * from slow;
mysql> insert into slow select * from slow;
[root@db04 data]
[root@db04 data]
参数说明:
-s:
是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
-t:
是top n的意思,即为返回前面多少条的数据;
-g:
后边可以写一个正则匹配模式,大小写不敏感的;