• 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 repl_user@192.168.1.22 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 statusG; 查询DB2上slave的运行状态详细信息;

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

    5)首先在DB2上创建复制用户;
    mysql>grant replication slave on *.* to repl_user@192.168.1.11 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 statusG; 查询DB1上slave的运行状态详细信息;

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

    6)配置keepalived实现MySQL双主高可用
    在进行高可用配置之前,首先需要在DB1和DB2上安装keepalived软件。关于keepalived安装,这里就不在详细说明,直接进入keepalived配置过程。
    a)下面是DB1服务器上/etc/keepalived/keepalived.conf文件的内容:
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       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的值。

  • 相关阅读:
    面试时面试官想要听到什么答案(关于一些vue的问题)
    Redis主从复制以及主从复制原理
    当面试官问你:如何进行性能优化?
    swoole通往大神之路——swoole任务中心说明及进程任务架构搭建
    全局句柄表
    句柄表(私有句柄表)
    关于VAD的两种内存隐藏方式
    通过修改VAD属性破除锁页机制
    R3环申请内存时页面保护与_MMVAD_FLAGS.Protection位的对应关系
    利用内存锁定技术防止CE修改
  • 原文地址:https://www.cnblogs.com/orangeNo5/p/5038448.html
Copyright © 2020-2023  润新知