主从同步一般使用在多台服务器上读写分离的数据库架构。为了提交数据库的效率,其实现的原理如下如所示:
分别配置了主从服务器。后主从服务器的同步流程如下:
这里的slave database不一定只是一台数据库服务器,可以使slave database的集群,同时从master database同步数据。这个需要按照自己的业务架构来,但是原理是相同的。
主服务器就一般是在应用中执行删除,修改,添加操作的数据库服务器(insert update delete),配置步骤如下:
修改数据库的配置文件my.ini(windows系统),或者my.cf(linux系统),找到[mysqld]配置项,在其下添加如下两个配置:
bin-log=”D:/Mysql/logs/log.bin” //自己想放在哪儿就放在哪儿
server-id=12 //设置一个server id而且你集群的服务器中的server id必须不同
这一步主要是为了让mysql的配置文件生效
因为在添加从数据库时主数据库可能已经一个人支撑业务跑了大半年了,那主数据库上有数据怎么办?肯定是需要先将主数据库中的数据转移副本到从服务器,这个过程就是一个备份与还原的过程。备份一份主服务器的备份然后还原到从服务器上就可以了,但是在这儿有一个小细节,为了防止这个过程中数据的不一致性我们需要先将表锁起来。(其实不锁也没关系)
在mysql命令行执行 flush tables with read lock
紧接着就是讲数据库备份和还原到从服务器的过程了。备份以及还原的方式非常多,我这儿只说一种物理备份的方式,那就是把msyql下的data目录中的文件夹全部复制到从服务器的mysql下的data文件夹,复制时千万要注意,以下两个包含了数据库设置和配置的表不能复制哟。
这个过程就是一个mysql账号授权的过程
执行:
这句的意思是创建一个从服务器的复制账号,授权所有主数据库上所有的表以账号testuser密码testuser的方式连接,从服务器ip必须是192.168.0.2
*注意,以上步骤如果是按照我的文档做的那这一步很有可能报错,因为你刚刚已经锁定了表,所以在运行授权之前必须先运行 unlock tables; 来解锁表。
这个过程是查看在备份之前数据的日志以及从哪个位置开始同步;
执行 show master status;
结果中的file以及position在配置从服务器时需要,一定要记录好。
好了,值此,主服务器的配置就大工告成了。
在[mysqld]配置项中添加如下配置
server-id=33;
一定要注意这儿的id和主数据库中的id不能重复,也不能为0;
这儿不是简单的重启哦!
因为我们还没有对从服务器配置任何和主服务器的连接参数,所以我们要重启服务器而且不能开启同步,那怎么办呢?
如果是Windows系统可以在msyql的bin目录下执行
这样我们就可以重启服务器而且不会马上执行同步。
先使用命令行登录mysql在命令行下执行
执行 start slave 就开始同步了
在从服务器的mysql命令行中执行
Show slave status\G
如果出现wait for slave from master等信息就说明成功了。接下来就可以修改数据来看看效果了。
库服务器应用实现主从同步从而读写分离