数据库的主从复制

  作者:记性不好的阁主

MySql版本:5.5


实现主从同步(主从复制):图



1.master将改变的数 记录在本地的 二进制日志中(binary log) ;该过程 称之为:二进制日志件事

2.slave将master的binary log拷贝到自己的 relay log(中继日志文件)中

3.中继日志事件,将数据读取到自己的数据库之中

MYSQL主从复制 是异步的,串行化的, 有延迟

 master:slave = 1:n



配置: 
windows(mysql: my.ini)
linux(mysql: my.cnf)
配置前,为了无误,先将权限(远程访问)、防火墙等处理:
        关闭windows/linux防火墙: windows:右键“网络” ,linux: service iptables stop
        Mysql允许远程连接(windowos/linux):
        GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
        FLUSH PRIVILEGES;



主机(以下代码和操作 全部在主机windows中操作):


my.ini
[mysqld]
#id
server-id=1
#二进制日志文件(注意是/ 不是)
log-bin='D:/MySQL/MySQL Server 5.5/data/mysql-bin'
#错误记录文件
log-error='D:/MySQL/MySQL Server 5.5/data/mysql-error'
#主从同步时 忽略的数据库
binlog-ignore-db=mysql
#(可选)指定主从同步时,同步哪些数据库
binlog-do-db=test

windows中的数据库 授权哪台计算机中的数据库 是自己的从数据库:
 GRANT REPLICATION slave,reload,super ON *.* TO 'root'@'192.168.2.%' IDENTIFIED BY 'root';
 flush privileges ;

 查看主数据库的状态(每次在左主从同步前,需要观察 主机状态的最新值)
  show master status; (mysql-bin.000001、 107)


从机(以下代码和操作 全部在从机linux中操作):


my.cnf
[mysqld]
server-id=2
log-bin=mysql-bin
replicate-do-db=test

linux中的数据 授权哪台计算机中的数控 是自己的主计算机
CHANGE MASTER TO
MASTER_HOST = '192.168.2.2',
MASTER_USER = 'root',
MASTER_PASSWORD = 'root',
MASTER_PORT = 3306,
master_log_file='mysql-bin.000001',
master_log_pos=107;
 如果报错:This operation cannot be performed with a running slave; run STOP SLAVE first
 解决:STOP SLAVE ;再次执行上条授权语句


开启主从同步:


从机linux:

start slave ;

检验 show slave status G 主要观察: Slave_IO_Running和 Slave_SQL_Running,确保二者都是yes;如果不都是yes,则看下方的 Last_IO_Error。

本次 通过 Last_IO_Error发现错误的原因是 主从使用了相同的server-id, 检查:在主从中分别查看serverid: show variables like 'server_id' ;


  可以发现,在Linux中的my.cnf中设置了server-id=2,但实际执行时 确实server-id=1,原因:可能是 linux版Mysql的一个bug,也可能是 windows和Linux版本不一致造成的兼容性问题。
  解决改bug: set global server_id =2 ;
        stop slave ;
        set global server_id =2 ;
        start slave ;
        show slave status G


 演示:

 主windows =>从

 windows:

 将表,插入数据

 观察从机(Linux)数据库中该表的数据


 简而言之,效果是主机mysql插入数据,从机mysql自动同步插入数据(主从复制)。




相关推荐

评论 抢沙发

表情

分类选择