Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1457380
  • 博文数量: 122
  • 博客积分: 340
  • 博客等级: 一等列兵
  • 技术积分: 2967
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-01 11:50
个人简介

斑竹网络专注为中小企业客户提供以管理服务为核心的IT全方位服务 https://www.sysadm.cn

文章分类

全部博文(122)

文章存档

2018年(2)

2017年(1)

2015年(2)

2014年(30)

2013年(81)

2011年(5)

2009年(1)

分类: Mysql/postgreSQL

2013-11-25 10:50:25

 MySQLreplication双向备份配置

(整理时间:2010-6-1)

(环境:redhat as 4 Mysql 5.1.0)

一、 设置A服务器

编辑/usr/local/mysql/etc/my.cnf文件,在mysqld块里添加如下内容:

log-bin=/jongo/mysql/logs/mysql-bin

server-id       = 2

binlog-do-db=bbscs8    这里的binlog-do-db是用来设置可以被slave服务器同步的数据

库名称

binlog-do-db=bdt

binlog-do-db=adsense

binlog-do-db=bdt_bbs

binlog-do-db=bdt_help

master-host     =   192.168.2.7   备份192.168.2.7上的数据库,即这台做为备机的需要备份的数据库的主机器地址

master-user     =  backup     上面机器上设置的,用来同步的用户名胜古迹

master-password = 17buybackup@#$  

master-port     =  3306

master-connect-retry = 60

replicate-do-db = jongo17buy      要用主服务器上同步过来的数据库的名称

log-slave-updates

grant replication slave on *.* to 'backup'@'192.168.2.%' identified by 'bdtbackup@#$'; 

给同步添加一个用户

二、 设置B服务器

server-id       = 1

binlog-do-db= jongo17buy 这里的binlog-do-db是用来设置可以被slave服务器同步的数据

库名称

master-host     =   192.168.2.5   备份192.168.2.7上的数据库,即这台做为备机的需要备份的数据库的主机器地址

master-user     =  backup     上面机器上设置的,用来同步的用户名胜古迹

master-password = bdtbackup@#$  

master-port     =  3306

master-connect-retry = 60

replicate-do-db = bbscs8      要用主服务器上同步过来的数据库的名称

replicate-do-db = bdt

replicate-do-db = adsense

replicate-do-db = bdt_bbs

replicate-do-db = bdt_help

log-slave-updates

grant replication slave on *.* to 'backup'@'192.168.2.%' identified by '17buybackup@#$';

三、 两个服务器上

在两个服务器上,将要同步的数据库分别在各的备机手工同步或重新导入一下。

然后,分别启动 mysql> start slave 

四、 同步监控脚本

mysql_monitor.sh文件

#!/bin/bash

. /root/.bash_profile

. /jongo/shell/contact_config.sh

MYSQL_PASSWD="admin8*"

IO_RUNING=`echo "show slave status \G;" |mysql -uroot -p$MYSQL_PASSWD |grep "Slave_IO_Running" |awk -F ":" '{ print $2 }'`

SQL_RUNING=`echo "show slave status \G;" |mysql -uroot -p$MYSQL_PASSWD |grep "Slave_SQL_Running" |awk -F ":" '{ print $2 }'`

SQL_ERROR=`echo "show slave status \G;" |mysql -uroot -p$MYSQL_PASSWD |grep "Last_SQL_Error" |awk -F ":" '{ print $2 }'`

echo "io_status=\"$IO_RUNING\"" >/jongo/shell/tmp.txt

echo "sql_status=\"$SQL_RUNING\"">>/jongo/shell/tmp.txt

echo "sql_error=\"$SQL_ERROR\"">>/jongo/shell/tmp.txt

. /jongo/shell/tmp.txt

if [ "$io_status" != " Yes" -o "$sql_status" != " Yes" ]

    then

        echo "17buymysql数据库的slave(203.156.192.29) "`date "+%Y-%m-%d %H:%m:%S"`"发生错误:">/jongo/shell/mysql_monitor.log

     echo "请立即检查,谢谢!" >>/jongo/shell/mysql_monitor.log

     echo "slave 服务器的状态如下:">>/jongo/shell/mysql_monitor.log

     echo "show slave status \G;" |mysql -uroot -p$MYSQL_PASSWD >>/jongo/shell/mysql_monitor.log

     for email in $contact_email

      do

        mail -s "mysql slave on 17buy was false" $email 

         done

fi

contact_config.sh文件

contact_email=

五、 常见问题

a. 出现Error initializing relay log position: Could not find target log during relay log initialization,Error_code: 1593错误

~  这个一般是由于在mysql数据库的数据目录下找不到localhost-relay-bin.***文件导致的,可以用类似下列语句来调整:

CHANGE MASTER TO

    ->    MASTER_HOST='192.168.2.5’,

    ->    MASTER_USER='backup',

    ->    MASTER_PASSWORD='./bdtbackup@#$',

    ->    MASTER_PORT=3306,

    ->    MASTER_LOG_FILE='master2-bin.001',

    ->    MASTER_LOG_POS=4,

    ->    MASTER_CONNECT_RETRY=10,CHANGE MASTER TO

    ->    RELAY_LOG_FILE='./slave-relay-bin.006',

    ->    RELAY_LOG_POS=4025;

   注意:

这里指定的文件路径是绝对路径,如果要用相对路径一定要用./filename形式,否报找不到对应的文件错误;

b. 出现Slave I/O: error connecting to master 'backup@192.168.2.5:3306' - retry-time: 60  retries: 86400, Error_code: 1045 错误:

出现这个错误可能有:

1) 用户的权限不对;

2) 主服务器不上连接,如防火墙没有打开相应的端口;

3) 从服务器上的RELAY_LOG_POS的值不对,可以用上面的CHANGE MASTER TO语句来调整

c. 同步出错处理

当服务器同步出错了,可以有以下两种方法来处理它:

(a) 如果只是数据更新或者插入错误,而且对将来的影响不是很大,这个数据可以不要时,可以:
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1:
将这条出错的查询跳掉就可以了,然后:
start slave; 重启同步过程就可以了

(b) 另外的方法是 :当服务器出现严重的问题时可以:
stop slave 
然后用其他软件手动同步一下,然后再主机上:
show master status;
查到master_log_filemaster_log_pos,然后再从机器上:
change master to master_log_file='mysql-bin.000007',master_log_pos=261836644 ;
start slave 
就有可以同步了

阅读(1182) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~