MySQL之存储引擎,日志

一.存储引擎

1,作用

和磁盘的数据打交道

2简介

MySQL 基于存储引擎管理 表空间数据数据文件

3.种类

Innodb存储引擎
ibd:存储表的数据行和索引
frm:表基本结构信息
Myisam存储引擎
frm
myi
myd

4.Innodb存储引擎核心特性

事务
保证交易的完整性
ACID特性
Atomic(原子性)
所有语句作为一个单元全部成功执行或全部取消。不允许出现中间过程.
Consistent(一致性)
如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。
Isolated(隔离性)
事务之间不相互影响。
两个方面: 修改同一行 , 一致性读
Durable(持久性)
事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。

redo undo 实现了 ACD

行级锁:事务修改行,会锁定这行(持有这行的锁)

隔离级别(一致性读):
RU :已填写订单为提交
RC :已提交订单
RR :可重复读取数据,除非重新登录之后才能读取新的数据
S :事务执行不可读

5.事务控制语句

begin;
xxx
xxx
commit;

begin;
xxx
xxx

begin;
xxxxx
xxx
rollback;

	
隐式提交	
set  autocommit=0;

永久(打开文件添加语句):
my.cnf 
	autocommit=0;
	
begin 
xxxxxx
xxx 
begin	

begin 
xxx
xxx
create drop alter  grant 

二.日志

1.错误日志—errorlog

log_error=/var/log/mysql.log
分析[error],获取错误信息

2.二进制日志(binlog:逻辑型日志)

2.1作用

  • 记录所有变更类的语句(DDL,DCL,DML),可以做数据恢复和操作的审计
    • DDL,DCL:以语句方式(statement)记录
    • DML(已提交的事务语句):默认是以行的模式记录(row模式,数据行的变化)

2.2配置方法

开启二进制功能:
cat /etc/my.cnf

log_bin=/opt/mysql/data/mysql-bin
binlog_format=row
server_id=6
sync_binlog=1

2.3查看日志信息

mysql> show binary logs;
mysql> show master status;

2.4日志内容查看

按事件查看日志内容
mysql> show binlog events in 'mysql-bin.000012';
直接查看日志内容
mysqlbinlog --base64-output=decode-rows -vvv /opt/mysql/data/mysql-bin.000012 |more

2.5截取二进制日志

[root@standby data]# mysqlbinlog --start-position=219 --stop-position=186613 /opt/mysql/data/mysql-bin.000012 >/tmp/binlog.sql

3.慢日志—slow-log

slow_query_log=1
slow_query_log_file=/opt/mysql/data/standby-slow.log
long_query_time=1	
log_queries_not_using_indexes=1

使用Box Anemometer基于pt-query-digest将MySQL慢查询可视化

三.备份恢复

1.备份的种类

  • 逻辑备份:SQL语句的备份
  • 物理备份:数据页备份

2.备份工具的介绍

select xxxx from t1  into outfile '/tmp/redis.txt'
mysql -uroot -p123 -e "select concat('hmset city_',id,' id ', id,' name ',name,' countrycode ',countrycode,' district ',district,' population ',population) from world.city limit 10 "|redis-cli	 
	 
mysqldump 
	-u  用户名
	-p  密码
	-S  
	--socket=path, -S path
用于连接localhost,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。

	-h  主机地址
	-P --password, -p 链接数据库密码    --port, -P   连接数据库端口号
	
	-A 全库备份
	mysqldump -uroot -p123 -A >/backup/full.sql
	-B 备份一个或多个指定库
	mysqldump -uroot -p123 -B world bbs  >/backup/wb.sql
	备份单库中的表
	mysqldump -uroot -p123  world city country  >/backup/ccc.sql
	
	--master-data=2       备份时记录二进制日志的状态
	--single-transaction  开启innodb热备功能
	-R 导出存储过程以及自定义函数
	--triggers   导出触发器。该选项默认启用,用--skip-triggers禁用它。
	mysqldump -uroot -p123 -A --master-data=2 --single-transaction  -R   --triggers  >/backup/full.sql

四.主从复制

  • 基于二进制日志完成的.
Master   slave 	
 3307---->3308	

1. 3307中创建复制用户

主库开启二进制日志(文件内添加一句代码)
vim /data/3307/my.cnf 
	log_bin=/data/3307/mysql-bin

[root@standby 3307]# systemctl restart mysqld3307

[root@standby backup]# mysql -S /data/3307/mysql.sock
grant replication slave on *.* to repl@'10.0.0.%' identified by '123';

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2.3308节点开启主从复制功能

[root@standby 3307]# mysql -S /data/3308/mysql.sock

mysql> CHANGE MASTER TO
  MASTER_HOST='10.0.0.200',
  MASTER_USER='repl',
  MASTER_PASSWORD='123',
  MASTER_PORT=3307,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;

mysql> start slave;
mysql> show slave status\G

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

五.高性能架构

  • 读写分离

      atlas  360   C++
      maxscale mariadb
      proxySQL 
      DRDS(买)
      mysql router
    
  • 分布式架构

		分片集群
			Mycat 
			DBLE 
			TDDL
			DRDS 

注意:MySQL不支持的功能

事务,视图,外键和引用完整性,存储过程和触发器

猜你喜欢

转载自blog.csdn.net/qq_42737056/article/details/86529720