主从复制
作用:
- 数据热备份
- 实现读写分离,减轻主服务负载
- 主服务器有问题时,主从切换,实现高可用
主从复制流程图:
原理:
master导出原始数据,slave根据原始数据进行全量备份,当master的dump线程主动通知slave二进制日志发生变化后,slave的io 线程将master的binary log拷贝到它的中继日志(relay log),然后slave的sql线程根据relay log中的事件并在从库执行,从而保持与主库的数据一致。
master-info:记录二进制日志的名字和Position位置号,以便io线程对binary log 进行拷贝,IO线程进行更新。
relay-log.info:记录了 relay log 文件的执行进度,sql线程对其更新。
异步复制
步骤:
- master服务器上开启MySQL二进制日志功能,新建一个授权用户by_sever,并授权。
mysql [(none)]> create user ‘by_server’@‘%’ identified by ‘san123’;
mysql [(none)]> grant all on . to ‘by_server’@‘%’ identified by ‘san123’;
mysql [(none)]> FLUSH PRIVILEGES;
- 备份原始数据
mysqldump --all-databases --master-data >/mysql_buckup/dbdump.db
- 在master和slave服务器上分别设置server_id别为1,2
vim /etc/my.cnf
- 将dbdump.db导入slave服务器
scp dbdump.db root@192.168.2.119:/root
mysql -uroot -p <dbdump.db
- slave服务器上进行配置
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘192.168.2.113’,
-> MASTER_USER=‘by_server’,
-> MASTER_PASSWORD=‘san123’,
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE=‘mariadb-bin.000002’,
-> MASTER_LOG_POS=245;
- 启动slave
mysql [(none)]> show slave status\G;
- 验证配置是否成功
mysql [(none)]> show slave status\G;
- 在master上进行操作,验证是否备份成功
延迟备份
在slave服务器上操作
stop slave;
CHANGE MASTER TO MASTER_DELAY = N;(N为秒数)
start slave;
在线主从复制
作用:在不中断master服务器也的情况下实现主从复制。
与离线复制的不同点:
- mysqldump拷贝原始数据后业务一直在进行,导致二进制文件和Position可能在变化导致slave服务器与master之间原始数据不一致
- 解决办法:
使用xtrabackup软件对slave服务器进行全量备份,xtrabackup会在slave服务器备份是时输出类似binary_file=文件,Position=的数据,告诉slaves服务器应该从哪开始备份。
主从切换
作用:主服务器出现问题时,从主服务器切换到从服务器,提高并发性能,实现高可用,那么什么时候主从切换,如何手工实现主从切换
脚本实现:
- 监控master和slave
- 根据优先级选举新的master
- 把其他slave切换到新的master
- 将APP数据写往新的master