mysql 主从 keepalived_MySQL之双向主从加keepalived高可用

最近在做MySQL数据库的双向主从,了解到keepalived能够自动判断并切换到可用数据库,自己试了一下,整理出文档来。

先声明一下环境

iptables开启3306端口或者关掉,关闭selinux

MySQL-01:192.168.204.138

MySQL-02:192.168.204.139

VIP:192.168.204.200             #web服务器连接的ip,自己可以使用工具连接试一下。

MySQL的安装过程就略过了,根据个人情况自己安装即可。

1.修改数据库的配置文件/etc/my.cnf:

1.1修改MySQL-01的数据库文件,在[mysql]下添加如下内容server_id = 1

log_bin = mysql-bin

1.2修改MySQL-02的数据库文件,在[mysql]下添加如下内容server_id = 2

log_bin = mysql-bin

2.搭建单向主从

2.1在MySQL-01上

2.1.1操作授权mysql -u root -p            #输入密码

mysql> grant replication slave on *.* to 'slave'@'192.168.204.139' identified by '123456';

mysql> flush privileges;

2.1.2数据传递给MySQL-02mysql -u root -p            #输入密码

flush tables with read lock;        #锁表操作

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000012 |      120 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

mysqldump -u root -p --all-databases > mysqldump.sql

mysql -u root -p

mysql> unlock tables;

mysql> quit

scp myqsldump.sql 192.168.204.139:/root/

2.2在MySQL-02上操作

2.2.1恢复数据库数据mysql -u root -p 

2.2.2建立主从同步mysql -u root -p

mysql> change master to master_host='192.168.204.138',master_user='slave',master_password='123456',master_log_file='mysql-bin.000012',master_log_pos=120,master_port=3306;

start slave;

检查是否成功show slave status\G;Slave_IO_Running: Yes

Slave_SQL_Running: Yes

都为Yes表示同步成功。

注:master_port=3306,默认时不需要加,但是修改过端口的则需要该选项

3.搭建互为主从

3.1在MySQl-01上操作

3.1.1用户授权mysql -u root -p123456

mysql> grant replication slave on *.* to 'slave'@'192.168.204.138' identified by '123456'; //建立权限

mysql> flush privileges;

注:因为做的是所有库的主从,所以在MySQL-01上的操作会同步到MySQL-02上

注2:假如你是线上环境,主库在不断的写数据,建议锁一下表,最好找个夜深人静的时候做吧

3.2在MySQL-02上的操作mysql -u root -p

mysql> show master status\G;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000009 |      120 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

3.1.2在MySQL-01上操作授权mysql> change master to master_host='192.168.204.138',master_user='slave',master_password='123456',master_log_file='mysql-bin.000009',master_log_pos=120;

mysql> start slave;

检查是否成功show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

表示成功。

此,mysql的双向主从同步已完成

4.keepalived的搭建

4.1在两台服务器依次做以下操作

a.安装keepalivedwget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz

tar zxvf keepalived-1.2.15.tar.gz

cd keepalived-1.2.15

./configure --prefix=/usr/local/keepalived

make && make install

假如编译过程出现错误,请安装 gcc,openssl,openssl-devel

b.复制相关文件cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived/

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

4.2修改配置文件

请先将/etc/keepalived/keepalived.conf文件清空

4.2.1在MySQL-01上操作

将一下内容复制进去! Configuration File for keepalived

global_defs {

notification_email {

sunyuansheng7@gmail.com

}

notification_email_from sunyuansheng7@gmail.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MySQL-ha

}

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 {

192.168.204.222

}

}

virtual_server 192.168.204.222 3306 {

delay_loop 6

lb_algo wrr

lb_kind DR

persistence_timeout 50

protocol TCP

real_server 192.168.204.138 3306 {

weight 3

notify_down /var/lib/mysql/killkeepalived.sh

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

4.2.2在MySQL-02上操作

vim /etc/keepalived/keepalived.conf! Configuration File for keepalived

global_defs {

notification_email {

sunyuansheng7@gmail.com

}

notification_email_from sunyuansheng7@gmail.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MySQL-ha

}

vrrp_instance VI_1 {

state backup

interface eth0

virtual_router_id 51

priority 100

advert_int 1

nopreempt

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.204.222

}

}

virtual_server 192.168.204.222 3306 {

delay_loop 6

lb_algo wrr

lb_kind DR

persistence_timeout 50

protocol TCP

real_server 192.168.204.139 3306 {

weight 3

notify_down /var/lib/mysql/killkeepalived.sh

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

4.3在两台服务器做以下操作vim /var/lib/mysql/killkeepalived.sh

#!/bin/sh

pkill keepalived

chmod +x /var/lib/mysql/killkeepalived.sh

4.4此时先不要启动keepalived,因为我们要观察日志

5.测试是否可用

创建一个新的用户mysql> grant all privileges on *.* to 'test'@'%' identified by '123456';

mysql> flush privileges;

5.1在MySQL-01上多开一个终端,tailf /var/log/messages,然后再另一个终端启动keepalived服务service keepalived start。日志信息如下

fb5b1d591f6c86062edb97ebceaa6ab2.png

5.2在MySQL-02同样打开一个新的终端查看日志信息,然后启动keepalived

670fcb1f8bdda2d3fc870355b86adb4b.png

5.3在MySQL-01上手动停掉MySQL服务。同时得到日志信息

ce1e6309755650205cc59b2f9dc796ec.png   连接3306端口失败,准备移除虚拟ip,然后停掉keepalived服务。最后虚拟ip地址移除。

MySQL-02日志信息没啥变化!话说两边启动keepalived的日志信息差不多是一样的。

此时可以使用连接MySQL的工具测试一下,虚拟ip地址还是可用的。

5.4假设MySQL-01恢复此时还应该启动keepalived服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于vector的size()的使用问题

vector<int> vec; for (int i 0; i < vec.size() - 1; i) &#xff5b; vec[i] &#xff5d; 这里会有个隐藏问题&#xff0c;当vec的size为0时&#xff0c;因为size&#xff08;&#xff09;函数的返回值是无符号整型&#xff0c;这时vec.size() - 1是一个正数…

mysql密码命名规则_MySql命名规范

数据库环境dev&#xff1a;开发环境&#xff0c;开发可读写&#xff0c;可修改表结构。开发人员可以修改表结构&#xff0c;可以随意修改其中的数据但是需要保证不影响其他开发同事。qa&#xff1a;测试环境&#xff0c;开发可读写&#xff0c;开发人员可以通过工具修改表结构。…

【CodeVS - 3639】(树的重心模板,裸题)

题干&#xff1a; 题目描述 Description 给出一棵树&#xff0c;求出树的中心。 为了定义树的中心&#xff0c;首先给每个结点进行标号。对于一个结点K&#xff0c;如果把K从树中删除&#xff08;连同与它相连的边一起&#xff09;&#xff0c;剩下的被分成了很多块&#xf…

go-mysql查询单条数据_Golang 从 MySQL 数据库读取一条数据

刚开始在 sqlx 和 gorm 两者间纠结了半天&#xff0c;准备使用 sqlx 了&#xff0c;看了文档&#xff0c;感觉就是灾难般的文档。我按照例子硬是没有从 MySQL 读出数据。又尝试了 gorm&#xff0c;这家伙的文档更加不友好&#xff0c;概念更多。调试了半天&#xff0c;返回的结…

【HYSBZ - 1088 】扫雷Mine (简单dp)

题干&#xff1a; 相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷&#xff0c;要你根据一些信息找出雷来。万圣节到了 &#xff0c;“余”人国流行起了一种简单的扫雷游戏&#xff0c;这个游戏规则和扫雷一样&#xff0c;如果某个格子没有雷&#xff0c;那么它里…

docker启动mysql容器_Docker容器开机自启动

查看所有容器[vagrantlocalhost ~]$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f142f72d7e8 redis "docker-entr…

【CodeForces - 527C】Glass Carving(线段树或者SBT或者set)

题干&#xff1a; Leonid wants to become a glass carver (the person who creates beautiful artworks by cutting the glass). He already has a rectangular w mm    h mm sheet of glass, a diamond glass cutter and lots of enthusiasm. What he lacks is understand…

mysql常驻内存_MySQL的内存和相关问题排查

我们都知道数据库是IO密集型一类应用&#xff0c;为了提高其性能大量使用内存代替文件(交换分区)的IO操作是保证数据库稳定、高效的基本原则。那么数据库是如何使用内存的&#xff0c;我们如何查看数据库内存的占用&#xff0c;如何通过通过数据库内存配置设置提高其性能&#…

【HihoCoder - 1850】字母去重 (字符串,思维)

题干&#xff1a; 给定一个字符串S&#xff0c;每次操作你可以将其中任意一个字符修改成其他任意字符。 请你计算最少需要多少次操作&#xff0c;才能使得S中不存在两个相邻的相同字符。 Input 只包含小写字母的字符串S。 1 ≤ |S| ≤ 100000 Output 一个整数代表答案…

bash mysql count()_【MySQL】性能优化之 count(*) VS count(col)

优化mysql数据库时&#xff0c;经常有开发询问 count(1)和count(primary_key) VS count(*)的性能有何差异&#xff1f;看似简单的问题&#xff0c;估计会有很多人对此存在认知误区&#xff1a;1. 认为count(1) 和 count(primary_key) 比 count(*) 的性能好。2. count(column) 和…

【HihoCoder - 1851】D级上司 (树形图,dfs)

题干&#xff1a; H公司一共有N名员工&#xff0c;编号为1~N&#xff0c;其中CEO的编号是1。除了CEO之外&#xff0c;每名员工都恰好有唯一的直接上司&#xff1b;N名员工形成了一个树形结构。 我们定义X的1级上司是他的直接上司&#xff0c;2级上司是他上司的上司&#xf…

mysql录数据总是错误_MySQL数据库出错

在主库上备份表 t (假设备份快照 GTID 为 aaaa:1-10000)&#xff1b;恢复到从库&#xff1b;启动复制。这里的问题是复制起始位点是 aaaa:101&#xff0c;从库上表 t 的数据状态是领先其他表的。aaaa:101-10000 这些事务中只要有修改表 t 数据的事务&#xff0c;就会导致复制报…

linux安装mysql后怎么进去_linux安装mysql详细步骤

最近买了个腾讯云服务器&#xff0c;搭建环境。该笔记用于系统上未装过mysql的干净系统第一次安装mysql。自己指定安装目录&#xff0c;指定数据文件目录。linux系统版本&#xff1a; CentOS 7.3 64位安装源文件版本&#xff1a;mysql-5.7.21-linux-glibc2.12-x86_64.tar.gzmys…

给各位ACMer,OIer详细介绍一下Codeforces比赛

Codeforces 简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏). 网址: codeforces.com   这是一个俄国的算法竞赛网站,由来自萨拉托夫州立大学、由Mike Mirzayanov领导的一个团队创立和维护,是一个举办比赛、做题和交流的平台.举办比赛和做题就不说了,“交流”指的是自带b…

【CodeForces - 278C 】Learning Languages(并查集,思维)

题干&#xff1a; The "BerCorp" company has got n employees. These employees can use m approved official languages for the formal correspondence. The languages are numbered with integers from 1 to m. For each employee we have the list of language…

java短除法获取二进制_Java十四天零基础入门-Java的数据类型介绍

不闲聊&#xff01;&#xff01;&#xff01;不扯淡&#xff01;&#xff01;&#xff01;小UP只分享Java相关的资源干货本章节目标&#xff1a;理解数据类型的作用。Java中包括哪些数据类型&#xff1f;常见的八种基本数据类型都有哪些&#xff1f;会用八种基本数据类型声明变…

【CodeForces - 151C】Win or Freeze (博弈,数学,唯一素数分解)

题干&#xff1a; You cant possibly imagine how cold our friends are this winter in Nvodsk! Two of them play the following game to warm up: initially a piece of paper has an integer q. During a move a player should write any integer number that is a non-tr…

vs怎么把textbox输入的实数放置变量里_方程的计算机处理96(3)_C++vs

计算机语言运用--数值计算9-方程的计算机处理96(3)_Cvs计算机&#xff1a;电子线路组成的计算机器。人与计算机则是通过计算机语言-符号系统说给计算机听而交流。计算机语言有低级语言-机器语言、汇编、高级语言-C/C/C#/VB/PASCAL/LISP/JAVA/PYTHON/……成百上千种之多。作为一…

【CodeForces - 151D】Quantity of Strings (字符串问题,思维推导,有坑)

题干&#xff1a; Just in case somebody missed it: this winter is totally cold in Nvodsk! It is so cold that one gets funny thoughts. For example, lets say there are strings with the length exactly n, based on the alphabet of size m. Any its substring with…

2008r装mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例

安装MySql操作系统&#xff1a;Windows Server 2008 R2 StandardMySql版本&#xff1a;mysql-5.7.17-winx64第一步&#xff1a;解压mysql-5.7.17-winx64.zip到指定位置第二步&#xff1a;安装文件根目录下添加data文件夹&#xff0c;将my-default.ini重命名为my.ini第三步&…