设置读写分离后数据同步的配置方法

配置的环境:两台windows2003服务器,apache+mysql+php
所配置的类型:一主一从

基本原理:mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器接收主服务器已经记录的二进制日志来保存更新。当一个从服务器连接主服务器时,它通知主服务器从日志中读取最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。

配置方法:

在进行mysql主从备份时,最好确保主从服务器的版本兼容。从服务器至少与主服务器版本相同或更高。

主机(master)配置:


1.
修改mysql配置文件my.ini
[mysqld]标签下添加以下几行

log-bin=名字    这个是开启二进制日志 如果名字mysql-bin 生成的二进制日志名为:mysql-bin.000001

server-id=你设置的数值   这个是唯一的id标识 默认为1 不能和从服务器重复

binlog-do-db=数据库名    这个是你要记录的数据库名

binlog-ignore-db=数据库名     指定不对哪个数据库记录二进制日志 不是必需要设的

max_allowed_packet=消息缓冲区的大小   这个数值主从设置的要一致最好设置大点 :1G 使用命令行查看方式 show variables like '%max_allowed_packet%';


2.为从服务器添加mysql账户并配置权限

使用cmd命令进入mysql 输入进行权限设置

grant replication slave on *.* to '帐号'从服务器IP' identified by '密码';

这个账号和密码需有相应的权限如:从服务器ip使用此账号和密码可以连接到主服务器的数据库


3.记录File Position 项的值
  重启mysql,使用show master status;查看主服务器状态,记录File Position 项的值,以便之后对从服务器进行配置。

 

 

从机(slave)配置:


1.
修改mysql配置文件my.ini
[mysqld]标签下添加以下面一行:

max_allowed_packet=消息缓冲区的大小   这个数值主从设置的要一致最好设置大点 :1G 使用命令行查看方式 show variables like '%max_allowed_packet%';

server-id=你设置的数值      这个是唯一的id标识 默认为2 不能和主服务器重复

replicate-do-db=数据库名     这个是你要读取的数据库名


2.重启mysql数据库并设置相关参数

使用cmd 命令进入mysql 输入命令

change master to master_host='主服务器ip地址',master_port=主服务器端口,master_user='设置的主服务器账号',master_password='主服务器密码',master_log_file='二进制日志名File',master_log_pos=Position ;

最后输入命令查看是否配置正确

SHOW SLAVE STATUS\G

如果看到Slave_IO_Running: Yes  Slave_SQL_Running: Yes 正说明配置正确

停止复制数据需在从服务器命令行下输入slave stop;

开启复制数据 slave start;

 

遇到这样的错误如:“Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'”等或

Last_IO_Error: Got fatal error 1236 from master when reading dat

a from binary log: 'log event entry exceeded max_allowed_packet; Increase max_al

lowed_packet on master; the first event 'mysql-bin.000001' at 98, the last event

 read from '.\mysql-bin.000001' at 98, the last byte read from '.\mysql-bin.0000

01' at 117.'

解决办法如下:

先进入slave中执行:"slave stop;"来停止从库同步;

再去master中执行:"flush logs;"来清空日志;

然后在master中执行:"show master status;"查看下主库的状态,主要是日志的文件和position

然后回到slave中,执行:"CHANGE MASTER TO MASTER_LOG_FILE='查看到的日志文件',MASTER_LOG_POS=查看到的position值;",文件和位置对应master中的;

最后在slave中执行:"slave start;"来启动同步。

有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值