【mysql】索引、事务、日志、备份


前言

本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。


一、索引

1.1 概念

  • 功能:查找索引后,直接指向数据所在的物理地址
  • 意义:加速查询速度,为字段排序
  • 副作用:额外占用磁盘空间,修改数据时需要同步修改索引(较麻烦)

1.2 分类/操作

类别/操作创建方法
普通索引alter table 表 add index 字段_index (字段);
唯一索引alter table 表 add unique index 字段_index (字段);
主键索引alter table 表 add primary key;
组合索引alter table 表 add index 索引名 (字段1,…);
全局索引alter table 表 add fulltext 索引名 (字段);
删除索引alter table 表 drop index(索引名);
索引分析explain select * from 字段;

1.3 应用场景

  • 唯一性较好的字段
  • 超过300行的字段
  • 经常表连接的字段
  • 不常更新的字段
  • 小字段

二、事务

2.1 概念/特性

  • 概念:一个不可分割的操作序列
  • 特性:原子性(无法分割),隔离性(独立,保证数据安全),一致性(事务的目的),持久性(最终效果)

2.2 隔离级别

级别效果隔离级别全称
ru:未提交读允许脏读read uncommitted
rc:已提交读不允许脏读read committed
rr:可重复读不允许脏读,可重复读(mysql默认级别)repeatable read
串行读一次只允许有一个事务serializable
  • 脏读:一个事务可以看到其他事务未提交的修改
  • 不可重复读:第一个事务未结束时,恰巧别的事务修改了对应的数据,那么第一个事务刷新再读取的时候,数据就会变为被修改后的数据(可重复读:确保一个事务中执行的select语句都能得到相同结果)
  • 幻读:第一个事务修改所有数据的同时,恰巧别的事务添加了新的事务,此时第一个事务并不会修改别的事务刚添加的数据
  • 丢失更新:第一个事务读取数据修改的同时,第二个事务也在打开修改数据,此时第二个事务先保存,第一个事务后保存,那么第一个事务就会把第二个事务修改的数据覆盖掉,等同于第二个事务没有进行任何操作
  • 注:mysql默认的事务处理级别是repeatable read (可重复读), 而Oracle和SQL Server是 read committed(已提交读) 。

2.3 命令

命令效果
begin开启事务
commit提交事务
rollback回滚事务到初始
rollback to 快照点名称回滚事务到某个快照点
savepoint 快照点名称保存快照点
自动提交事务功能set autocommit=1;(0为关,默认开启)
全局事务隔离级别set global transaction isolation level 隔离级别;
当前会话隔离级别set session transaction isolation level 隔离级别;
查询全局隔离级别show global variables like ‘%isolation%’ ;
查询会话隔离级别show session variables like ‘%isolation%’;

三、日志

  • 日志是维护中非常重要的存在,通过日志,我们可以快速得到自己想要的东西,比如错误日志产生,效率低下,数据恢复等

3.1 开启日志

  • mysql的日志存储路径默认为:/usr/local/mysql/data,默认配置文件为:/etc/my.cnf配置文件中的[mysqld]子配置中
日志分类开启配置语句默认情况
错误日志log-error=存储路径默认开启
二进制日志log-bin=mysql-bin默认开启
慢查询日志slow_query_log=ON(打开)long_query_time=2(慢查询时间)slow_query_log_file=存储路径(存储位置)默认关闭
慢查询日志set global slow_query_log=ON;(在mysql中开启慢查询)默认关闭
通用日志general_log=ON(打开)general_log_file=存储路径(存储位置)默认关闭

3.2 确认日志

  • mysql中查看日志是否开启
日志命令
二进制日志show variables like ‘log_bin%’;
慢查询日志show variables like ‘%slow%’;
慢查询时间设置show variables like ‘long_query_time%’;
通用日志show variables like ‘general%’;

四、备份与恢复

4.1 完全备份

  • 特点:备份/恢复时间长,备份数据全面(对数据库进行完整的备份与恢复)

4.1.1 冷备份/恢复

  • 特点:必须关闭mysql服务才可以进行冷备份,在大多数生产环境中是不允许停止服务的(相对逻辑备份快)
#备份
systemctl stop mysqld													#关闭mysql数据库服务
tar zcf /mnt/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data			#压缩备份mysql数据并重命名为.tar.gz结尾

#恢复
tar zxf mysql_all-2022-06-05.tar.gz -C /mnt								#解压数据压缩包
\cp -rf ./data /usr/local/mysql/										#将解压后的数据包移动/复制过去即可
systemctl start mysqld													#启动mysql数据库服务

4.1.2 逻辑备份/恢复

  • 特点:不用关闭mysql的服务也能备份,恢复时候根据存储的mysql语句一条条恢复(相对较慢)
  • 工具:利用MySQL自带的备份工具mysqldump进行备份与恢复
mysqldump -u root -p密码 --databases 库 >备份路径								#备份库
mysqldump -u root -p密码 [-d] 库名 [表名1] [表名2] >备份路径    					#备份表(-d表示只备份数据表结构)

查看备份文件:grep -v "^--" 备份路径|grep -v "^-"|grep -v "^$"					#通过过滤查看备份的内容

mysql -u root -p密码 <备份文件													#恢复库
mysqldump -u root -p密码 库 <备份文件											#恢复表

4.2 增量备份

  • 特点:通过二进制日志间接实现(flush logs刷新日志),没有冗余、备份时间短、恢复时间长

4.2.1 备份类别

  • 先在/etc/my.cnf中[mysqld]子配置中设置log-bin=mysql-bin开启二进制日志
  • 然后再:binlog_format = MIXED指定二进制日志的记录格式为混合模式
类型特点
STATEMENT基于sql语句备份,较快,高并发是容易出错(默认是这个类型)
ROW基于数据库行内容备份,较慢,安全准确
MIXED混合模式,兼有两者优点,生产环境一般都用这个

4.2.2 备份命令

mysqladmin -u root -p密码 flush-logs									#备份日志
mysqlbinlog --no-defaults --base64-output=decode-rows -v 备份路径		#查看备份

4.2.3 恢复类别

类别命令
一般恢复mysqlbinlog --no-defaults 备份路径
位置恢复mysqlbinlog --no-defaults --start-position=‘位置点’ --stop-position=‘位置点’ 备份路径
时间恢复mysqlbinlog --no-defaults --start-datetime=‘时间点’ --stop-datetime=‘时间点’ 备份路径

4.3 差异备份

  • 由于差异备份会产生冗余较大的情况,因此很少用到差异备份

五、思维导图

在这里插入图片描述

六、结语

  • 索引是加快查询的一种手段,日志是了解数据库时间的手段,命令较多需要多读多背多练习
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪碧不要气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值