1.MyISAM和InnoDB的主要区别:
1、MyISAM是非事务安全型的,而InnoDB是事务安全型的。
2、MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
3、MyISAM支持全文类型索引,而InnoDB不支持全文索引。
4、MyISAM不支持foreign (外键),而InnoDB支持外键
4、MyISAM相对简单,所以在效率上要优于InnoDB
5、MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
6、InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter
table tablename type=innodb)。
注:使用MySAM引擎的时候是表级锁,更新表内的一行的时候整个表都会锁上,这个时候其他人就只能
看,不能修改,并且他正在更新的数据是看不到的,因为正在更新的数据是在内存中,还没有完全的写到
硬盘中,我们把这样的数据称之为dirty脏数据,改一行锁整张表,争用会大,而innodb改一行锁一行,争
用会比较小,但是对于效率来说myisam更高一些,因为锁了整张表,整张表都是我在用,吞吐量能大一
些,这个吞吐量是在单位时间内完成的工作。也就是说如果想要改10行,对于myisam来说锁一下就可以
了,但是对于innodb来说要锁10下
2.xtrabackup的工作原理:(支持备份innodb和xtradb)
在 InnoDB内部会维护一个redo日志文件,又称之为事务日志文件,即ib_logfile0和ib_logfile1。事务
日志会存储每一个InnoDB表数据记录的修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并
执行两个步骤:它将已经提交的事务日志应用(前滚)到数据文件中存储下来,并将修改过但没有提交的数
据进行回滚操作(即撤销掉,不进行任何操作)。
自己理解:
比如在14:00开始备份,预计是5秒,但是在备份过程一直有新数据写入,新数据有commit的,有未被提交的,那么xtabackup就会先将前面5秒的做完全备份后,再将后面新数据中提交的再做增量备份,未提交的不做备份。它的一个事务日志是重复写入的,而且是环形写入,每一次写入一圈后就会重新开始,覆盖原有的,但备份速度比较快,所以一般不存在,数据未备份而被覆盖的情况
3.Xtrabackup的优缺点:
优点:
1、备份的速度快且可靠[因为是物理备份]
2、支持增量备份,更为灵活
3、备份过程中不会打断正在执行的事务
4、能够基于压缩等功能节约磁盘空间和流量
5、自动实现备份检验
6、还原速度快
缺点:
1、只能对innodb表做增量备份,myisam表增量备份时只能用做全备
2、innobackupex备份Myisam表之前要对全库加锁,不能进行写操作,若备份是在从库上进行会直接影响
到主从同步,造成延迟。但对innodb表不会阻塞读写
4.主从复制的基本过程:
1)、Mysql Slave端的IO进程连接上Master,向Master请求指定日志文件的指定位置(或者从最开始的日
志)之后的日志内容;
2)、Master接收到来自Slave的IO进程的请求后,负责复制的IO进程根据Slave的请求信息,读取相应日志
内容,返回给Slave 的IO进程。并将本次请求读取的bin-log文件名及位置一起返回给Slave端。
3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将
读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚
的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执
行时候的那些可执行的内容,并在自身执行。
IO进程:负责下载日志,中继日志
SQL进程:SQL负责将中继日志应用到数据库中,完成AB复制数据同步
自己的理解:
首先主服务器开启二进制日志,配置文件中的log_bin,主服务器将数据更改写入二进制日志中,从服务器通过I/O进程请求访问二进制日志,从服务器将主服务器的二进制日志复制到自己的中继日志中,通过sql进程读中继日志并将日志重放到自己的数据库中。