1.mysql主从有主-从、主-主形式mysql
其中主从形式,主负责写入,从负责读取,主数据库若是挂掉则将另外一台从数据库提高为主,更换主库速度较慢sql
主主形式用于搜索引擎,与主从的区别为,当有数据写入时,若是写入数据库A成功则默认A为主库,一旦写入A异常则当即更换B库写入,此时B库就提高为主库,与主从形式相比,由于不存在严格的主从关系,因此更换主库速度快。缺点是由于两台数据库均可以变动数据,容易致使数据紊乱(主要表如今自增主键)。数据库
多台写入致使自增主键紊乱能够经过 修改自增主键自增量(若有2台数据库,能够修改成2,具体修改方法我忘记了,要用了能够百度),安全
而后不一样的数据库给于一个不一样的初始主键值,例如2台数据库,则一个由1开始,一个由2开始,那么他们的主键永远都不会重复。异步
2.主从数据库数据复制方法工具
能够分为异步模式,半同步模式,同步模式。搜索引擎
其实现顾名思义,异步模式是在主库写入完成以后发送写入信息给从库,一旦信息发送完成则继续本身的任务日志
同步模式是在主库写入完成以后发送写入信息给从库,从库写入完成以后返回信息给主库,只有接收到返回信息主库才会继续本身的任务blog
半同步模式是在主库写入完成以后发送写入信息给从库,从库接受到该信息以后通知主库,而后再进行本身的写入操做,主库在接收到该通知后就会继续本身的任务。索引
三者速度天然是 异步 > 半同步 > 同步
三者安全性是 异步 < 半同步 < 同步
3.主从数据库复制策略
首先给出两个例子。
(1)经过非主键,例如用户表中的email,查询到单条用户信息,并进行了修改,例如修改了phone。则sql语句为
UPDATE users SET phone=13777777777 WHERE email='11111@qq.com'
(2)管理员批量修改男同窗为女同窗,则sql语句为
UPDATE users SET sex=1 WHERE sex=0
为了知足两种不一样的操做状况都能有良好的效率,给出两种不一样的复制策略
① 按sql语句复制,即主库进行了什么sql语句的操做,就把该语句传递给从库,这种方式对于例子2的效率很高,可是对于例子1的效率很低
② 按row复制,即主库操做了哪几行数据,就把操做的行的数据发送给从库,所以例子1的数据可使用主键查找,效率很高,可是对于例子2效率低下
理想状态是,当sql语句效率低时则利用row复制,当row复制效率低于sql语句时则使用sql语句复制,那个讲的小哥好像还推荐了一个什么库仍是第三方工具,忘记叫什么了。。。
而复制的动做则要依赖主库的binlog,由于主库会把它的sql语句或者row改动信息存放在binlog中。
3.数据库数据备份和误操做还原
首先是手动备份,通常每周一次全量备份,天天一次增量备份。手动的备份大多数时候都能知足回滚,还原的需求,但有时候业务要求经不住1天的数据差,因而就要使用mysql自身的日志来进行还原操做。
mysql日志自己有不少种类,innodb下特有的有undo和redo日志,分别用于回滚和前滚。redo日志的应用场景为当事务进行到一半mysql忽然挂掉的时候,那么mysql就会读取redo日志,将未进行完的事务操做进行完成。
而备份主要依赖的和上面复制中主要依赖的同样都是binlog。
首先binlog功能是须要手动开启的,mysql默认是不开启的。如主从复制策略中所说的,binlog总共分为3个模式,statement,row,mixed,全都顾名思义,分别为sql语句记录,row记录和混合记录。
binlog是二进制文件,不能直接打开,须要使用mysqlbinlog 工具来查看。
使用binlog来进行数据还原有效加强了时效性,也减小了大库备份还原动则一两天的时间。
在这节课上,主要认识了数据库主从结构,mysql中的binlog的做用能够说是受益不浅。
9-22 MySql日志详解及应用实战