MySQL--主从复制搭建

一、主从复制的原理

1 master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
2 slave将master的binary log events拷贝到它的中继日志(relay log);
3 slave重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL复制是异步的且串行化的

这里与Redis主从复制的数据复制方式不一样。

每个slave都只有一个master,但每个master都可以由多个slave,每个机器都只能有唯一的服务器ID。

MySQL主从复制最大的问题就是不是实时的,master给slave发送bin-log二进制日志后,slave并不是立刻读取,而是转成Relay log再进行读取。

二、主从复制主机配置

server-id 为一台MySQL主机的唯一标识,不可以重复。

log-bin为指定生成的二进制数据文件的存放位置,默认存放在了mysql的安装目录下(var/lib/mysql)

binlog-ignore-db=mysql    指定哪些数据库不要复制

binlog-do-db=需要复制的主数据库名字

binlog_format=STATEMENT(默认) 指log-bin日志的形式

1.如果指定为STATEMENT方式,那么log-bin中存储的是执行每个能修改数据的的sql语句,如下图。

如果sql中调用了某些实时性函数,如now()或sysdate(),会导致主从机器的数据不一致,因为从机是拿来主机上执行的SQL进行数据复制。

2.ROW方式,不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。

3.MIXED方式,为以上两种方式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

但这种方式也避免不了  @@host_name这种全局变量的不一致。

三、主从复制从机配置

从机配置很简单,只需要再mysqld下配置

指定server-id和relay-log文件的存储位置即可,默认为var/lib下的mysql-relay文件。

注意:在配置主从复制之前的数据不会被从机继承,从机只会复制到从开启主从复制之后的数据。

四、开启主从复制

1.关闭两台机器的防火墙,保证互相能够ping通。

2.重启MySQL服务。

3.在主机上建立账户并授权slave权限。

GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'从机器数据库IP' IDENTIFIED BY '123456';

4.在主机查看主机状态。show master status

记录下File 与 Position

这时就不要再去操作主机了,防止这两个值变化。

5.在从机

CHANGE MASTER TO MASTER_HOST='192.168.124.3',
MASTER_USER='zhangsan',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=position的值;

6.启动从服务器复制功能

start slave 

7.查看从机复制状态,show slave status\G

两个参数都为yes 说明配置成功

8.主机新建库、新建表、insert记录,从机复制

9.停止从服务器复制功能

stop slave

10.若想重新配置主从

stop slave;
reset master;
-- 然后再继续从第一步开始配置从服务器即可
发布了227 篇原创文章 · 获赞 77 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/m2606707610/article/details/103751421