MySQL服务器也支持镜像,大提高数据的安全性和稳定性。下面介绍一下MySQL数据中的镜像机制:
在镜像关系中,一个MySQL服务器扮演主服务器角色,另外一个或多个服务器扮演从服务器角色,从服务器中的数据和主服务器中的数据完全一样。
在镜像建立之前,主服务器和从服务器必须进行一次完全同步。同步之后,在主服务器上所做的操作将会在从服务器上再实现,主服务器上的操作不是直接作用于从服务器上的。
负责在主、从服务器上传输各种修改动作的媒介是主服务器上的二进制变更日志,该日志记录着主服务器上所有的操作动作。因此,主服务器必须激活二进制日志功能。
从服务器必须有足够的权限从主服务器上接收二进制日志文件。镜像协调信息记录从服务器的进展情况,包括,从服务器正在读取的二进制变更日志文件名和它在该文件里的当前读写位置。
每个主服务器可以有多个从服务器,但每个从服务器只能有一个主服务器。但MySQL服务器允许把一个从服务器作为另一个从服务器的主服务器,这样就可创建一个镜像服务器链。
镜像机制在MySQL中还是一个新生事物,最早实现于3.23.15版。各版本间的镜像能力有差异,一般来说,建议大家尽量使用最新的版本,下面列举了不同版本的MySQL服务器在镜像机制方面的兼容规则:
3.23.x系统版本的从服务器不能与4.x系统版本的主服务器通信。
4.0.0版本的从服务器只能与4.0.0版本的主服务器通信。
4.0.1或更高版本的从服务器既能与3.23.x系统版本的主服务器通信,也能与4.x系统版本的主服务器通信。但后一种情况要求主服务器的版本号等于或大于从服务器的版本号。
一般来说,建议遵循以下原则:
要尽可能地让主服务器和从服务器都使用同一版本系统。
在选定系统后,尽量使用该系统的最新版本。
建立主从镜像服务器的步骤:
确定主从服务器的镜像ID号,主从服务器的ID号不能相同。在启动主从服务器时,用--server_id启动选项给出其ID。
从服务器必须在主服务器上有一个具备足够的权限的帐户,从服务器将使用该帐户去连接主服务器并请求主服务器把二进制变更日志发送给它。可用以下命令创建这个帐户:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_host' IDENTIFIED BY 'slave_pass';
#REPLICATION权限只MySQL4.0.2后版本,之前的版本请用FILE权限。
把主服务器上的数据库文件拷贝到从服务器上完成最初同步工作。也可用备份后再加载的方法。在MySQL 4.0.0及以后版本里,还可用在主服务器上运行LOAD DATA FROM MASTER语句来建立从服务器。但有约束条件:
数据表要全部是MyISAM表
为发出这条指令而在连接从服务器时使用的帐户必须有SUPER权限。
从服务器用来连接主服务器的帐户必须具备RELOAD和SUPER权限。注意,这是一个主服务器上的帐户,而用来发出LOAD DATA FROM MASTER语句的帐户是一个从服务器上的帐户。
LOAD DATA FROM MASTER语句在执行时需申请一个全局性的读操作锁,这个锁在语句执行期间阻塞主服务器上一切的写操作。
无论用哪种方法同步数据,都要确保在开始制作备份到给主服务器重新配置好二进制日志功能这段时间,不能在主服务器上发生修改操作。
关闭服务器。
对主服务器的配置进行修改--把它的镜像ID告诉它并激活其二进制日志功能。在主服务器要读取的选项文件内增加以下内容:
[mysqld]
server-id=master_server_id
log-bin=binlog_name
重新启动主服务器,从现在开始,它将把客户对数据库的修改操作记录到二进制变更日志里。如果在此之前已经激活了二进制日志功能,则要在重启前把二进制变更日志备份下来,在重启后再发一条RESET MASTER语句去清除现有的二进制变更日志。
关闭从服务器。
对从服务器进行配置,使它知道自已的镜像ID,到哪里去找主服务器以及如何去连接主服务器。配置内容如下:
[mysqld]
server-id=slave_server_id
master-host=master_host
master-user=slave_user #在主服务器上为从服务器建立的帐户
msater-password=slave_pass #在主服务器上为从服务器建立的帐户的密码
master-connet-retry=30 #设置连接重试间隔,默认为60秒
master-retry-count=100000 #设置重试次数,默认为86400次
注:最后两个选项在网络连接不可靠时设置
重新启动从服务器。从服务器用两个信息源来确定它自已在镜像工作中的进度位置:一个是数据目录中的master.info文件,另一个是启动选项所给定的配置信息。第一次启动从服务器时,master.info文件不存在,从服务器会根据选项文件中给出的各种master-xxx选项值去连接主服务器。一旦连接成功,从服务器会创建一个master.info文件以保存各种连接参数和它自已的镜像工作状态。如果以后再重启从服务器,从服务器会优先读取该文件,而不是选项文件。所以如果你修改了选项文件的内容,想该选项生效就要删除master.info文件并重启从服务器。
以上步骤是镜像所有数据库的操作过程,如果我们想把mysql权限数据保留在主服务器上,排除在镜像机制外的话,可用在选项文件的[mysqld]中加入--binlog-ignore-db=mysql选项,这样,mysql数据库上的操作就不会记录在二进制变更日志里。如要排除其它数据库,只要增加多几个该选项即可。
通过以下几个命令可监控和管理主从服务器:
SLAVE STOP,SLAVE START用于挂起来恢复从服务器上镜像,如当备份时,可用该语句让从服务器暂时停止镜像活动。
SHOW SLAVE STATUS,在从服务器上查看其镜像协调信息,这些信息可以用来判断哪些二进制变更日志已经不再使用。
PURGE MASTER,在主服务器上对二进制变更日志进行失效处理。删除所有从服务器都不再使用的二进制变更日志。
CHANGE MASTER,在从服务器上修改镜像参数。如正在读取主服务器上哪个二进制变更日志,正在写哪个中继日志文件等。
在MySQL4.0.2之后版本中,镜像机制中的从服务器由两个内部线程组成:
一个叫“I/O线程”,负责与主服务器通信,请求主服务器发送二进制变更日志,并把接收到的数据修改命令写入某个中继日志文件;用SLAVE STOP IO_THREAD或SLAVE START IO_THREAD可挂起或恢复该线程。
另一个叫“SQL线程”,负责从中继日志中读取数据修改命令并执行。同理,用SLAVE STOP SQL_THREAD或SLAVE START SQL_THREAD可挂起或恢复该线程。
中继日志文件默认的文件为hostname-relay-bin.nnn和hostname-relay-bin.index。可用从服务器的--relay-log和--relay-log-index选项修改。在从服务器中还有一个relay-log.info中继信息文件,可用--relay-log-info-file启动选项修改文件名。