mysql 主主互备_mysql 主主互备实现

今天星期天,么事就写个MYSQL的主主架构的博客,原理如下图,不是我画的网上找的。

c6c4c7906037e564d41676f019f00da2.png

主机作用操作系统mysql版本对应IPvip数据库

mysqlA(主)centos6.4mysql 5.5.48192.168.48.129192.168.48.126

mysqlB(备)centos6.4mysql 5.5.48192.168.48.132

一: 在每个节点安装mysql数据库:

《1》到官网去下载最新的yum仓库,并安装

yum install mysql-community-server

《2》用第三方yum

1、导入第三方源webtatic

yum remove mysql

mysql-*

3、安装libmysqlclient15

yum install libmysqlclient15

--enablerepo=webtatic

4、安装mysql5.5

yum

install mysql55 mysql55-server --enablerepo=webtatic

《3》安装MariaDB  我这里用的这安装的

1、vi /etc/yum.repos.d/MariaDB.repo  加个文件在yum仓库中[mariabd]

name=MariaDB

baseurl=http://yum.mariadb.org/5.5.48/centos6-x86/

gpgkey=http://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

yum install -y MariaDB-server MariaDB-client  ##安装数据库

service mysql start  ##启动服务

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456";##设置ROOT密码;

update mysql.user set authentication_string=password(‘123456‘) where user=‘root‘ ;##mysql5.7这样更新密码。

flush privileges;##刷新

《4》下面是我安装的数据库的一些信息

a154f80d3b4e21b9244c8c9c7f3d0f26.png

0fca6b853669fa97a22e1d79a77711a6.png

二、 在Mysql上配置my.cnf

《1》配置MysqlA

innodb_file_per_table = on

skip_name_resolve = on

server-id = 1

log-bin = mysql-bin

relay-log = mysql-relay-bin   #单个主从这个可以不写

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

《2》配置MysqlB

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=information_schema.%

注释:

server-id 是节点的标识,主从节点不能相同,必须唯一。

log-bin 表示开启mysql的binlog日志功能。

‘mysql-bin’表示日志文件的名称,也可以叫aa.log 看你自己了,mysql会在名称后面加上数字,mysql-bin.000001、mysql-bin.000002等日志文件

relay-log 用来定义relay-log日志文件

replicate-wild-ignore-table是复制过程过滤选项,可以过滤不需要的数据库和表,例如 ‘mysql.%‘ 表示不复制mysql库

replicate-wild-do_table  明确指定复制那个数据库和表

注意:不要在主库上使用binlog-do-db 或者 binlog-ignore-db 选项,也不要在从库上使用replicate-do-db或者replicate-ignore-db选项,因为这样可能产生跨库更新失败的问题,建    议在从库使用replicate-wild-do-table和replicate-wild-ignore-table连个选项解决复制过滤的问题。

三、 手动同步一次数据,新数据库不用这部分

可以直接锁定  flush tables with read lock; 或者直接关闭数据库打包目录/var/lib/mysql  到从服务器恢复。

tar zcvf /var/lib/mysql.tar.gz  /var/lib/mysql  到备的上面解压。

ea4a4c749bbcc320342e1cab35205b1d.png

c3c5c1c827adafd4a22b4b9f5166cd78.png

在my.cnf  添加read-only=1开启只读  目的都是保证复制前数据都是一样的。

四、配置MysqlA---MysqlB的主从配置

《1》在MysqlA创建复制用户并且授权。

grant replication slave on *.* to [email protected]%‘ identified by ‘www.daxia.help‘;

《2》在B服务器上设置主服务器信息:

change master to \

master_host=‘192.168.48.129‘,

master_user=‘tao‘,

master_password=‘www.daxia.help‘,

master_log_file=‘mysql-bin。000005‘

master_log_pos=405;

087b2180fd061bee49c51c2d1a3f3c39.png

五、配置MysqlB---MysqlA的主从配置

《1》在MysqlA创建复制用户并且授权。

grant replication slave on *.* to [email protected]%‘ identified by ‘www.daxia.help‘;

《2》在A服务器上设置主服务器信息:

change master to \

master_host=‘192.168.48.132‘,

master_user=‘tao‘,

master_password=‘www.daxia.help‘,

master_log_file=‘mysql-bin‘

master_log_pos=106;

50ff7b98806bef06b5a8f039550ae428.png

e1ec9f95e15528c709b3d797590e31a0.png

注意:

我在主上执行了自己同步自己了 要取消用这个命令 change master to master_host=‘ ‘;

9f1b3cfabd821f49fb5690f0d3dcd3ad.png

六:在MysqlA和MysqlB上测试数据的复制情况

23ac665c2f691be49d400919025d22dd.png

ba68e0bb2bf97fecf0f54a5c9e112790.png

《2》在MysqlB上建立库,表和插入数据在MysqlA上查看;

1b89923477666c33e363c2317e944538.png

3ff5a85fad7f8ef68f421d81c5837f7d.png

《3》我在test下面建立了一个表,是不能同步过来的,说明过滤也对的。

七:配置keepalived实现mysql双主高可用。

keepalived 配置主和从的配置就是priority 优先级一个100一个90 从的取消nopreempt选项即可。! Configuration File for keepalived

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 LVS_DEVEL

}

Vrrp_script check_mysqld {

script "/etc/keepalived/check_slave.pl 127.0.0.1"

interval 2

weight 21

}

vrrp_instance HA_1 {

state BACKUP      ###  在MYSQLA和MysqlB上都配置为BACKUP

interface eth0

virtual_router_id 80

priority 100

advert_int 2

nopreempt            ## 不抢占模式,只在优先权高的服务器上设置,优先级第的可以不设置

authentication {

auth_type PASS

auth_pass daxia.help

}

track_script {

check_mysqld

}

virtual_ipaddress {

192.168.48.126

}

}

check_slave.pl脚本如下:#!/usr/bin/perl -w

use DBI;

USE DBD::mysql;

#CONFIG VARIABLES

$SBM = 120;

$db = "IXDBA";

$host = $ARGV[0];

$port = 3306

$user = "root"

$pw = "123456"

#sql query

$squery = "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 = "";

$senconds_behind_master = "";

while (my $ ref = $sqlQuery->fetchrow_hashref()) {

$slave_io_running = $ref->{‘slave_io_running‘};

$slave_sql_running = $ref->{‘slave_sql_running‘};

$senconds_behind_master = $ref->{‘senconds_behind_master‘};

}

$sqlQuery->finish;

$dbh->disconnect();

if ( $slave_io_running eq "NO"|| $slave_sql_running eq "NO" ) {

exit 1;

}else {

if ( $seconds_behind_mater > $SBM){

exit 1;

}else {

exit 0;

}

}

八、进行测试:

《1》登录

bfee0f1aa780db0a1bd0841a84b7770e.png

《2》建立库和表看看各个节点的信息是否正确。

在远程上建立信息:

9f58e2db6490f73dc79a5cf309b86f46.png

在MysqlB和MYSQLA上查看都有信息:

d0cc63b0f3aab4cdd29592c3274f6536.png

《3》把mysqlB弄故障,看切换的正确可行:

80f489a15eec0356f4aaacca3f5e929b.png

经过我尝试七中用perl写的脚本不行,后来换成了八中的shell,有10几秒的时间等待。

八、用shell脚本配置Keepalived,连个就是下面检测自己的ip3306端口就行我贴一个主机的! Configuration File for keepalived

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 LVS_DEVEL

}

vrrp_instance HA_1 {

state BACKUP

interface eth0

virtual_router_id 80

priority 100

advert_int 2

nopreempt

authentication {

auth_type PASS

auth_pass daxia.help

}

virtual_ipaddress {

192.168.48.126

}

virtual_server 192.168.48.126 3306 {        ///检测自己的3306端口不通就执行下面的Mysql.sh脚本重启keepalived服务让vip飘到另外的机器上去

delay_loop 6

lb_algo wrr

lb_kind DR

nat_mask 255.255.255.0

persistence_timeout 50

real_server 192.168.48.129 3306 {

weight 1

notify_down /etc/keepalived/mysql.sh

TCP_CHECK {

connect_timeout 10

nb_get_retry    3

connect_port 3306

}

}

}

mysql.sh脚本如下[[email protected] keepalived]# vi mysql.sh

#!/bin/bash

/etc/init.d/keepalived  stop

sleep 10

/etc/init.d/keepalived  start

我停止mysql 就会触发脚本让vip飘到另外一个机器上下面是keepalive的信息:

ed4f7b055e5c7d7c2627be91869ca50c.png

ee5514203c2fab836f85723f2f0906de.png

fef8b9569bc0979b9ad961198eca8c36.png

配置完成!!!

原文:http://shaonian.blog.51cto.com/2975261/1757212

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值