Mysql主从同步(Master-Slave)

系统环境: 

windows: Win7  (mysql 5.5)  --Master

 linux: CentOS7 (mysql 5.5)  --Slave

 

1.配置主从同步:

1.1:先配置前,为了无误,先将权限(远程访问)、防火墙等处理

1.1.1: 关闭防火墙:

windows: 右键“网络”

linux:  (OS中执行)

service iptables stop    

1.1.2:允许远程连接: (在Master和Slave的Mysql中都执行)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpwd' WITH GRANT OPTION;

FLUSH PRIVILEGES;

 

 

1.2:再配置Mysql配置文件

1.2.1:主机配置(Master配置)

  • 1> 在目录下(D:\MySQL\MySQL Server 5.5)打开编辑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=test1,test2,test3

 

  • 2> windows中的数据库(Master库)授权哪台计算机中的数据库是自己的从数据库,mysql中执行:

GRANT REPLICATION slave,reload,super ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY 'dbpwd';

FLUSH PRIVILEGES;

 

  • 3>查看主数据库的状态(每次在主从同步前,需要观察主机状态的最新值)

show master status;

记录下File和Positon的值

 

 

 

1.2.2:从机配置(Slave配置)

  • 1> 在目录下(/etc)打开编辑my.cnf文件.

[mysqld]

server-id=2

log-bin=mysql-bin

replicate-do-db=test1,test2,test3

 

  • 2> linux中的数据(Slave)授权哪台计算机中的数据库是自己的主数据库(mysql中执行)

CHANGE MASTER TO

MASTER_HOST = '192.168.2.2',

MASTER_USER = 'root',

MASTER_PASSWORD = 'dbpwd',

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 ;再次执行上条授权语句

 

如果只是想同步几张表,也可以: 

replicate-do-db    设定需要复制的数据库(多数据库使用逗号,隔开)
replicate-ignore-db 设定需要忽略的复制数据库 (多数据库使用逗号,隔开)
replicate-do-table  设定需要复制的表
replicate-ignore-table 设定需要忽略的复制表 
replicate-wild-do-table 同replication-do-table功能一样,但是可以通配符
replicate-wild-ignore-table 同replication-ignore-table功能一样,但是可以加通配符
 

增加通配符的两个配置

replicate-wild-do-table=db_name.%   只复制哪个库的哪个表
replicate-wild-ignore-table=mysql.%   忽略哪个库的哪个表

1.3:再开启主从同步:

#从机linux:(mysql中执行)

start slave ;

#检验: (mysql中执行)

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:

stop slave;

set global server_id =2 ;

start slave ;

show slave status \G;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值