MYSQL的主从复制

用途:1、故障切换 2、读写分离 3、备份

一、一主一从常见配置:MYSQL主从复制配置参考

要求:主机、从机在同一网段,且数据库版本相同

1、主机配置:

[mysqld]
server-id       = 1
log-bin= mysql-bin

建立账户并授权slave:

CREATE USER 'replication'@'192.168.1.103' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.103';   

2、从机配置: 

[mysqld]
server-id       = 2  

3、重启数据库,主从机关闭防火墙。

4、主从机通信配置

  • 查看master的状态,并记录下file和position的值

  • 从机配置如下信息:
CHANGE MASTER TO MASTER_HOST='master_host_name',MASTER_USER='replication_user_name',MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='recorded_log_file_name',MASTER_LOG_POS=recorded_log_position;  
  • 启动从机复制功能
start slave  

5、查看复制状态

show slave status

Slave_IO_Running: Yes
Slave_SQL_Running: Yes  

说明主从复制配置成功。

二、复制的基本原理

MySQL主从复制功能使用三个线程实现一个在主服务器上两个在从服务器上

1、主库将改变记录到二进制日志(binlog),这些记录过程叫做二进制日志事件(binary log events)

2、当从库与主库连接时,主库会创建一个log dump线程,将binlog发送到从库IO线程。 

3、从库中的IO线程在start slave后,请求主库的binlog,并将主库的binlog日志拷贝到自己本地,写入中继日志中

4、从库中的SQL线程,从中继日志读取binlog,然后执行binlog日志中的内容,解析成具体操作,来实现主从的操作一致,而最终数据一致。

三、复制的基本原则:

每个slave只有一个master

每个slave只能有一个唯一的服务器ID

每个master可以有多个slave

四、主从复制问题解决方案:

1、问题:

主库宕机,数据可能丢失

主从延时:主库写并发执行,但是从库同步主库数据的过程是串行化的,所以会有主从延时的问题。

2、解决方案:

  • 半同步复制:解决主库数据丢失问题

        主库写入binlog日志之后,就会将强制此时立即将数据同步到从库,

        从库将日志写入自己本地的relay log之后,接着会返回一个ack给主库,主库接收到至少一个从库的ack之后才会认为写操作完成了

  • 并行复制:解决主从同步延时问题

       从库开启多个线程,并行读取relay log中不同库的日志,然后并行重放不同库的日志,这是库级别的并行

3、判断主从延时:

show slave statusG;

#Seconds_Behind_Master
NULL - 表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes.
0 - 该值为零,是我们极为渴望看到的情况,表示主从复制良好,可以认为lag不存在。
正值 - 表示主从已经出现延时,数字越大表示从库落后主库越多。
负值 - 几乎很少见,只是听一些资深的DBA说见过,其实,这是一个BUG值,该参数是不支持负值的,也就是不应该出现。

  

原文地址:https://www.cnblogs.com/wjh123/p/11220690.html