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

mysql模式:master/slave(二)

2012-03-12 16:59 567 查看
author:skate

time:2012/03/12


B.master不允许停机配置slave



如果master允许停止服务的话,创建slave那很简单;但如果要不影响master的服务,如何创建slave呢?我们可以用热备master,然后把备份传递到slave上,这样就可以在线创建slave了。这种方式也是我们实际工作中最常用的方式。

1) master开logbin模式

2) master采用innobackupex热备mysql库(myisam、innodb表)

3) 配置slave

4) 把备份集传递到slave端恢复,并根据主库的备份时间点的logbin位置启动slave库

5) 检测master/slave的replication是否正常

1) master开logbin模式

二进制文件最好放在单独的目录下,这不但对方便优化、更方便维护。重新命名二进制日志很简单,只需要修改[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.1).目录的文件夹命名不能有空格

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

2) master采用innobackupex热备mysql库(myisam、innodb表)

在master端创建full_backup

[root@localhost ~]# innobackupex --user root -password skate /tmp/xtrabackup/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy

and Percona Inc 2009-2012. All Rights Reserved.

This software is published under

the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

........

xtrabackup: Stopping log copying thread..

xtrabackup: Transaction log of lsn (0 48672) to (0 48672) was copied.

120312 15:08:35 innobackupex: All tables unlocked

120312 15:08:35 innobackupex: Connection to database server closed

innobackupex: Backup created in directory '/tmp/xtrabackup/2012-03-12_15-08-02'

innobackupex: MySQL binlog position: filename 'ON.000008', position 98

120312 15:08:35 innobackupex: completed OK!

[root@localhost ~]#



产生如下文件(xtrabackup_binlog_info很重要,slave启动位置以此文件为主)

[root@localhost ~]# ll /tmp/xtrabackup/2012-03-12_15-08-02

total 75908

drwxr-xr-x 2 root root 4096 Mar 12 15:08 backup

drwxr-xr-x 2 root root 4096 Mar 12 15:08 backup1

drwxr-xr-x 2 root root 4096 Mar 12 15:08 backup2

drwxr-xr-x 2 root root 4096 Mar 12 15:08 backup.bak

drwxr-xr-x 2 root root 4096 Mar 12 15:08 backup.bak1

-rw-r--r-- 1 root root 351 Mar 12 15:08 backup-my.cnf

-rw-r--r-- 1 root root 77594624 Mar 12 15:08 ibdata1

drwxr-xr-x 2 root root 4096 Mar 12 15:08 mysql

drwxr-xr-x 2 root root 4096 Mar 12 15:08 test

drwxr-xr-x 2 root root 4096 Mar 12 15:08 test1

-rw-r--r-- 1 root root 13 Mar 12 15:08 xtrabackup_binary

-rw-r--r-- 1 root root 15 Mar 12 15:08 xtrabackup_binlog_info

-rw-r--r-- 1 root root 79 Mar 12 15:08 xtrabackup_checkpoints

-rw-r--r-- 1 root root 2560 Mar 12 15:08 xtrabackup_logfile

[root@localhost ~]#

3) 配置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 //控制列值增加的间隔

4) 把备份集传递到slave端恢复,并根据主库的备份时间点的logbin位置启动slave库

备份集copy到slave端目录“/tmp/xtrabackup1/”,然后执行如下恢复

[root@localhost ~]# innobackupex --user=root --password=skate --copy-back /tmp/xtrabackup1/



启动mysql服务

[root@localhost mysql]# service mysqld start

以刚才”xtrabackup_binlog_info“的binlog位置启动slave

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

mysql> start slave;

5) 检测master/slave的replication是否正常

master:

mysql> show master logs;

mysql> show master status \G;

mysql> show processlist\G;

# more /var/log/mysqld.log

slave:

mysql> show processlist\G;

mysql> show slave status\G;

# more /var/log/mysqld.log

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





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