Mysql数据库复制及备份
一、mysql数据库复制概述
复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步。一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器。主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器、特定的数据库,甚至特定的表进行复制。
Mysql复制大部分都是向后兼容的。这意味着版本较新的服务器可以是版本较老的服务器的从服务器。但老版本的服务器通常不能是新版本号的服务器的从服务器。复制通常不会大幅增加主服务器的开销。它需要主服务器启用二进制日志,这或许会有较大的开销,但是出于备份的目的,无论如何这种开销都是需要的。
复制通常的用途有:数据分布、负载平衡、备份、高可用性和故障转移、测试mysql升级。
二、复制的工作原理
总体上来说,复制有以下三个步骤:
(a)主服务器把数据更改记录到二进制日志中。(这叫做二进制日志事件(binary log events)。)
(b)从服务器把主服务器的二进制日志事件拷贝到自己的中继日志(relay log)中。
(c)从服务器重放中继日志中的事件,把更改用到自己的数据上。
这三个步骤如下图所示:
第一步:在主服务器上记录二进制日志。在每个更新数据的事务完成之前,主服务器都会把数据更改记录到二进制日志中。即使事务在执行期间是交错的,mysql也会串行地把事务写入到二进制日志中。在把事件写入到二进制日志之后,主服务器告诉存储引擎提交事务。
第二步:从服务器把主服务器的二进制日志拷贝到自己硬盘上,进入所谓的“中继日志(relay log)中。
它首先启动一个工作线程,叫I/O线程。这个I/O线程开启一个普通的客户端连接,然后启动一个特殊的二进制日志转储进程。这个转储进程从主服务器的二进制日志中读取事件。它不会对事件进行轮询。如果它跟上了主服务器,就会进入休眠状态,并等待有新事件发生时主服务器发出的信号。I/O线程把事件写入从服务器的中继日志中。
第三步:SQL从线程处理了该过程的最后一部分。该线程读取了中继日志,并且重放其中的事件,然后更新从服务器的数据。由于这个线程能跟上I/O线程,所以,中继日志一般都是在操作系统的缓存中,因此中继日志的开销很低。同时SQL线程执行的事件也可以被写入从服务器自己的二进制日志中。
三、创建复制以及配置主、从服务器
创建复制主要分为下面几个步骤:
1、 在每一台服务器上建立复制账号。
2、 配置主、从服务器。
3、 指导从服务器进行连接与复制。
下面以实际操作的例子来进一步说明复制的创建。
1、 平台说明:
系统环境:ubuntu10.10
软件版本:mysql-5.5.25
2、 Mysql数据库说明:
在两台不同的计算机里面安装好mysql服务器。
主服务器IP:192.168.1.100
从服务器IP:192.168.1.104
下面将按照创建复制的步骤进行说明
第一步:在每一台服务器上建立复制账号
Mysql有一些特殊的权限允许复制进程运行。从I/O线程运行在从服务器上,它创建了到主服务器的连接。基于此,在主服务器上就必须创建一个用户账户并且给它合适的权限,这样I/O线程就可以以这个用户的身份连接到主服务器,并且读取它的二进制日志。
上述命令在主服务器上创建一个用户名为repl的账号。这里把用户限制到了本地网络。