- 主从复制原理:
主库发生改变会把改变数据库写入二进制日志,通过slave服务线程更新同步到从服务器 的io线程,io线程把数据更改写入中继日志,从服务器通过sql线程把数据更新写入从库,从而实现同步。
- 主主复制原理:
主主复制原理,原理其实就是主从复制原理(主主复制,是两个库互相把对方当做主库,互相连接)
- 增量备份,全量备份:
全量备份:备份整个数据库。 【 mysqldump —备份 】
备份:mysqldump -uroot -p shop > /tmp/shop.sql;
还原: mysql -u root -p shop < /tmp/shop.sql;
Source /tmp/shop.sql;
增量备份:借助binlog日志文件。
- 主从延时原因?怎么解决?
原因:因为主库改数据的时候,是多线程并发更新。从库是单线程串行更新,比较慢。
解决方法:
1、在mysql5.6支持多线程更新【针对多个数据库】,但是对于单库还是单线程更新的。
2、提高从库的配置。【加快从库更新效率】
3、强制从主库拿数据 【不去从库读取数据】
4、从缓存读取数据
5、使用mysql_proxy。
6、配置文件中 – sync_binlog=1
sync_binlog
这个参数直接影响mysql的性能和完整性
sync_binlog=0:
当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行sync之类的磁盘同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。
sync_binlog=n,在进行n次事务提交以后,Mysql将执行一次sync之类的磁盘同步指令,通知文件系统将Binlog文件缓存刷新到磁盘。
- 主键冲突:
MySQL主主复制是为了减轻数据库写入压力,但在高并发情况下,会发生主键冲突
解决方法:改变数据库的配置,使其自增id的自增值发生改变(自增值变为服务器数量,offset偏移从1开始自增,两个服务器的话,偏移一个是一,一个是二,自增的量都是二)
- 主键浪费如何产生:
因为设置了auto-increment,所以主键自增的时候,并不是1,2,3这样开始,而是1,3,5等,这是不可避免的。毕竟鱼(数据库压力小)和熊掌(主键不浪费)不可兼得