数据库复制 replication 的实现原理
1:主服务器凡运行语句,都产生一个二进制日志 binlog
2:从服务器不断读取主服务器的binlog
3:从主服务读取到的binlog,转换为自身可执行的relaylog,
4:执行relaylog
具体实施
本人虚拟机下有两台linux,IP为199 200
1: 200做从服务器
2: 199mysql,做为主服务器.
3: 保证主从3306端口互通.
4: 配置主服务器,打开binlog
上面就是实现增量备份的思路。下面我具体配置一下
一 、配置二进制日志
server_id = 199
#开启二进制日志
log-bin=mysql-bin
log-bin-index=master-bin.index
#指定日志格式 位置、语句 和自动选择(mixed) binlog_format=mixed
主服务器 配置好,重启mysql
进入mysql 输入 show master status; 出现下图的说明日志文件配好了。
二、授权账号
二进制文件是数据,也就是获得了二进制文件就获得了所以数据,那么问题来了,这么重要的东西要是谁都能访问,那不坏菜了。。。。。所以主服务器 要给从服务器设置账号,指定那些才能访问。
授权给客户端 那些库和表 用户名为root 密码为root的账号在ip为192.168.1.200 起作用
grant replication client, replication slave on *.* to 'root'@'192.168.1.200' indentified by 'root' ;
三 从服务器
server_id = 200
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1
server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志
有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。
但是,read_only并是很实用,特别是那些需要在slave上创建表的应用。
从服务器 从启mysql
在mysql 执行 告诉从服务器 从哪个ip 用那个用户名 密码 那个日志文件 从什么位置 开始监听复制
change master to master_host='192.168.1.199',master_user='root',master_password='root',
master_log_file='mysql-bin.000001',master_log_pos=154;
Start slave; 启动备
show slave status; 查看从服务器状态
reset slave ; 重置slave状态.
stop slave; 暂停slave状态;