系统环境及架构

#主机名 系统版本 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

mysql有没有实现高可用_MySQL高可用架构:mysql+keepalived实现相关推荐

  1. mysql高可用_mysql高可用方案

    第一节:mysql 高可用方案 1.1 一主一从架构 mysql 配置为主从模式,从库是主库的 backup,同一时间设置其中一台为主服务器,提供读写,另一台服务器作为热备,不提供读写,通过复制与主服 ...

  2. MySQL高可靠_MySQL高可用与高可靠架构

    前言 数据库高可用是生产环境使用数据库必要条件,MySQL数据库通常使用复制技术实现.然MySQL复制本身存在很多的"坑"容易被忽视,导致一些开发或运维人员对于MySQL复制的可靠 ...

  3. mysql 升级高可用_MySQL高可用方案升级规划

    这是学习笔记的第2035篇文章 这两天在梳理MySQL高可用方案的升级计划,发现要做的事情还真不少. 我们目前有新系统和老系统,老系统因为历史原因使用的是MySQL 5.5版本,新系统有了整体的规划, ...

  4. mysql最新高可用_MySQL高可用方案介绍

    MySQL-Transefer(下称Transfer)是一个基于MySQL+patch后得到的主从同步工具. 其主要目的是为了解决原版本的主从同步里,从库是单线程apply主库的binlog,导致的延 ...

  5. nginx实现mysql高可用_MySQL高可用

    3,nfs高可用,keepalive使用脚本(自己编写)vrrp_script {},通过脚本返回的状态(根据keepalive自定)判断drbd的主从,然后飘动vip,同时再触发脚本,切换drbd的 ...

  6. mysql三台高可用_Mysql高可用,实现方案

    https://www.cnblogs.com/nuanxin/p/5665840.html 对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用 ...

  7. mysql数据库集群备份策略_mysql高可用方案之集群(cluster)

    1.实验环境 我用三台服务器搭建mysql cluster环境,sql节点和数据节点在同一服务器上,管理节点单独一台. cluster node1:192.168.1.102        data ...

  8. mysql支持事务的存储引擎_MySQL基础(三)【MySQL事务与存储引擎】

    3.1-数据库事务 什么是事务 一系列有序的数据库操作: 要么全部成功 要么全部回退到操作前的状态 中间状态对其他连接不可见 事务的基本操作: 基本操作 说明 start transaction 开始 ...

  9. mysql中只运行一部分数据_MySQL(一)——MySQL基础和部分面试题

    MySQL基础: 数据库的创建与删除 CREATE DATABASE ;//创建数据库 DROP DATABASE ;//删除数据库 数据库表的创建与删除 CREATE TABLE (column_n ...

最新文章

  1. unity 2d 游戏优化之路 遇坑记录
  2. java opencv calcCovarMatrix 计算协方差矩阵
  3. Exchange 2010 共享邮箱
  4. CodeForcesGym 100753B Bounty Hunter II 二分图最小路径覆盖
  5. 有关onpropertychange事件
  6. J2EE项目风险(翻译)
  7. CSDN在线下载免费获取积分
  8. 高考为什么考计算机信息,信息技术是否应该进入高考?
  9. 《缠中说禅108课》24::MACD 对背弛的辅助判断
  10. 薪资16K,进华为外包怎么样?
  11. 具有聚集诱导发射(AIE)特性的新型TADF分子SBF-BP-DMAC的定制合成
  12. linux recuse 挂载u盘,从U盘启动kali系统出现Grub Rescue问题
  13. element ui 前台模板_一个干净优雅的 Element UI Admin 模板
  14. java excel 列_Java 删除Excel中的行和列
  15. 空间直角坐标系(XYZ)转经纬度(BLH)
  16. 大端(Bid Endian)、小端(Little Endian)含义
  17. 陆俊林计算机组成慕课第一章
  18. 三刷CPA注册会计师之会计决胜之道
  19. 学生计算机上的fix怎么取消,卡西欧计算器的屏幕上fix如何消去?
  20. 在Linux系统上安装Git

热门文章

  1. HDU 4812 D Tree
  2. 不用正则表达式,用javascript从零写一个模板引擎(一)
  3. 手机站点击商务通无轨迹解决方法
  4. MongoDB中关于64位整型存储解决方案
  5. 续——《RedHat/Fedora等非ubuntu的Linux系统星空极速netkeeper拨号上网 》
  6. 数据库,XML,MDB --- 我们来TXT...
  7. recyclerview item动画_这可能是你见过的迄今为止最简单的RecyclerView Item加载动画...
  8. opencv机器学习线性回归_机器学习(线性回归(二))
  9. java redis set list_RedisTemplate的各种操作(set、hash、list、string)_lichuangcsdn的博客-CSDN博客...
  10. [转载] Java重载、覆盖与构造函数