MYSQL高级——主从复制

慢查询日志

定义

就是将那些运行查询结果很慢的SQL查出来记录到日志中。

作用

能够查到到底哪些SQL需要进行调优

如何使用?

MySQL默认是关闭了这个功能的,因为会带来性能的影响,需要的话自己开启即可。
具体使用见课件。

View视图

定义

视图是建立表的基础之上的一张伪表,是底层表的映射
这个虚拟表只保存了逻辑,不会保存任何的查询结果。

作用

1、保护了表的隐私数据
因为只保存了逻辑结果,没有数据,所有说保护了隐私
2、封装了复杂的业务逻辑。
提高了复用性,因为视图和表格二者是映射的关系,所以更改视图也会更改表格中的数据。所以说面对频繁的需求变更更灵活

主从复制

为什么使用主从复制、读写分离?
为了提高数据库的并发性能。
如果所有事情都在一台机器上完成,性能不高。
如果一台机器只负责写,操作。两台负责读。
如此性能就大大提高了。
主从复制的原理
主角:主机、主机日志binary log、从机、从机日志relay-log。
1、当主机节点进行insert、update、delete操作时,会按顺序写入主机日志。
2、从机连接到主机,主机有多少个从机,就会创建多少个binlog dump线程。
3、当主机的日志发生变化时,上述的binlog dump线程就会通知所有的从机,并将相应的主机日志内容推送给从机。
4、IO线程接受到主机的日志内容后,会将内容写入本地的从机日志relay-log。
5、SQL线程读取IO线程所写入的从机日志内容。并根据从机日志的内容对数据库做对应的操作。

img

最后操作数据库的到底是谁?

因为主机只负责操作数据库,它操作完的数据库并不需要展示给用户看。
从机只需要按照自己的节奏,将主机做了什么操作拿过来即可,在我这执行一下,执行完的结果展示给用户看即可。
二者是异步执行的
这也解释了为什么有什么会操作的很快,但是没法马上读到数据。
如何实现主从复制

1、准备

一台主机,两台从机。
三台机器的虚拟机IP都要不同。

主要是操作配置文件,基本是面向配置开发了

2、主机配置

主机上启用二进制日志binary-log。
指定主机的id
指定需要复制的数据库,即目标数据库。
还需要设置不要复制的数据库,这个配合上面那步,属于是双保险操作。

3、从机配置

指定启用从机日志,即中继日志relay-log
指定从机的id

4、在主机上建立账户,并授权slave

这一步解读起来非常怪异,但是细细品还是能够理解这个操作还是有些道理的。
==========================================
因为最终从机要去读取主机的日志数据,那么在从机上就需要一个账号去进行上述操作。
那么问题来了,这个账户从机能自己创建吗?
不能,因为你在从机上创建了。但是从机的权限低啊,你在这创建的怎么去操作等级更高的主机呢!!
所以这个账户需要在主机上创建,并授予这个账户具有很高的权限,什么权限呢?能够远程访问的权限。
最后是最吐血的,主机做了一切,创建了一个很牛逼的账号,还要把它授权给从机,给从机使用。这下一切都回到了起点。应该能理解这个操作了吧。
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
flush privileges;
在主机上创建一个slave账号。让slave节点可以从任意虚拟机上通过密码‘123456’连接上主机,并对主机任何库的任意表可以进行操作。

5、在从机上指定主机,开始主从复制

CHANGE MASTER TO MASTER_HOST='192.168.136.10',
		MASTER_USER='slave',MASTER_PASSWORD='123456',

MASTER_LOG_FILE='mysql-bin.000001'
//master主机的binlog日志名称

MASTER_LOG_POS=590;
//binlog日志偏移量
读写分离(木知道)

缺点
可能出现master写入数据后,slave读取数据不一定能马上读出来
原因:
	从机是通过binlog日志从master同步数据的,如果在网络延迟的情况,从机就会出现数据延迟。

你可能感兴趣的:(MYSQL,数据库,mysql,java)