场景描述
在官方的replication描述中,replication的优点有如下几个方面:
概括起来就是:可扩展性,数据安全,便捷分析,便于分发。
在我们团队目前的场景中,暂时需要的其实只有“便于分发”,
但是其顺带的其他特性也是“the more the better”。
mysql5.7之后,除了传统的给予二进制的日志的replication之外,
还支持基于global transaction identifiers (GTIDs)的复制。
操作步骤
具体操作步骤在文章最后的参考文章有一些,下面我的笔记来自官方文档:
- Master Config
第一步是设置主数据库,具体需要配置的信息比较简单,就是在my.cnf
文件中,
修改以下配置(一般就是打开注释即可),
由于从数据库需要用户名和密码去链接主数据库,而且用于复制的用户名和密码是明文存储的,
所以需要在主数据库中新建专用的用户,新建的用户需要REPLICATION SLAVE
权限:
为了让从数据库知道从哪里开始执行二进制的日志,需要先获取主数据中目前的二进制文件的位置,
注意,这里需要保持这个窗口打开(session open),否则READ LOCK
就会失效,
然后新开一个窗口(也许你需要tmux),
这里需要记录File
和Position
,稍后在slave的配置中会用到。
如果你只需要复制某一个或一些database,而不是整个数据库,
或者在复制中需要忽略某一个或一些database,那么在my.cnf
中有以下配置项:
如果你的主数据库中没有数据,那么主数据库的配置工作到此为止,
可以进入从数据库的配置工作了。但是如果你的主数据库中此时已经有了大量的数据,
那么接下来就需要为你的数据库进行一次快照了。
mysql的快照一般都是通过[mysqldump]
来实现的,具体的例子有以下几种:
至此,主数据库的配置就完成了,接下来就是从数据库的配置了。
- Slave Config
首先与主数据库一样的配置,就是需要在my.conf
中进行如下配置,
其中的server-id
必须是全局唯一的
注意这里需要先创建好slave的数据库,
然后在mysql中执行以下sql语句配置主数据库:
然后根据是否有已存在的数据来觉得是否需要先导入刚才导出的sql文件,
最后执行
就搞定了。此时可以执行
来查看从数据库的状态信息。
- Add slave
通过以上的操作,至此就可以完成主从数据库的从无到有,如果是需要继续添加slave,
则需要继续下去。
官方推荐的做法比较简单,就是选中一个已经存在的slave,关闭掉其服务,
然后拷贝整个slave的数据文件夹,然后修改新的slave的my.cnf
至此,全部的相关配置工作就全部结束了。但是,因为我们的从数据库一般都是只读的,
所以如果你愿意的话,还有最后一步:
Read Only
mysql支持read_only,在my.cnf
中设置
就可以防止普通用户的写操作,但是这样并不能防止具有SUPER privilege
的用户的写操作,
MySQL5.7添加了一个新的配置项super_read_only,顾名思义,
就是这样设置了之后,连具有SUPER privilege
的用户也只能read了!
参考文章
https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql
https://www.toptal.com/mysql/mysql-master-slave-replication-tutorial
blog comments powered by