用途: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值,该参数是不支持负值的,也就是不应该出现。