Mysql55主从半同步复制配置流程Word格式.docx
《Mysql55主从半同步复制配置流程Word格式.docx》由会员分享,可在线阅读,更多相关《Mysql55主从半同步复制配置流程Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
%semi%'
;
showmasterstatus;
showvariableslike'
安装半同步复制插件master端
#在mysql命令行状态下操作
mysql>
installpluginrpl_semi_sync_mastersoname'
semisync_master.so'
修改配置文件f
#开启binlog
log-bin=mysql-bin
#binlog格式:
混合。
如不设置,默认为SBR模式,在导入含innodb表的数据库时会出错
binlog_format=mixed
#master一般设置为1
server-id=1
#开启半同步复制模式,每次重启mysql就不需要手动重新开启半同步复制模式master端
rpl_semi_sync_master_enabled=1
#当slave停机时,master等待6000毫秒(6秒)后,没接收到slave的回应,则切换到异步复制模式
rpl_semi_sync_master_timeout=6000
#需要同步的数据库
binlog-do-db=db1
binlog-do-db=db2
#需要忽略的数据库
binlog-ignore-db=mysql
重启数据库
此时Master需要同步的数据库有任何数据改变,都会被写入binlog日志里,而且此时的slave还没赶上的话,mysql第一条更新类语句执行时会等待6000毫秒(即上面设置的rpl_semi_sync_master_timeout),然后切换为异步复制模式,直到至少有一台slave赶上才转为半同步复制模式。
可以用showstatuslike'
查看,其中比较重要的参数:
Rpl_semi_sync_master_clients代表有几个slave加入半同步复制模式
Rpl_semi_sync_master_status为on代表已开启半同步复制模式,为off代表已切换为异步复制模式
Rpl_semi_sync_master_yes_tx在收到slave确认时master提交事务的数量
Rpl_semi_sync_master_no_tx在未收到slave确认时master提交事务的数量
导出数据库
#--master-data=2表示在导出数据库时会打印CHANGEMASTER指令,并加上注释符号。
一般会记录如下信息:
#MASTER_LOG_FILE='
mysql-bin.000001'
MASTER_LOG_POS=107;
#这个选项还会开启--lock-all-tables,在完成时系统会自动关闭--lock-tables
/usr/local/mysql/bin/mysqldump-ubackup--master-data=2db1>
/home/BACKUP/mysqldata/db1.sql&
/usr/local/mysql/bin/mysqldump-ubackup--master-data=2db2>
/home/BACKUP/mysqldata/db2.sql&
传输sql文件到slave
rsync-v--progress/home/BACKUP/mysqldata/*.sql192.169.1.41:
:
data/
前提需要在192.169.1.41配置rsync,并启动rsync--daemon
vi/etc/rsyncd.conf
uid=user
gid=user
usechroot=false
strictmodes=false
usechroot=no
maxconnections=4
logfile=/var/log/rsyncd.log
pidfile=/dev/shm/rsyncd.pid
lockfile=/dev/shm/rsync.lock
[data]
path=/home/BACKUP
readonly=false
uid=user
gid=user
hostsallow=192.169.1.40
hostsdeny=0.0.0.0/0
comment=WebApp
ignoreerrors
Slave操作
导入数据库
/usr/local/mysql/bin/mysql-ubackupdb1<
/home/BACKUP/db1.sql&
/usr/local/mysql/bin/mysql-ubackupdb2<
/home/BACKUP/db2.sql&
showslavestatus\G;
%relay%'
安装半同步复制插件slave端
installpluginrpl_semi_sync_slavesoname'
semisync_slave.so'
如不设置,默认为SBR模式,在导入含innodb的数据库时会出错
#slave一般从2开始
server-id=2
#开启半同步复制模式,每次重启mysql就不需要手动重新开启半同步复制模式slave端
rpl_semi_sync_slave_enabled=1
#在MySQL5.5版本之前,MySQLSlave实例在异常终止服务之后,可能导致复制中断,并且relaybinlog可能损坏,在MySQL再次启动之后并不能正常恢复复制。
#在MySQL5.5中这一问题得到了解决,MySQL可以自行丢弃顺坏的而未处理的数据,重新从master上获取源数据,进而回复复制。
relay_log_recovery=1
#对所有的非临时表进行只读控制。
#但是有两种情况例外:
#
1.对replicationthreads例外,以保证slave能够正常的进行复制。
#2.对于拥有super权限的用户,可以忽略这个选项。
#可选
#read-only=1
#忽略复制内存表使用这个选项,可选
#replicate-ignore-table=db.memory_table
#需要复制的数据库
replicate-do-db=db1
replicate-do-db=db2
replicate-ignore-db=mysql
startslave
#查看刚才导入的sql文件前30行,找到--CHANGEMASTERTOMASTER_LOG_FILE=这行,并记下mysql-bin文件名和MASTER_LOG_POS位置
head–n30/home/BACKUP/db1.sql
#连接master并开启slave模式
CHANGEMASTERTOMASTER_HOST='
192.169.1.40'
MASTER_USER='
MASTER_PASSWORD='
MASTER_PORT=3306,MASTER_LOG_FILE='
MASTER_LOG_POS=107;
startslave;
附录:
一般情况下,推荐使用MIXEDbinlog的复制。
usesquery-levellogging:
Themasterwritestheexecutedqueriestothebinarylog.Thisisaveryfast,compact,andefficientloggingmethodthatworksperfectlyinmostcases.
附:
关于MYSQL复制的几种模式
以下转自
从MySQL5.1.12开始,可以用以下三种模式来实现:
–基于SQL语句的复制(statement-basedreplication,SBR),
–基于行的复制(row-basedreplication,RBR),
–混合模式复制(mixed-basedreplication,MBR)。
相应地,binlog的格式也有三种:
STATEMENT,ROW,MIXED。
MBR模式中,SBR模式是默认的。
在运行时可以动态改动binlog的格式,除了以下几种情况:
.存储流程或者触发器中间
.启用了NDB
.当前会话试用RBR模式,并且已打开了临时表
如果binlog采用了MIXED模式,那么在以下几种情况下会自动将binlog的模式由SBR模式改成RBR模式。
.当DML语句更新一个NDB表时
.当函数中包含UUID()时
.2个及以上包含AUTO_INCREMENT字段的表被更新时
.行任何INSERTDELAYED语句时
.用UDF时
.视图中必须要求运用RBR时,例如建立视图是运用了UUID()函数
设定主从复制模式:
log-bin=mysql-bin
#binlog_format="
STATEMENT"
ROW"
binlog_format="
MIXED"
也可以在运行时动态修改binlog的格式。
例如
SETSESSIONbinlog_format='
STATEMENT'
ROW'
MIXED'
两种模式各自的优缺点:
SBR的优点:
历史悠久,技能成熟
binlog文件较小
binlog中包含了所有数据库修改信息,可以据此来审核数据库的安全等情况
binlog可以用于实时的还原,而不仅仅用于复制
主从版本可以不一样,从服务器版本可以比主服务器版本高
SBR的缺点:
不是所有的UPDATE语句都能被复制,尤其是包含不确定操作的时候。
调用具有不确定因素的UDF时复制也可能出疑问
运用以下函数的语句也不能被复制:
*LOAD_FILE()
*UUID()
*USER()
*FOUND_ROWS()
*SYSDATE()(除非启动时启用了–sys