MySQL数据库的主从复制原理及其意义
首先,我们要明确的一点是什么是数据库的主从复制?简单的来说,数据库由于自身的特点(脆弱性,不易维护),例如,突发事件停电,人为因素误删库,数据流量过大造成硬盘空间过满,sql语句设计不合理,等等因素,造成数据的丢失或者损坏以及无法及时存入数据,那么主从复制可能解决这些问题。
主从复制,指的是建立一个和主数据库环境一模一样的从数据库环境,也就是说,主从是单独的,独立的两套MySQL数据库,版本一致,其中运行MySQL的系统也最好尽量的一致,MySQL内的库也完全一致,通过binlog日志系统,同步数据库的数据,并在预先备份过binlog日志的时候,如果出现了问题,通过binlog日志来恢复数据库。
能够实现主从复制,完全是由于binlog日志的作用,那么什么是binlog?
、binlog(像不像广东人经常说的冰狗??),字面意思为程序的日志,既然是MySQL的日志,自然指的是MySQL运行时所产生的日志喽。
1、MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
a、DDL
----Data Definition Language 数据库定义语言
主要的命令有create、alter、drop等,ddl主要是用在定义或改变表(table)的结构,数据类型,表之间的连接和约束等初始工作上,他们大多在建表时候使用。
b、DML
----Data Manipulation Language 数据操纵语言
主要命令是slect,update,insert,delete,就像它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
c. DCL
----Data Control Language 数据库控制语言如grant,deny,revoke等,只有管理员才有这样的权限。你要普通用户提权过了,那么,当我没说。和主从复制没多大关系,也就不讲解了。
结论:binlog日志记录了数据库的所有操作,除了权限类的和查询类的操作。那么,binlog在哪里?首先,默认也就是全新安装后的MySQL是没有开启binlog的,如果开启了binlog,那么保存日志的文件在MySQL的数据库目录下,也就是和其内建库,比如mysql,information_schema这样的数据库的上面一层目录,文件名开始为master,结尾以00000+数字结尾,以及以index结尾的文件。我这么说的是Linux的目录下。通常,MySQL也是装在Linux下。
master打头的两个文件即为binlog的文件,00000*结尾的文件是二进制文件,无法通过文本编辑器 比如vim打开,或者cat命令查看,以index结尾的文件可以使用文本编辑器打开,也可以使用cat命令查看。index结尾的文件记录了所有可用的二进制文件的索引,00000*记录的是数据库的所有ddl和dml语句事件,除了select查询事件。
由于我在MySQL的配置文件,my.cnf文件内做了相应配置,并重启了mysql服务,才会出现这两个文件哦。
如何开启binlog日志?
首先,我们需要查看binlog日志的状态,是否开启?
这样的就是开启的,log_bin 的值为on表示开启,如果为off,需要打开my.cnf文件,将该日志功能打开,由于是服务日志更改,因此必须重启服务。
红色箭头表示要添加的两行。椭圆表示打开的哪个文件以及添加的位置。
彻底的总结:
MySQL数据库的主从复制是通过开启binlog日志功能,通过日志内记录的sql语句,将主数据库的sql语句传送到从数据库并执行,从而达到主从复制同步数据的目的。也就是说,第一关键是binlog日志的生成,第二关键那么就是从数据库获取到日志内的sql语句,并执行。
主从复制的意义在于,不将鸡蛋装在一个篮子内,并且,由于binlog的特性(保存了sql事件),我们可以实现一定程度的备份。