mysql双主互备

一、安装mysql

各种方式太多了

二、摘录自:https://linux.cn/thread-14135-1-1.html

1)首先在DB1上my.cnf 中[mysqld] 字段中添加如下内容:
server-id = 1 //数据库ID号, 为1时表示为Master,其中master_id必须为1到232–1之间的一个正整数值;
log-bin=mysql-bin //启用二进制日志; 
relay-log=mysql-relay-bin  //用来定义relay-log日志文件命名格式
replicate-wild-ignore-table=mysql.%                           //replicate-wild-ignore-table是个过滤复制选项,可以过滤不需要复制的数据库
replicate-wild-ignore-table=test.%                             //mysql.%表示不复制mysql库下的所有对象
replicate-wild-ignore-table=infomation_schema.%    //与此对应的是/replicate-wild-do-table,用来指定需要复制的数据库或表

//这里需要注意的是,不要在主库上使用binlog-do-db或binlog-ignore-db选项,也不要在从库上使用replicate-do-db或replicate-ignore-db选项;因为这样可能产生跨库更新失败的问题。
//推荐从库上使用replicate-wild-ignore-table和replicate-wild-do-table两个选项来解决复制过滤问题。

2)然后修改DB2上mysql配置文件my.cnf 
server-id = 2 
log-bin=mysql-bin 
relay-log=mysql-relay-bin  
replicate-wild-ignore-table=mysql.%                       
replicate-wild-ignore-table=test.%                          
replicate-wild-ignore-table=infomation_schema.%

3)手动同步数据库
//如果DB1上已有数据,那么在执行主主互备之前,需要将DB1和DB2上的两个mysql的数据保持同步,首先在DB1上备份mysql数据,执行如下sql语句:
mysql>FLUSH TABLES WITH READ LOCK;   //注意,执行完这个命令后,不要退出这个终端,否则这个锁就失效了。
#cd /var/lib
#tar zcvf mysql_bak.tar.gz mysql
#scp mysql_bak.tar.gz DB2:/var/lib   //将数据传到DB2后,依次重启DB1和DB2上的MySQL

4)创建复制用户,并授权
mysql>grant replication slave on *.* to [email protected] identified by ‘repl_user‘ ;
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |   106   |       |         |
+------------------+----------+--------------+------------------+

a)然后在DB2上将DB1设为自己的主服务器,操作如下:
mysql>CHANGE MASTER TO MASTER_HOST=‘192.168.1.11‘,MASTER_USER=‘repl_user‘, MASTER_PASSWORD=‘repl_user‘,MASTER_LOG_FILE=‘mysql-bin.000001‘,MASTER_LOG_POS=106; 
//注意,MASTER_LOG_FILE和MASTER_LOG_POS两个选项,这两个选项的值刚好是在DB1上通过show master status查询到的结果;

b)接着就可以在DB2上启动slave服务了,sql命令如下:
mysql>start slave;
//可通过sql语句 show slave status\G; 查询DB2上slave的运行状态详细信息;

到这里,从DB1到DB2的MySQL主从复制就已经完成。接下来开始配置从DB2到DB1的MySQL主从。

5)首先在DB2上创建复制用户;
mysql>grant replication slave on *.* to [email protected] identified by ‘repl_user‘ ;
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |   106   |       |         |
+------------------+----------+--------------+------------------+

a)然后在DB1上将DB2设为自己的主服务器,操作如下:
mysql>CHANGE MASTER TO MASTER_HOST=‘192.168.1.22‘,MASTER_USER=‘repl_user‘, MASTER_PASSWORD=‘repl_user‘,MASTER_LOG_FILE=‘mysql-bin.000001‘,MASTER_LOG_POS=106; 
//注意,MASTER_LOG_FILE和MASTER_LOG_POS两个选项,这两个选项的值刚好是在DB1上通过show master status查询到的结果;

b)接着就可以在DB1上启动slave服务了,sql命令如下:
mysql>start slave;
//可通过sql语句 show slave status\G; 查询DB1上slave的运行状态详细信息;

至此,MySQL双主互备模式的主从复制就已配置完毕。

6)配置keepalived实现MySQL双主高可用
在进行高可用配置之前,首先需要在DB1和DB2上安装keepalived软件。关于keepalived安装,这里就不在详细说明,直接进入keepalived配置过程。
a)下面是DB1服务器上/etc/keepalived/keepalived.conf文件的内容:
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id MySQLHA_DEVEL
}

vrrp_script check_mysqld {
    script "/etc/keepalived/mysqlcheck/check_slave.pl 127.0.0.1"  #检测MySQL复制状态的脚本
    interval 2
    weight  21
    }

vrrp_instance HA_1 {
    state BACKUP        #在DB1上和DB2上都设置为BACKUP
    interface eth0
    virtual_router_id 80
    priority 100
    advert_int 2
    nopreempt        #不抢占模式,只在优先级高的机器上设置即可;优先级低的可不用设置。

authentication {
        auth_type PASS
        auth_pass 1111
    }

track_script {
    check_mysqld
    }

virtual_ipaddress {
        192.168.1.33/24 dev eth0        #MySQL的对外服务IP,即VIP。
    }
}

其中,/etc/keepalived/mysqlcheck/check_slave.pl文件的内容如下:
#!/usr/bin/perl -w
use DBI;
use DBD::mysql;

#config variables
$SBM = 120;
$db = "hamysql"
$host = $ARGV[0];
$port = 3306;
$user = "root";
$pw = "root"

#SQL Query
$query = "show slave status";

$dbh = DBI->connect("DBI:mysql:$db:$host:$port",$user,$pw,{ RaiseError => 0,PrintError => 0 });

if(!defined($dbh)) {
    exit 1;
}

$sqlQuery = $dbh->prepare($query);
$sqlQuery->execute;

$Slave_IO_Running = "";
$Slave_SQL_Running = "";
$Seconds_Behind_Master = "";

while (my $ref = $sqlQuery->fetchrow_hashref()) {
    $Slave_IO_Running = $ref->{‘Slave_IO_Running‘};
    $Slave_SQL_Running = $ref->{‘Slave_SQL_Running‘};
    $Seconds_Behind_Master = $ref->{‘Seconds_Behind_Master‘};
}

$sqlQuery->finish;
$dbh->disconnect();

if (  $Slave_IO_Running eq "No" || $Slave_SQL_Running eq "No" ) {
    exit 1;
}else {
    if ( $Seconds_Behind_Master > $SBM ) {
        exit 1;
    }else {
        exit 0;
    }
}

//这是用Perl写的检测mysqlMySQL复制状态脚本,只需修改文件中的MySQL数据库、数据的端口号、用户名和密码可直接使用;并且要保证此文件有可执行权限。

b)接着将DB1上的keepalived.conf文件和check_slave.pl文件拷贝到DB2上对应的位置。
并修改DB2上的keepalived.conf文件中的priority值为80,由于配置的是不抢占模式,因此,还需去掉nopreempt选项。
在完成配置后,分别在DB1上和DB2上启动keepalived服务,在正常情况下VIP地址应该运行在DB1上。

三、注意点

如果mysql是拷贝的  那么uuid会有问题 需要修改,找到my.cnf中datadir所指目录,修改auto.cnf中service-uuid的值。

时间: 2024-10-19 12:13:05

mysql双主互备的相关文章

MySQL双主互备模式架构

MySql双主互备架构模式 操作系统 CentOS 6.3 MySql版本 mysql-5.0.56 keepalived keepalived-1.1.19.tar.gz Master DB1配置文件 修改MySql 配置文件  /etc/my.cnf 增加以下段落 [mysqld] server-id=1    节点标示 log-bin=mysql-bin   开启mysql的binlog日志功能 relay-log = mysql-relay-bin  用来定义日志文件命名格式 repli

MariaDB、MySQL双主互备模型同步数据

MySQL双主互备即两台MySQL服务器同时是主服务器,而同时又是对方的从服务器,这样可以分担主服务器的一部分写请求,因为如果是单主模型的话数据写入只能写入在一台MySQL服务器,而双主模型则可同时写在两台服务器上,有效加快了写入的速度,而且还能提供数据的备份功能. 环境如下: server1:CentOS 6.5 x86_64 mariadb 10.0.10 IP:192.168.10.204 server2:CentOS 6.5 x86_64 mariadb 10.0.10  IP:192.

Mysql双主互备+keeplived高可用架构(部分)

一.Mysql双主互备+keeplived高可用架构介绍 Mysql主从复制架构可以在很大程度保证Mysql的高可用,在一主多从的架构中还可以利用读写分离将读操作分配到从库中,减轻主库压力.但是在这种架构中,主库出现故障时需要手动将一台从库提升为主库.在对写操作要求较高的环境中,主库故障在主从架构中会成为单点故障.因此需要主主互备架构,避免主节点故障造成写操作失效. 在双主互备的架构中,每台Mysql都充当主服务器,同时充当对方的从服务器.在任意一台服务器上的写操作都会被复制到另一台服务器上,从

企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)

前言: 原理与思想 这里选用GTID主从复制模式Mysql主从复制模式,是为了更加确保主从复制的正确性.健康性与易配性.这里做的是两服务器A,B各有Mysql实例3310,两个实例间互为主从 主从复制模式采用GTID主从复制模式,在服务器A,B上配置keepalived负载均衡,通过VIP连接数据库,目的是一旦有某数据库宕机,keepalived 就会立即建VIP执行另外一台 健康的数据库实例上,实现快速切换,避免单点故障,从而保证业务的正常运行. 这里只做了 双主+keepalived  ,

[Mysql高可用]——双主互备+keepalived

实验架构图    实验环境 主机名 操作系统 Mysql版本 keepalived版本 主机IP VIP lyj1(Master/Slave) Red Hat release 6.5 Mysql5.6.31 keepalived-1.2.12 10.0.100.201 10.0.100.220 lyj2(Slave/Master) Red Hat release 6.5 Mysql5.6.31 keepalived-1.2.12 10.0.100.202 构建双主互备 1. 分别修改DB1和DB

Mysql5.7.22+Keepalived双主互备高可用集群

DB1:192.168.254.128DB2:192.168.254.129配置前进行校时操作#安装ntpdate工具yum install ntpdate -y#使用ntpdate校时(后面的是ntp服务器)ntpdate pool.ntp.org 配置mysql双主备 安装数据库链接(在主页数据库里面可以看到)http://blog.51cto.com/10158955/1926574 DB1修改配置文件(需重启)vi /etc/my.cnf#在[mysqld]添加server-id=166

​Keepalive实现mysql双主热备

Keepalive实现mysql双主热备 环境描述: OS: CentoOS6.6_X64 Node1:172.16.10.1 Node2:172.16.10.2 VIP:172.16.10.10 1.配置主机互信 Node1: [[email protected]~]# ifconfig eth0 eth0      Link encap:Ethernet  HWaddr 00:0C:29:11:21:56            inet addr:172.16.100.1  Bcast:17

Keepalived+nginx双主互备模型实现

Keepalived双主互备模型实现 实验拓扑概述 本次实验所涉及的系统发行版本为:CentOS6.6-64bit:内核版本:2.6.32-504.el6.x86_64 (nod1)Nginx代理1:配置有nginx服务,向外部宣称一个公网ip接收外部客户端请求,网卡eth0桥接模式,配置有内网ip172.16.13.11:eth1(1.1.1.2/24)仅主机模式,模拟与出口路由器通信接口,nod1为VIP1的MASTER时,VIP(1.1.1.100/32)配置于eth1的别名eth1:1上

keepalived双主互备和自定义日志

自定义日志: keepalived的日志默认存储在/var/log/messages 有时我们会有需要将keepalived日志拿出来单独分析,那么这就需要我做自己去定义 /etc/sysconfig/keepalived #编辑keepalived的环境配置文件 KEEPALIVED_OPTIONS="-D -d -S 0" #修改内容 # --dump-conf -d  导出配置数据 # --log-detail -D  详细日志信息 # --log-facility -S  设置