本文源出处:http://www.lustlost.com/?p=158mysql
在mysql的复制中,相对于主主复制,主从架构的稳定性更好,而主主老是会有些问题存在,故不推荐。在大型架构中建议使用基于读写分离的主从复制sql
本文不涉及读写分离的内容,只是简单实现mysql的主从复制的实现。整个过程在理解复制的原理后就很是的简单,因此先简单介绍下原理。数据库
mysql的主从复制的基本原理:安全
在主服务器上传送二进制日志到从服务器,在从服务器上读取收到的中继日志,执行日志中的sql语句,实现数据同步。服务器
整个实现过程以下图所示,经过图片能很容易的看出整个流程网络
对于主从之间使用异步传输仍是同步传输,具体看网络状况和总体架构而定架构
要注意,为了兼容性问题,主从服务器之间,master的mysql的版本要比slave版本低或者相同异步
若是在一个已存在数据的主服务器上部署备服务器,要先备份主服务器的数据,备份的时候作好二进制日志位置记录 ,而后恢复到从服务器上,并指定从服务器的从主服务器二进制日志的复制位置,从时间点开始复制ide
实现过程命令行
首先在2台服务器上安装好mysql。安装步骤再也不列出,我用的是绿色版安装,双方的mysql配置最好同样
修改my.cnf,master上修改server-id为1,slaver修改server-id为大于1的数字
master:
slave:
在从服务器上关闭二进制日志,避免从服务器上IO太高,并开启relay-log
并且要在slave上限制写入
在master上建立复制用的账号,此账号只授予复制相关的权限
在slave上进入mysql命令行,设定master相关参数
而后打开slave复制
查看slave状态
发现链接到master时出现错误
清空master和slave的iptables规则后从新启动slave,OK
试着在master上建立一个数据库
在slave上查看,已经成功复制过来
若是在部署slave时master已经存有数据了,须要在master上备份数据,而后在slave上导入数据
在用mysqldump备份数据的时候,加上--master-data=2参数记录正在使用二进制日志文件和的POS位置
而后在slave上指定master服务器时,加上master_logfile=’xxx’,master_log_pos=xxx 指定起始的二进制文件和文件的pos位置开始复制
要让slave开启时暂时中止从服务器线程,在my.cnf中的mysqld段中加入如下参数
skip-slave-start=1
为了让服务器更加安全,防止断电产生事物已经提交,数据还未写入磁盘的问题,在master的my.cnf中的mysql段加入
sync_binlog=1
innodb_flush_logs_at_trx_commit=1