主从复制的原理是什么?主从复制中断了怎么办?主从复制出现延迟怎么处理?主库崩溃了怎么办?Mha
原理:
原理:主从复制一共有三个进程,从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
主从复制出现错误?
错误一:
错误原因:从库用来连接主库的用户权限或者密码不对
解决方法:首先在主库上检查用来主从复制的用户权限,如果没有问题在检查从库使用的密码是否正确。
错误二:
错误原因:这个可能是从库的master.info文件有损坏。
解决方法:reset slave
错误三:
错误原因:可能是从库的约束比主库更多写造成的。
解决方法:
Mysql > stop slave;
Mysql > set global sql_slave_skip_counter =1 ;
Mysql > start slave;
错误四:
错误原因:slave上缺少错误中的表。
解决方法:在slave上添加上对应的表,然后start slave。
错误五:
错误原因:从库上对应的表上缺少字段。
解决方法:根据主库上表结构,在从库对应表上添加缺少的字段,然后start slave。
错误六:
错误原因:主库删除的表在从库中不存在,导致从库在遇到删除不存在表的错误时无法继续同步。
解决方法:利用slave-skip-errors参数,跳过对于的1146错误(这个参数是一个只读的,需要在配置文件中修改,并重启从库)
1、在my.cnf的[mysqld]下面添加slave_skip_errors=1146
2、重启从库 service mysq jhl restart
3、在从库上启动同步
4、去掉my.cnf中的slave_skip_errors=1146
5、重启从库
6、启动从库复制`1
中断:
Show slave status\G;查看错误原因
1.show slave status\G,提示中继日志损坏,按以往的做法,根据提示重新指定合适的日志文件以及pos点。
2. 从MySQL5.5.X版本开始,增加了relay_log_recovery参数,这个参数的作用是:当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且
重新从master上获取日志,这个参数是默认关闭的。做主从的时候没有开启这项参数。修改my.cnf,添加这两项。(skip-slave-start ,mysql服务启动跳过自动启动主从复制,以免产生新的问题),relay_log_recovery不支持动态修改。所以修改配置文件,重启MySQL服务,启动主从复制线程
a、主从同步延迟与系统时间的关系,查看主从两台机器间系统 时间差
c、主从同步延迟与lock锁的关系(myisam表读时会堵塞写),尽量避免使用myisam表。一个实例里面尽量减少数据库的数量。
d、主从复制发生异常而中断,过很久之后才发现复制异常。可通过查看master与slave的status估算相差的日志。如果相差太大,则可以考虑重做从库。
产生的原因:当主库的并发量比较大的时候,产生的DDL数量,超过线程所承受的范围,延时就产生了,还有可能是与slave的大型query语句产生了锁等待;
解决办法:在架构上做优化,尽量让主库的DDL快速执行,因为从库只是读取数据,不需要那么高的安全性,所以可以将sync_binlog设置为0,或者关闭binlog日志,或者是使用比主库更好的硬件设备作为slave
可以暂时存缓存里
从库不能执行大量写入(5.6是支持库的并发,5.7支持了一个库多个表的并发执行)
www.cnblogs.com/gomysql/p/3…
MHA :原理
(1)从宕机崩溃的master保存二进制日志事件(binlog events);
(2)识别含有最新更新的slave;
(3)应用差异的中继日志(relay log)到其他的slave;
(4)应用从master保存的二进制日志事件(binlog events);
(5)提升一个slave为新的master;
(6)使其他的slave连接新的master进行复制;
2. Redis有哪些数据类型?
String ,hash,set,zset, list
3. Redis和memcache的区别是什么?
从存储大小 Memcached单个key-value大小有限,一个value最大只支持1MB,key 最大250个字符,而Redis最大支持512MB
从可靠性 Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库,因此对对可靠性方面要求比较高
区别:
1:memcache和redis都是将数据存储到内存中,都是内存数据库,不过memcache还可以缓存其他东西,图片视频等。
2:存储类型不同,memcache只支持k-v结构,redis支持五种数据类似,字符串,链表,哈希,集合,有序集合。
3:虚拟内存,当redis物理内存使用完后,可以将一些很久没有使用过的value交换到磁盘、
4:分布式设定memcache集群,利用magenta做一主多从,redis可以做一主多从,也可以一主一从。
5:存储数据redis持久化,memcache关机后数据消失
6:数据恢复,memcache挂掉后,数据不可恢复,redis数据丢失后可以通过AOF日志恢复。
7:应用场景不同,redis除啦作为数据库使用之外,还能做消息队列,数据堆栈和数据缓存等,memcache适用于缓存sql语句,数据集,用户临时性数据,延迟查询数据 session等
-
Redis在项目中怎么用的? 查询数据多的页面做缓存比如页面缓存首页
-
Mysql数据库优化做过哪些工作 1:建表时选择适合字段的数据类型,合适的长度 2:查询多的字段加索引 sql语句优化 3:分页优化 4:分区分表 5:主从复制,读写分离
-
Myisam和innodb的区别是什么? innodb写操作快、支持事务、数据行锁、 支持外键, InnoDB的主键范围更大,最大是MyISAM的2倍。 MyISAM不支持事务和外键,读操作快、 支持数据锁表、 GIS数据 、全文索引(因为它不支持中文分词,所以 MyISAM的全文索引其实没啥用)。
-
你了解哪些数据结构?
-
你了解哪些算法? 冒泡,快速,二分,归并
-
负载均衡怎么搭建的?nginx属于第几层负载均衡?nginx对于请求的分配有哪些策略模式? 反向代理 第7层 轮询,加权轮询,IP负载均衡,cdn负载均衡
-
你们的项目用了几台服务器?怎么分配的? 6
-
处理过高并发吗?请说明业务场景和解决办法 秒杀 ,文件锁
-
请说一下你所处理过的最复杂的业务逻辑
-
在之前的开发过程当中你碰到过的最困难的问题是什么?怎么解决的?
-
网络七层协议有哪些? 物理层,数据链路层,网络层,传输层,