配置的环境:两台windows2003服务器,apache+mysql+php
所配置的类型:一主一从
基本原理:mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器接收主服务器已经记录的二进制日志来保存更新。当一个从服务器连接主服务器时,它通知主服务器从日志中读取最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
配置方法:
在进行mysql主从备份时,最好确保主从服务器的版本兼容。从服务器至少与主服务器版本相同或更高。
主机(master)配置:
1.修改mysql配置文件my.ini
在[mysqld]标签下添加以下几行
log-bin=名字
server-id=你设置的数值
binlog-do-db=数据库名
binlog-ignore-db=数据库名
max_allowed_packet=消息缓冲区的大小
2.为从服务器添加mysql账户并配置权限
使用cmd命令进入mysql 输入进行权限设置
grant
这个账号和密码需有相应的权限如:从服务器ip使用此账号和密码可以连接到主服务器的数据库
3.记录File 及Position 项的值
重启mysql,使用show
master status;查看主服务器状态,记录File 及Position 项的值,以便之后对从服务器进行配置。
从机(slave)配置:
1.修改mysql配置文件my.ini
在[mysqld]标签下添加以下面一行:
max_allowed_packet=消息缓冲区的大小
server-id=你设置的数值
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 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
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 参数限制掉,导致失败。