1、复制概述
Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台(master)主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。
2、MySQL的复制是如何工作的
整体上来说,复制有3个步骤:
(1). master将改变记录到二进制日志(binary log)中;
(2). slave将master的binary log events拷贝到它的中继日志(relay log);
(3). slave重做中继日志中的事件,将改变反映它自己的数据库中。
下图描述了复制的过程:
该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。下一步就是slave将master的binary log拷贝到它自己的中继日志中。 复制过程大致如下:
3、现在我们配置一个很简单的MySQL的主从复制
1. 我们希望达到的目标
复制配置有两台MySQL数据库服务器master和slave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。
要点:负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制日志,这个日志记载着需要传输给从服务器的各种修改动作。因此,主服务器必须激活二进制日志功能。从服务器必须具备足以让它连接主服务器并请求主服务器把二进制日志传输给它的权限。
2. 主从同步配置
3. 环境以及机器的配置:
服务器角色 | 系统平台 | 主机名/ip地址 |
master | CentOS6.5 | npf1 / 192.168.1.76 |
slave | CentOS6.5 | npf2 / 192.168.1.77 |
[root@npf1 ~]# vim /etc/my.cnf
通过mysql的客户端,查询当前MySQL的服务IP及server-id是否是我们刚才设置的。show variables like 'server_id';
(2). 在Master上面创建有复制权限的用户。
赋权限给刚才我们创建的用户repl_user。
GRANT REPLICATION SLAVE ON *.* TO repl_user IDENTIFIED BY 'repl_userpassword';
在这里我们还可以这样的配置:
GRANT REPLICATION SLAVE ON *.* TO ' repl_user'@'%' IDENTIFIED BY 'repl_userpassword';
(%表示允许所有IP,可设置指定从服务器IP),例如:
添加用户后,可在从服务器上用mysql -h 192.168.1.76 -urepl_user -prepl_userpassword;
[root@npf2 ~]# mysql -h 192.168.1.76 -urepl_user -prepl_userpassword
到此为止,我们的master已经配置完成了。
(1)向my.cnf添加如下的选项,命令如下:
[root@npf2 ~]# vim /etc/my.cnf
配置完后,重启mysql服务,如下:
[root@npf2 ~]# service mysqld restart
通过mysql的客户端,查询当前MySQL的服务IP及server-id是否是我们刚才设置的。show variables like 'server_id';
第三步:连接master和slave。
创建和运行复制的最后两步是:
使用CHANGE MASTER TO 命令将slave定向到master,然后用START SLAVE启动复制。
(1). 使用CHANGE MASTER TO 命令将slave定向到master。
mysql> CHANGE MASTER TO
-> MASTER_HOST = '192.168.1.76',
-> MASTER_PORT=3306,
-> MASTER_USER='repl_user',
-> MASTER_PASSWORD='repl_userpassword';
(2). 用START SLAVE启动复制。
第四步:测试。
(1). 在master创建一个数据库为mybatisdb。
(2). 在slave机器上查看,是否存在mybatisdb数据库。