Mysql主从复制

实现原理
MySQL支持单向、异步复制,复制过程中一个服努器充当主服努器 ,而一个或多个其它服努器充当从服努器
MySQL复制基于主服努器在二进制日志中跟踪所有对数据库的更改 (更新、删除等等)
每个从服务器从主服务器接收主服务器已经记录到其 二进制的保存的更新
实现步骤
①Master将改变记录到二进制日志(binary log)中
②Slave将Master的binary log events拷贝到它的中继日志(re丨ay
log);
③Slave重做中继日志中的事件,将改变反映它自己的数据。
原理图
在这里插入图片描述

步骤1:
主库设置
开启主服务器的binary log

vim /etc/my.cnf
去掉  log-bin=mysql-bin 注释
mysql-bin 日志名称
修改 server-id =1; 更改为唯一的值,可以修改为ip的尾数
重启mysql
进入mysql 
查看mysql状态 
show master status 
重置日志记录
reset master 
授权指定ip通过用户slave 使用123456密码访问log-bin文件
grant replication slave on *.* to [email protected] identified by '123456' ;

步骤2:
从库设置

vim /etc/my.cnf
注释log-bin=mysql-bin以及binlog-format=mixed
修改 server-id = ; 更改为不一样的值,可以修改为ip的尾数
开启 relay_log=mysql-relay-bin;
进入mysql;
执行 stop slave ;#停止监听
执行 ->change master to
     ->master_host='192.168.199.151',
     ->master_port='3306',
     ->master_user='slave',
     ->master_password='123456',
     ->master_log_file='mysql-bin.000001',
     ->master_log_pos=402 ;

注意:master_log_file和master_log_pos的值是通过主库执行 show master status 查看得到的.
执行 start slave ;#开启监听;
执行后就可以监听了;
查看状态 show slave status\G ;查看状态;

Slave_IO_State:Wating for master to send event   #当前状态
Slave_IO_Runing:Yes
Slave_Sql_Runing:Yes

步骤3:
Mysql 双主热备
原理
在这里插入图片描述

解决问题
master 挂掉不会影响业务

实现方法

在slave 从服务器中修改my.cnf
开启 log-bin=mysql-bin
binlog_format=mixed
relay_log=mysql-relay-bin
log_slave_updates=1    #此处将从主库获得的bin-log和从库的bin-log一致,保存后退出
进入mysql,
授权主库可以监听从库
grant replication slave on *.* to [email protected] identified by '123456' ; 

同样也需要设置原有的从库

vim /etc/my.cnf
开启 relay_log=mysql-relay-bin;
设置 log_slave_updates=1 
重启mysql;
执行 ->change master to
     ->master_host='192.168.199.152',
     ->master_port='3306',
     ->master_user='slave',
     ->master_password='123456',
     ->master_log_file='mysql-bin.000001',
     ->master_log_pos=402 ;

#注意:master_log_file和master_log_pos的值是通过从库执行 show master status 查看得到的.
执行 start slave ;#开启监听;
这样就实现了双主热备,将从库同样变成了主库.

同样还需要设置2台从库分别来同步以上两台主库,重复步骤二.
(注意:server_id 不能重复)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章