binlog之主从复制
binlog 基本认识
MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了 select)。
binlog日志有两个最重要的使用场景。
1、主从复制
2、数据恢复
一.主从简介
主从就是多个数据库一起工作,他们被人为设置成主库或者从库,他们之间的数据结构以及存储的数 据完全一样
主从数据库比单机数据库有两大优势
●提高了系统的可用性
现在有两份一模一样的数据,主库出问题,从库就可以顶上
●提供了系统的性能
现在有两份一模一样的数据,主库负责写,从库就负责读
一.主从复制原理
1 / 14
Mysql的主从复制是基于日志的。主数据库将数据库修改写入它的binlog日志中,从数据库启动Io线程 和sql线程。Io线程去主库把binlog日志读取过来写入自己的中继日志(relay log),然后sql线程读取 relaylog 然后解析成sql将数据插入到从库中。
二.搭建环境
首先在自己本地准备两个mysql数据库 _master: ??192.168.253.129:3001(主库) _slave: ?????192.168.253.129:3002(从库)
_master插入模拟数据
2 / 14
INSERT INTO student (`id`, `name`) VALUES (3, '卫霜岚');
现在这两个数据库之间完全没有关系,所以还需要一些配置让他们联系起来
1.主库配置
一开始两个mysql完全一样的,所以随便找一个做主库,那另一个就是从库
● 开启binlog
因为主从复制是基于binlog的,所以首先要确保binlog正常记录的。
查看binlog日志是否开启
3 / 14
看log_bin的值,ON表示开启,OFF表示关闭,如果是OFF则进行下一步
修改配置文件开启binlog
修改mysql配置文件,将以下配置添加到[mysqld]节点下,重启数据库
[mysqld] log_bin=mysql-bin binlog_format=ROW
再次回到第1步查看binlog日志是否开启,如果看到ON表示开启成功
●配置服务器
修改mysql配置文件,将以下配置添加到[mysqld]节点下,重启数据库
[mysqld] #mysql 服务ID
server-id=1 #忽略的数据库
#binlog-ignore-db=mysql #只同步下面的数据库
binlog-do-db=test
4 / 14
2.从库配置
● 数据同步
将主库的数据同步迁移到从库中,首先查询主库data路径:
5 / 14
[mysqld]服务不能和主库重复 #mysql ?????ID server-id=2
● 配置要复制的主库连接信息
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.253.129',MASTER_PORT=3001,MASTER_USER='root',MASTER_PASSWO
RD='root', MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=156;
MASTER_HOST:主库ip
MASTER_PORT:主库端口
MASTER_USER:主库用户名
MASTER_PASSWORD:主库密码
MASTER_LOG_FILE:主库binlog文件名
MASTER_LOG_POS:主库binlog定位
其中MASTER_LOG_FILE和MASTER_LOG_POS需要查询主库信息得知, 在主库中执行以下语句
6 / 14
● 查看是否成功
7 / 14
8 / 14
9 / 14
3.然后导入成功后,刷新列表,用户发现刚导入成功的数据死活查不到,因为查询是在从库执行的
可以看到从库中查不到那几条数据
5.排查恢复
通过上一步的模拟,发现主从数据不一致,说明主从复制出现了问题。 这个时候需要查询从库的状态:
10 / 14
11 / 14
mysql> DELETE from student where id = 6;
处理完成后重启主从复制
12 / 14
13 / 14
mysql> select * from student;
14 / 14