1) MYSQL主从同步是异步复制的过程,整个同步需要开启3线程,master上开启bin-log日志(记录数据库增、删除、修改、更新 *** 作);
2) Slave开启I/O线程来请求master服务器,请求指定bin-log中position点之后的内容;
3) Master端收到请求,Master端I/O线程响应请求,bin-log、position之后内容返给salve;
4) Slave将收到的内容存入relay-log中继日志中,生成master.info(记录master ip、bin-log、position、用户名密码);
5) Slave端SQL实时监测relay-log日志有更新,解析更新的sql内容,解析成sql语句,再salve库中执行;
6) 执行完毕之后,Slave端跟master端数据保持一致!
**MYSQL bin-log用途**
1) bin-log日志最大的功能记录数据库增、删、改、插入等 *** 作,记录用户 *** 作的SQL语句;
2) bin-log日志可以用数据增量备份、完整备份;
3) bin-log还可以主要主从复制+读写分离;
在MySQL服务器1中,添加如下配置:
在MySQL服务器2中,添加如下设置:
在这里两台MySQL的配置文件,需要对auto_increment_offset字段,设定不同值。因为如果mysql中有自增长字段,不设定这个参数会起冲突,会报duplicate....的报错。
auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
做主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2,这样可以避免两台服务器同时做更新时,自增长字段的值之间发生冲突。
配置好两台mysql的my.cnf配置文件后,service mysqld restart 重启mysql服务。
在Mysql服务器1中,
在MySQL服务器2中,做如上同样的 *** 作,然后将服务器1的file和position值设定到服务器2中,服务器2的file和position值输入到服务器1中。
在MySQL服务器1中,输如下命令:
在MySQL服务器2中,输如下命令:
范例如下图:
配置完后,分别在两台服务器上输show slave status
如果出现如下两个字段都是on的状态,则主主备份搭建完成。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在实际测试配置中,由于MySQL服务器2是克隆的MySQL服务器1的,所以start slave 后,show slave status 出现了Slave_IO_Running: No ,然后有如下报错信息。告知是因为两个MySQL服务器的UUID相重复了。
只需要,将basedir,即/use/local/mysql/data中的auto.cnf文件删掉后,重启mysql,就会出现新的auto.cnf文件,里面有新的UUID
1.主服务器:#Master start
log-bin="d:/log/mysql/mysql_log_bin"
server-id=1
#Master end
2.从服务器:
#Slave start
log-bin="D:/log/mysql2/log-bin.log"
relay_log="D:/log/mysql2/relay-log-bin"
#从机id,区别于主机id
server-id=2
#主机ip,供从机连接主机用
#master-host=localhost
#主机端口
#master-port=3300
#刚才为从机复制主机数据新建的账号
#master-user=slave
#刚才为从机复制主机数据新建的密码
#master-password=654321
#重试间隔时间10秒
#master-connect-retry=10
#需要同步的数据库
#replicate-do-db=test
#启用从库日志,这样可以进行链式复制
log-slave-updates
#从库是否只读,0表示可读写,1表示只读
read-only=1
#只复制某个表
#replicate-do-table=tablename
#只复制某些表(可用匹配符)
#replicate-wild-do-table=tablename%
#只复制某个库
#replicate-do-db=dbname
#不复制某个表
#replicate-ignore-table=tablename
#不复制某些表
#replicate-wild-ignore-table=tablename%
#不复制某个库
#replicate-ignore-db=dbname
#Slave end
3.对从服务器制定主服务器使用CHANGE MASTER 语句
注意:1.一定要在主服务器上创建一个可以执行replication的用户
2.该用户名在从服务器上可远程登录到主服务器。
3.开启MySQL的log-bin日志功能
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)