您的位置:首页 > 数据库 > MySQL

mysql模式:master/slave

2012-03-08 18:45 495 查看
author:skate

time:2012/03/08

MySQL高可用解决方案

1.主备模式:master/slave

2.级联主备模式:A->B->C

3.mysql双主MMM模式

4.hearbeat/san,hearbeat/BRBD模式

5.NDB cluster模式



参考:http://ourmysql.com/archives/758



这里只讲配置,具体的适合应用场景稍后在详述

1.主备模式:master/slave

A.master可以停机配置slave

B.master不允许停机配置slave

C.添加/删除slave

D.常用的维护与诊断手册

A.master可以停机(停止更新)配置slave

通过"load data from master"语句把master主服务器的数据copy到slave从服务器上,但是这个语句使用是有前提条件的;

一个是只对myisam表起作用,第二是该语句将会获得全局的读锁,禁止master主库的任何更新,当然热备份就不会有全局

读锁了。

mysql的复制基本原理是master对数据库的更新存入master的二进制日志文件里,slave通过读master的二进制日志来完成master和slave的主从同步的。整个同步过程需要三个线程来完成

master有一个io线程:负责将master的二进制日志发送到slave

slave有一个io线程和一个sql线程:slave的I/O线程读取master的Binlog Dump线程发送的内容并将该数据拷贝到slave的

数据目录中的本地文件中,即中继日志。slave的sql线程用于读取中继日志并执行日志中包含的更新。



在复制的环境中用到的文件

master的文件:

1.二进制文件

二进制文件最好放在单独的目录下,这不但对方便优化、更方便维护。重新命名二进制日志很简单,只需要修改[mysqld]里的

log_bin选项,这里有一点需要注意,如下例子:

log_bin=/home/mysql/binlog/binlog.log

[root@localhost ~]# ll /home/mysql/binlog

total 8

-rw-rw---- 1 mysql mysql 98 Mar 7 17:24 binlog.000001

-rw-rw---- 1 mysql mysql 33 Mar 7 17:24 binlog.index

[root@localhost ~]#

从上面的例子可以看到,我要重新调整logbin的路径为“/home/mysql/binlog”,但我log_bin的设置却有些不同

这里需要注意两点

1).目录的文件夹命名不能有空格

2).指定目录时候一定要以*.log结尾,即不能仅仅指定到文件夹的级别,否则在重启mysql时会报错。

2.错误日志

错误日志对于诊断问题非常重要,第一个要看的就应该是这个文件,类似oracle的alertlog文件。

它的默认路径是“log-error=/var/log/mysqld.log”。



slave文件

1.中继日志文件(包括中继日志索引文件)

中继日志文件和master的二进制文件格式一样,也应该单独维护它,把它单独放在一个目录下,可以通过如下两个参数修改

--relay-log=file_name

--relay-log-index=file_name

和中继日志有关的几个参数

--max-relay-logs-size=size

定义中继日志的大小

--relay-log-info-file=file_name

从服务器用于记录中继日志相关信息的文件名。默认名为数据目录中的relay-log.info。

--relay-log-purge={0|1}

是否自动清空不再需要中继日志时。默认值为1(启用)。这是一个全局变量,可以用SET GLOBAL Relay_log_purge动态更改。

3.master.info和relay-log.info两个状态文件

这两个文件都是保存在硬盘上的,服务器异常不会丢失的

master.info:

在slave重启时,读取这个文件以确定它已经从主服务器读取了多少二进制日志,默认名字是数据目录下master.info,若要修改其文件名,通过参数 “--master-info-file=file_name”

relay-log.info:

在slave重启时,读取这个文件以确定它已经处理了多少二进制日志,默认名字是数据目录下relay-log.info,若要修改其文件名,通过参数“--relay-log-info-file=file_name”

4.错误日志

这个和master一样,参考上面,这里就不说了

5.二进制日志

当做级联复制时,二进制文件也会启用,和master类似。



停机master复制配置的步骤

1)确定主从服务器的版本,最好版本一样

2)在master服务器上建立一个复制用户并授权,用户slave服务器连接取log用。

3)配置主master,并为slave服务器准备master的备份数据

4)配置slave服务器

5)严重配置是否正确



1)确定主从服务器的版本,最好版本一样

在主从库上运行如下语句,检查版本是否一致

mysql> select version();

2)在master服务器上建立一个复制用户并授权,用户slave服务器连接取log用。

创建复制用户:

mysql> grant replication slave on *.* to 'rep2'@'%' identified by 'rep2';

Query OK, 0 rows affected (0.04 sec)

3)配置主master,为slave服务器准备master的备份数据

master的my.cfg文件

[mysqld]

server-id=1

log_bin=/home/mysql/binlog/binlog.log

binlog-do-db=backup //需要同步的数据库,默认是所有的数据库都同步

#binlog-ignore-db = mysql //忽略此数据库同步,不记录到binlog里

#binlog-ignore-db = skate //忽略此数据库同步,不记录到binlog里

以上的配置没有考虑双master模式



获得全局读锁

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

记录master的日志名和偏移量后

mysql> show master status;

这个时候可以用tar创建了数据库的快照或者关闭mysql直接copy数据文件

[root@localhost mysql]# tar -cvf /tmp/backup-snap.tar ./backup

./backup/

./backup/tt.frm

./backup/right_table.frm

./backup/tt.MYI

./backup/t1.MYD

./backup/t2.frm

./backup/t5.frm

./backup/t1.MYI

./backup/t5.MYD

./backup/db.opt

./backup/t1.frm

./backup/tt.MYD

./backup/left_table.frm

./backup/t5.MYI

注意:如果有innodb表的话,还要打包表空间”ibdata1“。



master服务器上重新启用更新

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

把归档文件传送到salve服务器,然后解压缩文件到slave的数据目录下

[root@localhost mysql]# tar -xvf /tmp/backup-snap.tar

4)配置slave服务器

这个时候mysql应该是停止的

[mysqld]

server-id=2 //不能和master一样

master-host=192.168.211.127 //配置master的ip

master-port=3306 //配置master的端口号

master-user=rep2 //连接到master的复制用户

master-password=rep2 //连接到master的复制用户密码

master-connect-retry=60 //在master宕机或连接丢失的情况下,slave线程重新尝试连接master之前睡眠的秒数,默认60s

logs-warnings //记录更详细的错误信息

read-only //该选项让slave只允许来自slave线程或具有SUPER权限的用户的更新。可以确保slave的数据一致性。

relay-log-purge=0 //默认值为1,自动清空不需要的rely-log;最好自己定制清空策略

replicate-do-db=backup //只复制backup数据库

skip-slave-start //在第一次配置要使用这个,slave启动时不启动从服务器线程

auto_increment_offset=2 //AUTO_INCREMENT列值的起点,影响到在复制设置中可以有多少主服务器

auto_increment_increment=1 //控制列值增加的间隔



启动mysql服务

[root@localhost mysql]# service mysqld start

以刚才master的binlog位置启动slave

mysql> change master to master_log_file='binlog.000001', master_log_pos=395;

mysql> start slave;

5)严重配置是否正确

然后在主库创建表,在从库查看,并观察错误log



---end----
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: