mysql有没有实现高可用_MySQL高可用架构:mysql+keepalived实现

系统环境及架构

#主机名 系统版本 mysql版本 ip地址

mysqlMaster centos7.4 mysql5.7 192.168.1.42

mysqlSlave centos7.4 mysql5.7 192.168.1.43

#vip:192.168.1.41

MySQL高可用架构:mysql+keepalived实现MySQL高可用架构:mysql+keepalived实现

在master和slave上分别进行数据库的安装

yum install epel* -y && yum clean all && yum makecache

rpm -Uvh http://repo.mysql.com/mysql57-community-release-el7.rpm

yum clean all && yum makecache

yum install gcc gcc-c++ openssl-devel mysql mysql-server mysql-devel -y

创建数据库文件存放路径

mkdir /data/mysql -p

chown -R mysql:mysql /data/mysql

配置mysql配置文件

#在mysqlMaster上配置mysql配置文件

vi /etc/my.cnf

[mysqld]

server-id = 1#全局唯一,每台都不能一样

log-bin = mysql-bin#log-bin表示开启二进制日志记录,mysql-bin表示日志文件的命名格式,会生成mysql-bin.0001 等等

relay-log = mysql-relay-bin#指定中继日志格式(拉取主mysql日志后,在从库上生成的日志)

replicate-wild-ignore-table=mysql.%#指定那些库或则表不进行同步,mysql是库名,.%表示下面所有的表,mysql.user 表示不同不mysql库下的user表

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

#replicate-wild-do-table=boke.%#表示同步那个库

#注意:不要在主库上使用binlog-do-db 或 binlog-ignore-db选项

#也不要在从库上使用 replicate-do-db 或 replicate-ignore-db 选项,因为这有可能产生跨库更新失败的问题.推荐从库上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 这两个选项来解决复制过滤问题

datadir=/data/mysql

socket=/data/mysql/mysql.sock

user=mysql

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

character-set-server=utf8

[mysql]

socket=/data/mysql/mysql.sock

default-character-set=utf8

[client]

socket=/data/mysql/mysql.sock

default-character-set=utf8

user=root

password=NCYD-tianyu@0791

#若是不写上这个字段,在本机用命令进入mysql会报错,提示默认路径/var/lib/mysql/mysql.sock找不到

在mysqlSlave上配置mysql配置文件

vi /etc/my.cnf

[mysqld]

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

datadir=/data/mysql

socket=/data/mysql/mysql.sock

user=mysql

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

character-set-server=utf8

[mysql]

socket=/data/mysql/mysql.sock

default-character-set=utf8

[client]

socket=/data/mysql/mysql.sock

default-character-set=utf8

user=root

password=NCYD-tianyu@0791

#若是不写上这个字段,在本机用命令进入mysql会报错,提示默认路径/var/lib/mysql/mysql.sock找不到,先初始化数据库(需要进行初始化在/data/mysql目录里生成必要的信息)

#mysql5.7.7以后的初始化方法

mysqld --initialize --user=mysql --datadir=/data/mysql

#mysql5.7.7以前的初始化方法

mysql_install_db --user=mysql --datadir=/data/mysql

分别启动主从数据库

#在centos7里面,必须先关闭selinux,否在无法启动mysqld

systemctl start mysqld

分别为主从mysql做安全加固

#查到上一步,首次启动mysql,系统自动生成的密码( cat /var/log/mysqld.log |grep pass )

mysql_secure_installation#使用该命令更改随机root密码(修改为 NCYD-tianyu@0791 )

手动同步数据(假如现在的环境,主上已经有数据了,从是新的)

1:在主上数据库中创建用于复制的用户,并授权

mysql> GRANT REPLICATION SLAVE ON . to ‘tongbu’@‘192.168.1.43’ identified by ‘123456789’;

2:在主mysql上先锁表(使其所有表变成只读状态)

mysql> flush tables with read lock;#不要退出终端,否在这个锁就失效了

3:再开启另一个命令行终端,使用myqldump等工具将数据导出(或则直接打包存储mysql数据的目录,并发送到从机上)

4:将导出数据复制到从机上,并创建新库并导入数据

互相置从,互相置主(以达到双主模式)

在mysqlMaster上将mysqlSlave设置为自己的主角色服务器

mysql> show master status;#查看mysqlSlave的状态(记录File名字,和Position)

change master to

master_host = ‘192.168.1.43’,

master_user = ‘tongbu’,

master_password = ‘123456789’,

master_log_file = ‘mysql-bin.000002’,

master_log_pos = 1006;

mysql> start slave; #启动slave端的复制进程(某些版本是:slave start; )

mysql> show slave status\G #查看slaves端的I/O进程,与SQL进程

在从上将mysqlMaster设置为自己的主角色服务器

mysql> show master status;#查看mysqlMaster的状态(记录File名字,和Position)

change master to

master_host = ‘192.168.1.42’,

master_user = ‘tongbu’,

master_password = ‘123456789’,

master_log_file = ‘mysql-bin.000002’,

master_log_pos = 1006;

mysql> start slave; #启动slave端的复制进程

mysql> show slave status\G #查看slaves端的I/O进程,与SQL进程

验证是否同步

1:第一验证在myssqlMaster上创建库,mysqlSlave上是否存在

2:第二验证在mysqlSlave上创建库,mysqlMaster上是否存在

安装keepalived实现VIP切换,达到高可用

yum install keepalived -y

#在mysqlMaster和mysqlSlave上都创建检查mysql的检查脚本,并赋予执行权限

touch /etc/keepalived/mysql_check.sh

chmod +x /etc/keepalived/mysql_check.sh

vi /etc/keepalived/mysql_check.sh

#!/bin/bash

#slave_is=( $(mysql -uroot -pNCYD-tianyu@0791 -e “show slave status\G” | grep “Slave_.Running" | awk ‘{print $2}’) ) 在新版本的myql中,直接将密码写在命令行,会进行安全提示,解决办法是将其写在mysql的配置文件里的 [client] 字段里,写法见上面mysql的配置文件

slave_is=( $(mysql -e “show slave status\G” | grep "Slave._Running” | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}?') )

if [ "{slave_is[0]}" = “Yes” -a “$slave_is[1]” = “Yes”]

then

exit 0

else

exit 1

fi

#注意,keepalived检查脚本vrrp_script,只认两个返回值,0表示正常,非0表示不正常(这在写脚本是要注意),不正常就要做相关的切换

配置keepalived,以实现高可用

vi /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 LVS_DEVEL

vrrp_skip_check_adv_addr

#vrrp_strict#注意:当你发现无法ping通虚拟VIP时,建议将此行注释掉

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_script mysql_check {

script “/etc/keepalived/mysql_check.sh”

#这个脚本,若是发现不执行,可以检查他的权限,777是不可以的,日志提示不安全,可以直接chmod +x /etc/keepalived/mysql_check.sh 就行

#script “shutdown -r now”#或者,直接用命令进行调试

interval 2

weight 2

}

vrrp_instance VI_1 {

state MASTER#mysqlMaster上是MASTER;mysqlSlave上是BACKUP

interface ens192

virtual_router_id 52

priority 100#mysqlMaster上是100;mysqlSlave上是90

advert_int 1

nopreempt#配置VIP(注意:故障切换抢占模式,尽量关闭,默认是开启的,这个参数只需要在高优先级上设置即可)

authentication {

auth_type PASS

auth_pass 1111

}

track_script {#调用上面定义检查mfsmaster的脚本

mysql_check

}

virtual_ipaddress {

192.168.1.41/24 dev ens192

}

}

启动keepalived

systemctl start keepalived

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

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

相关文章

Ubuntu 加速安装Opencv 3.4.3

Ubuntu 18.04 完美安装Opencv 3.4.3 1.1 下载Opencv 3.4.3 在http://opencv.org/网址中找到下载连接,版本选择:https://github.com/opencv/opencv/releases 下载地址:https://github.com/Itseez/opencv/archive/3.4.3.zip (此处可以使用w…

Net和T-sql中的日期函数操作

net中的日期函数代码: 代码 1 DateTime now DateTime.Now; 2 // 当前月的第一天 3 DateTime d1 new DateTime(now.Year, now.Month, 1); 4 // 当前月的最后一天 5 DateTime d2 d1.AddMonths(1).AddDays(-1); 6 if (now.Day d2.Day) 7 { 8 // 当日是当月最后…

kiwiboard 购买记录小结

2019独角兽企业重金招聘Python工程师标准>>> 后悔啊,买前没有做过调研,脑子一热就买了个全套的,现在后悔来不及啦,肠子都青掉了。。。 说说体会吧: 1. 配件很少,没有uart线,也没有…

xml文件转换成图片_怎样能把PDF文件转换成图片?

我们的日常生活工作中时常碰到pdf与Excel、Word、ppt和jpg等文件格式的转换,有时候由于工作的需要,要把PDF文件转换成图片。并且现在网上的很多素材都是PDF文件格式的,如果我们想要里面的图片就变得很难办了。采取截图的方式得到的图片很模糊…

vmware安装渗透系统 Linux Kail最新版

https://mirror-1.truenetwork.ru/kali-images/kali-2020.3/kali-linux-2020.3-installer-amd64.iso Kali Linux安装的磁盘空间的最小值是8GB。为了便于使用,这里推荐至少25GB去保存附加程序和文件。内存最好为512MB以上。Kali Linux的下载地址http://www.kali.org/…

Thread线程的深刻理解和代理方法参数[有图有真相]

在这说的是Thread的基本用法,线程池ThreadPool在这就不说的,以前的blog有写,基本上两个用法都是相同的。基本用法和图,不需要的大鸟请绕行,谢谢! 目录: 1.Thread基本用法与异步线程理解。 2.线…

discusz 判断当前页是门户还是论坛

<!--{if $_G[basescript] forum && CURMODULE index}-->内容<!--{/if}--> $_G[basescript]判读当前页面是不是门户或者论坛 CURMODULE 用这个常量来判断 index为首页 forumdisplay为列表页 内容页为viewthread转载于:https://www.cnblogs.com/xc0754021…

linux ubuntu 编写c/c++ 获取命令行传入参数示例

linux ubuntu 编写c/c 获取命令行传入参数示例 g test.cpp -o test ./test -d video.jpg test.cpp 代码如下 #include <iostream> #include <unistd.h>using namespace std;int main(int argc, char* argv[]) {//参数变量初始化string db_path;int ch;opterr …

js+excel+mysql_js导出数据到excel

方式一var jsonData [{name:路人甲,phone:123456,email:123123456.com},{name:炮灰乙,phone:123456,email:123123456.com},{name:土匪丙,phone:123456,email:123123456.com},{name:流氓丁,phone:123456,email:123123456.com},]function JSONToCSVConvertor(JSONData, ReportTi…

关于c# SESSION丢失问题解决办法

我们在用C#开发程序的时候经常会遇到Session很不稳定&#xff0c;老是数据丢失。下面就是Session数据丢失的解决办法希望对您有好处。1、在WEB.CONFIG文件中修改SESSION状态保存模式&#xff0c;如&#xff1a;<sessionState modeStateServer stateConnectionStringtcpip127…

python执行系统命令后获取返回值的几种方式

import commands output commands.getstatusoutput(ps -aux) print output更多资讯或疑问内容请关注 微信公众号 “让梦飞起来” 或添加小编微信&#xff0c; 后台回复 “Python” &#xff0c;领取更多资料哦

as和强制类型转换的区别

之前一直以为as就是强制类型转换&#xff0c;只是as是AS3中新的语法&#xff0c;之前用在有继承关系的对象之间的转换也无甚区别&#xff0c;但是今天却让我领悟到了它俩之间的区别。原起&#xff1a;今天要给ColorPicker控件动态赋值&#xff0c;它的selectedColor属性接收的是…

mysql galera status_MySQL galera cluster集群的监控

一、集群复制状态检查1、SHOW GLOBAL STATUS LIKE wsrep_%;-------------------------------------------------------------------------------------------| Variable_name | Value |-------------------------------------------------------------------------------------…

一些好用的开源控件

工作两年&#xff0c;一直都在做些编码方面的表面功夫&#xff0c;实现了很多很炫的功能&#xff0c;在此写下一些体验。有些比较小的dll文件我会发上来&#xff0c;如果是开源组织的代码我会把地址附上&#xff0c;毕竟人家是会更新的。大家还有什么好用的开源控件欢迎补充。 …

python3爬取百度图片

python3爬取百度图片 最终目的&#xff1a;能通过输入关键字进行搜索&#xff0c;爬取相应的图片存储到本地或者数据库 首先打开百度图片的网站&#xff0c;搜索任意一个关键字&#xff0c;比如说&#xff1a;水果&#xff0c;得到如下的界面 分析&#xff1a; 1、百度图片搜…

mysql导入工具 行提交_使用命令行工具mysqlimport导入数据

Usage: mysqlimport [OPTIONS] database textfile …mysqlimport 程序是一个将以特定格式存放的文本数据(如通过“select * into OUTFILE from …”所生成的数据文件)导入到指定的MySQL Server 中的工具程序&#xff0c;比如将一个标准的csv 文件导入到某指定数据库的指定表中。…

Windows Phone 7 LongListSelector控件实现分类列表和字母索引

在wp7手机里面的联系人列表和程序里面里面我们可以看到一个根据字母索引来定位联系人或者应用程序的控件&#xff0c;那么这个控件就是LongListSelector控件了。 LongListSelector是一种比ListBox更加强大的列表控件&#xff0c;你可以根据你列表的信息来分类排列&#xff0c;根…

c# 获取电脑硬件信息通用查询类[测试通过]

C#获取电脑硬件信息通用类[Computer]代码展示和分析&#xff0c;简介如下&#xff1a; 1.项目中添加System.Management引用。 2.添加类Computer&#xff0c;把下面代码全选&#xff0c;复制&#xff0c;粘贴。 3.使用方法new Computer().GetComputerName()。 代码 usingSyst…

基于ssm北关村基本办公管理系统的设计与实现论文

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对北关村基本办公信息管理的提升&…

C# 操作线程的通用类[测试通过]

进程管理就是对服务器性能的管理和协调&#xff0c;在程序的运行角度来看非常重要&#xff0c;也可以根据操作进程的手段&#xff0c;衍生很多实用和智能的功能&#xff0c;以下就是介绍一个自己写的进程通用操作类&#xff0c;功能如下&#xff1a; 1.把ProcessUtility类直接…