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 slave@192.168.199.152 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

异常状态:

 Slave_IO_State: Connecting to master
Last_IO_Error: error connecting to master 'slave@192.168.0.106:3306' - retry-time: 60  retries: 1

1,检查在从服务器上是否能够连接上主库数据

mysql -uslave -h 192.168.0.106  -p    #使用从库运行看能连接上不能

查看得知是主库未将3306端口开放

 netstat -ntlp  #查看连接状况
 vi /etc/sysconfig/iptables  #修改防火墙配置文件
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306  -j ACCEPT #开放3306端口,(注意)commit之前加
service iptables restart #重启防火墙

异常状态:

  Last_IO_Error:Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

原因:主从库中是否存在相同的UUIDs

show variables like '%server_uuid%';#主从库中运行部后得知uuids 一样

解决方案:
找到数据库安装目录下的data/mysql/文件夹下的auto.cnf文件,修改里面的uuid值,保证各个db的uuid不一样,重启Mysql即可

service mysqld restart

步骤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 slave@192.168.199.151 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 不能重复)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值