https://blog.csdn.net/why15732625998/article/details/80463041

上面是一个完整的实战连接

总的来说,就是mysql本身是支持主从复制的,一个master可以有多个slave,而每个slave只能有一个master。

通过mysql client来设置主从的配置信息,以及更改my.cnf文件来设置。

主要的原理是slave会通过网络请求master的binlog,可以得到binlog的文件内容,通过这些内容,slave去回放执行sql,从而达成与master一样的数据内容。由于binlog是会分成多个文件的,所以两者的通信还会随着时间更改请求的binlog文件名。

master对slave授权复制的权限:

这样在master中的增删改查,会自动同步到slave

主从复制存在延时,如果读写分离,同时使用master和slave的话,需要考虑数据一致性,尤其要保证读能读到最新写的数据,避免延时导致的读不到的情况。https://segmentfault.com/a/1190000038420324

关于DDL和DML

SQL语言共分为四大类:查询语言DQL,控制语言DCL,操纵语言DML,定义语言DDL。

DQL:可以简单理解为SELECT语句;

DCL:GRANT、ROLLBACK和COMMIT一类语句;

DML:可以理解为CREATE一类的语句;

DDL:INSERT、UPDATE和DELETE语句都是;

主从复制存在的问题

  1. 主库宕机后,数据可能丢失;

  2. 主从同步延迟。

MySQL数据库主从同步延迟产生原因

原因分析

MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是随即的,不是顺序的,成本高很多。另一方面,由于SQL Thread也是单线程的,当主库的并发较高时,产生的DML数量超过slave的SQL Thread所能处理的速度,或者当slave中有大型query语句产生了锁等待那么延时就产生了。

常见原因:Master负载过高、Slave负载过高、网络延迟、机器性能太低、MySQL配置不合理。

主从延时排查方法

通过监控 show slave status 命令输出的Seconds_Behind_Master参数的值来判断:

NULL,表示io_thread或是sql_thread有任何一个发生故障;

0,该值为零,表示主从复制良好;

正值,表示主从已经出现延时,数字越大表示从库延迟越严重。