第三周作业:https://www.jianshu.com/p/34a47ebd7842
1、总结mysql常见的存储引擎以及特点。
答:常见的有InnoDB、MyISAM、Mariadb 。
不常见的percona : TokuDB myrocks mongodb,ARCHIVE、NDB、CSV、黑洞、MEMORY、,Merge。
innodb:
从mysql 5.5之后 默认建表的引擎就是innodb,
主要的特点:插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead)。独有innodb_buffer_pool,LRU算法,刷脏页checkpoint技术。事务、回滚、奔溃修复能力和多版本并发控制的事务安全,是Mysql是第一个提供外键约束的表引擎。支持自动增长列AUTO_INCREMENT。InnoDB存储引擎特别适合处理多重并发的更新请求,InnoDB存储引擎是唯一支持事务的标准MySQL存储引擎,自动灾难恢复。
MyISAM:
MyISAM存储引擎的优势在于占用空间小,处理速度快,缺点是不支持事务和并发性。不支持事务,不支持外键。MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件);MyISAM支持全文索引,MyISAM表格可以被压缩后进行查询操作,MyISAM支持表级锁,可以不用设置主键索引。
MEMORY:
使用存储在内存中的内容来创建表,而且所有数据也放在内存中。
MEMORY表不支持VARCHAR、BLOB、TEXT数据类型,因为这种表类型按固定长度的记录格式存储。此外,如果使用版本4.1.0之前的MySQL,这不支持自动增长列。MEMORY存储引擎默认使用哈希(HASH)索引。其速度要比使用BTREE索引快。在内存中一旦宕机全部丢失。
tokudb:
高达25x的数据压缩,快速插入,使用免读复制消除从延迟,热模式变化,热索引创建——当索引被添加到表中时,TokuDB表支持插入、删除和查询,没有停机时间,热列添加、删除、展开和重命名——当alter table添加、删除、展开或重命名列时,TokuDB表支持插入、删除和查询,而不需要停机时间,在线备份。mysql 不支持tokudb引擎 。mariadb自带tokudb引擎。
Merge:许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
mariadb:
Aria(原名Maria) 存储引擎,Aria 存储引擎是默认被编译进MariaDB 5.1里的,并且在mysqld启动的时候就要求同时启动.内部的磁盘表是Aria表格式而不是MyISAM表格式.这将使某些GROUP BY和DISTINCT请求速度更快,因为Aria有比MyISAM更好的缓冲机制.包含Aria是MariaDB 5.1和MySQL 5.1之间的一个不同。
2、MySQL日志各类总结
答:
1:重做日志(redo log)
确保事务的持久性。redo日志记录事务执行后的状态,用来恢复未写入data file的已成功事务更新的数据。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。
2:回滚日志(undo log)
保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读
3:二进制日志(binlog)
用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。用于数据库的基于时间点的还原。
4:错误日志(errorlog)
错误日志记录着mysqld启动和停止,以及服务器在运行过程中发生的错误的相关信息。在默认情况下,系统记录错误日志的功能是关闭的,错误信息被输出到标准错误输出。
5:慢查询日志(slow query log)
慢日志记录执行时间过长和没有使用索引的查询语句,报错select、update、delete以及insert语句,慢日志只会记录执行成功的语句。
6:一般查询日志(general log)
记录了服务器接收到的每一个查询或是命令,无论这些查询或是命令是否正确甚至是否包含语法错误,general log 都会将其记录下来 ,记录的格式为 {Time ,Id ,Command,Argument }。也正因为mysql服务器需要不断地记录日志,开启General log会产生不小的系统开销。 因此,Mysql默认是把General log关闭的
7:中继日志(relay log)。
从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后从服务器SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致。
3、主从复制及主主复制的实现
vim /etc/my.cnf
log-bin = mysql-bin
server-id=2
innodb-file-per-table =ON
skip_name_resolve=ON
relay-log=relay-log
relay-log-index=relay-log.index
登录查看mysql
查看主节点二进制日志列表
查看主节点的server id
在主节点上创建有复制权限的用户。REPLIACTION SLAVE ,REOPLIATION CLIENT
grant replication slave,replication client on *.* to 'repluser'@'172.16.1.3' identified by 'replpass';
flush privileges; --刷新
登录从节点
CHANGE MASTER TO change master to master_host='172.16.1.2',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000042',master_log_pos=362;
start slave --启动从节点
测试
4、xtrabackup实现全量+增量+binlog恢复库
通过binlog恢复数据
create database bindb;
use bindb;
create table t1 (id int);
insert into t1 values(1);
insert into t1 values(2);
insert into t1 values(3);
起点:899终点:2557
/data/3306/data/binlog.000003
mysqlbinlog --start-position=899 --stop-position=2557 /data/3306/data/binlog.000003 >/tmp/dali.sql