MYSQL数据库主主同步备份MYSQL+keepalived高可用自动

  简单的说就是把 一个服务器上执行过的sql语句在别的服务器上也重复执行一遍, 这样只要两个数据库的初态是一样的,那么它们就能一直同步。

当然这种复制和重复都是mysql自动实现的,我们只需要配置即可。

数据库主主

  上图中有两个服务器, 演示了从一个主服务器(master) 把数据同步到从服务器(slave)的过程。

  这是一个主-从复制的例子。 主-主互相复制只是把上面的例子反过来再做一遍。 所以我们以这个例子介绍原理。

  对于一个mysql服务器, 一般有两个线程来负责复制和被复制。当开启复制之后。

  1.作为主服务器Master, 会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 (从服务器会负责来读取这个log, 然后在自己那里再执行一遍。)

  2.作为从服务器Slave, 会用master上的账号登陆到 master上, 读取master的Binarylog, 写入到自己的中继日志 Relaylog, 然后自己的sql线程会负责读取这个中继日志,并执行一遍。 到这里主服务器上的更改就同步到从服务器上了。

 

 

 

主从1: 203.18.17.129(vmnet2)

主从2: 203.18.17.130(vmnet2)

VIP: 203.18.17.131

 

 

查看本机IP地址

 

 

监测监本的配置

vim /opt/chk_mysql.sh

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

if [ "${counter}" -eq 0 ]

then

    /etc/init.d/keepalived stop

else

   echo "running..." >> /opt/keepalived-running-info.log

   sleep 5000

fi

 

[root@localhost ~]#  yum -y install  keepalived

keepalived软件包

 

设置开机启动

[root@localhost ~]# chkconfig keepalived on

Keepalived配置文件

[root@localhost ~]# vim /etc/keepalived/keepalived.conf

 

! 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 MySQL-HA

}

 

vrrp_script chk_mysql_port {  #检测mysql服务是否在运行。

        script "/opt/chk_mysql.sh"  #这里通过脚本监测

        interval 2  #脚本执行间隔,每2s检测一次

        weight -5  #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5

        fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)

        rise 1  #检测1次成功就算成功。但不修改优先级

}

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    nopreempt

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        203.18.17.131

    }

track_script {

       chk_mysql_port

    }

 }

 

}

 

 

 

启动keepalived服务

[root@localhost ~]# service keepalived start

正在启动 keepalived:                                      [确定]

 

[root@localhost ~]# ip a

查看VIP地址

 

[root@localhost ~]# yum -y install ipvsadm

安装ipvsadm软件包

 

 

[root@localhost ~]# yum -y install mysql mysql-devel mysql-server

mysql安装

 

启动mysql服务

[root@localhost ~]# service mysqld start

启动mysql服务

 

[root@localhost ~]# cp /usr/share/doc/mysql-server-5.1.71/my-medium.cnf /etc/my.cnf

cp:是否覆盖"/etc/my.cnf"? y

 

[root@localhost ~]# vim /etc/my.cnf

[client]

default-character-set=utf8

 

[mysqld]

default-character-set=utf8

 

设置数据库密码

[root@localhost ~]# mysqladmin -uroot password '123123'

 

建立时间同步环境,在主服务器上安装配置NTP时间同步服务器

 

[root@localhost ~]# yum -y install ntp

 

备份文件

[root@localhost ~]# cp -p /etc/ntp.conf /etc/ntp.conf.origin

 

[root@localhost ~]# vim /etc/ntp.conf

 

手动添加此两行内容

56 server 127.127.1.0

 57 fudge 127.127.1.0 startum 8

 

开启ntp服务

[root@localhost ~]# /etc/init.d/ntpd start

正在启动 ntpd:                                            [确定]

 

开机启动ntp服务

[root@localhost ~]# chkconfig ntpd on

 

在从服务器上同步时间

[root@localhost ~]# yum -y install ntpdate

[root@localhost ~]# ntpdate 203.18.17.129

 9 Aug 23:31:03 ntpdate[52482]: no server suitable for synchronization found

 

注意:主从mysql尽量保证版本相同

 

配置mysql 主从1服务器

[root@localhost ~]# vim /etc/my.cnf

56 log-bin=mysql-bin

  57 log-slave-updates=true   #手动添加,开启从日志

65 server-id      =11

 

参数说明:

l  log-bin 开启二进制日志

l  server-id 设置server-id

l  character-set-server 修改字符集为utf8

l  binlog-do-db=mydatabase  只同步哪些数据库,除此之外,其他不同步

 

重启mysql服务

[root@localhost ~]# /etc/init.d/mysqld restart

停止 mysqld:                                              [确定]

正在启动 mysqld:                                          [确定]

 

创建数据库同步用户,并授予相应的权限

[root@localhost ~]# mysql -uroot -p123123

mysql> grant replication slave on *.* to 'myslave'@'203.18.17.130'identified by '123123';

Query OK, 0 rows affected (0.00 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

查看master状态

 

mysql> show master status;

master状态

 

执行同步SQL语句,参照MASTER配置:

mysql> change master to master_host='203.18.17.129',master_user='myslave',master_password='123123',master_log_file='mysql-bin.000004',master_log_pos=345;

Query OK, 0 rows affected (0.03 sec)

注意:主从2上已经创建数据库同步用户,并授予相应的权限在执行同步SQL语句。

 

 

启动slave同步进程

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

 

查看slave状态

mysql> show slave status \G;

slave状态

 

ip

 

 

 

 

 

监测监本的配置

vim /opt/chk_mysql.sh

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

if [ "${counter}" -eq 0 ]

then

    /etc/init.d/keepalived stop

else

   echo "running..." >> /opt/keepalived-running-info.log

   sleep 5000

fi

 

 

[root@localhost ~]#  yum -y install  keepalived

 

 

keepalived软件包

 

设置开机启动

[root@localhost ~]# chkconfig keepalived on

Keepalived配置文件

[root@localhost ~]# vim /etc/keepalived/keepalived.conf

 

! 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 MySQL-HA

}

 

vrrp_script chk_mysql_port {  #检测mysql服务是否在运行。

        script "/opt/chk_mysql.sh"  #这里通过脚本监测

        interval 2   #脚本执行间隔,每2s检测一次

        weight -5  #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5

        fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)

        rise 1   #检测1次成功就算成功。但不修改优先级

}

 

 

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    lvs_sync_daemon_inteface eth0

    virtual_router_id 51

    mcast_src_ip 203.18.17.130

    priority 90

    advert_int 1

    nopreempt

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        203.18.17.131

    }

track_script {

       chk_mysql_port

    }

 }

 

}

 

启动keepalived服务

[root@localhost ~]# service keepalived start

正在启动 keepalived:                                      [确定]

 

[root@localhost ~]# ip a

ip地址

 

[root@localhost ~]# yum -y install ipvsadm

安装ipvsadm

 

 

[root@localhost ~]# yum -y install mysql mysql-devel mysql-sever

安装数据库mysql

 

启动mysql服务

[root@localhost ~]# service mysqld start

正在启动 mysqld:                                          [确定]

 

[root@localhost ~]# cp /usr/share/doc/mysql-server-5.1.71/my-medium.cnf /etc/my.cnf

cp:是否覆盖"/etc/my.cnf"? y

 

[root@localhost ~]# vim /etc/my.cnf

[client]

default-character-set=utf8

 

[mysqld]

default-character-set=utf8

 

设置数据库密码

[root@localhost ~]# mysqladmin -uroot password '123123'

 

配置服务器

[root@localhost ~]# vim /etc/my.cnf

[mysqld]

server-id      =12

log-bin=mysql-bin

relay-log=relay-bin

relay-log-index=slave-relay-bin.index

 

重启mysql服务

[root@localhost ~]# /etc/init.d/mysqld restart

停止 mysqld:                                              [确定]

正在启动 mysqld:                                          [确定]

 

[root@localhost ~]# mysql -uroot -p123123

 

创建数据库同步用户,并授予相应的权限

mysql> grant replication slave, replication client on *.* to 'repl'@'203.18.17.129' identified by '123123';

Query OK, 0 rows affected (0.00 sec)

 

刷新授权表信息

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

查看master状态

mysql> show master status;

master状态

 

执行同步SQL语句,参照MASTER配置:

mysql> change master to master_host='203.18.17.129',master_user='myslave',master_password='123123',master_log_file='mysql-bin.000004',master_log_pos=345;

Query OK, 0 rows affected (0.03 sec)

注意:主从1上已经创建数据库同步用户,并授予相应的权限在执行同步SQL语句。

 

 

启动slave同步进程

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

 

查看slave状态

mysql> show slave status \G;

slave状态

 

 

创建一个新库,测试结果创建新库auth两个已经备份

测试mysql数据库备份

 

 

在129数据库里面创建新的数据库dada,在130数据库里面也出现了说明备份成功。

测试mysql数据库备份

 

 

 

203.18.17.129服务器

主VIP测试

关闭keepalived服务造成故障

[root@localhost ~]# service keepalived stop

 

看一下203.18.17.130服务器VIP有没有过来

主VIP测试

 

成功VIP地址自动转移




相关文章:



集群LVS-DR+keepalived高可用集群双VIP地址


nginx+Keepalived双机热备高可用集群自动切换


nginx+keepalived双机热备高可用负载均衡集群



猜你喜欢

转载自www.cnblogs.com/mysql-sql/p/11018460.html