mysql模式:master/slave(二)

来源:互联网 发布:中控网络考勤机 编辑:程序博客网 时间:2024/05/28 05:16
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----