mysql(3) 创建replication

来源:互联网 发布:淘宝店铺零库存怎么做 编辑:程序博客网 时间:2024/05/22 03:16

mysql虽然是免费的数据库,但是在提高数据库的可用性方面,做的还是可以的。

本文主要是记录笔者 创建mysql的replication的过程,遇到的问题,及相关的步骤。

笔者是环境 是两台数据库分别装在johnny-test-2 和 johnny-test-3上。 其中 johnny-test-2作为 master, johnny-test-3作为 slave


1. 为什么 需要replication

这个问题不需要回答,呵呵。

随着对数据库性能的要求越来越高,我们可能 在实际应用环境中, 将其中 一台作为主数据库,主要负责数据的写入。  另外 有其余的几台数据库负责对外提供 服务, 包括 读, 数据报表 等 等 。 或者是作为 数据库备份的一种方式 , replication发挥 了重要的作用。


2. 如何实现 Replication

2.1 Master的设置

2.1.1 binary log 设置

首先 MySQL的replication是基于binary log机制之上的, 数据库操作数据, 然后将update 或者change作为一种事件写到binary log 中。

所以 我们必须要enable master的binary log 功能 的,如下



log-bin是用来 设置 bin log的文件前缀,

binlog_format设置为混合方式, 这个是默认的。

再加上sync_binlog设置

这样 就可以在mysql 的目录下,看到如下的binlog


2.1.2 设置 server-id

server-id 必须要设置, 不然的话, 系统会使用默认的0.  这个id主要用来区别组内的每个mysql server。

必须是正值 ,可以 在1-(2**32 -1)内取值。 放在[mysqld]内




2.1.3 设置 SSL

这个笔者 会单独用一个章节来说明这个。 当写好之后,会在这里放一个链接  ^_^

在上面的截图中,可以看到已经设置了ssl的内容。

2.1.4 设置用于replication的账户

通过如下的命令来实现 

CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass'; //设定用户GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; //给用户赋权限 flush privileges;//刷新


2.1.5 获得master 的bin-log数据

为了保证在做replication之前,master 的数据是最新的更新,可以使用命令

FLUSH TABLES WITH READ LOCK;

对于InnoDB 来说, 上面的命令会block commit命令,保证了数据不会被再次的更新, 可以看到当前的状态

然后使用

show master status;
来查看当前master的状态 如下 :


上面这个数据,在做slave 的设定时,很重要,所以要记录好File和Position


这里可以 对master,进行 UNLOCK tables;


至此,master的工作基本完成了, 除了ssl的配置, 笔者将在另外的文章里描述。


2.2 配置 slave

2.2.1 创建与master 相同的环境

这个可以通过 几种方式来完成 ,

1. 如果说一开始是新的数据库环境做replication,那是最好了,没有什么要同步的。 

2. 如果master中,本来有大量的数据, 可以考虑用msqldump 对master做snapshot,然后在slave上rollforward

3. 也可以 直接 从master中, 把要的数据文件直接拷贝到slave

由于笔者是新创建的环境,所以 没有做这一步,如果有兴趣的同学可以到mysql的官网上查看 相关的内容 :


2.2.2 设置master 的内容


在slave上使用了start slave 命令之后,就会在/var/lib/mysql/下面生成 了新的文件 master.info和relay-log.info, 一开始里面是没有内容的会生成空的。

我们需要stop slave ,然后使用change master to 命令来设置关于master 的相关信息,包括 master_host,master_user,master_password, master_log_file, master_log_pos等参数 。

我们也可以设定访问master ssl的相关参数,以提高安全性



之后, 我们来看看现在master.info里面的内容



2.3 启动replication

完成 上面 2.1与2.2 的设定之后,我们就可以开始replicaton的动作了,

在slave上使用start slave 命令就可以 

用show slave status, 我们可以看到下面的内容。


然后在master 上,做一些对数据的DML 的操作, 再在slave 上查看,会发现数据已经被 replication过来 了



希望上面的过程 ,对大家有用。