系统环境及架构

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

在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=123-ti21u2131

#若是不写上这个字段,在本机用命令进入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=123-ti21u2131

#若是不写上这个字段,在本机用命令进入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密码(修改为 1234567 )

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

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进程

验证是否同步(ok的)

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 -p1234567 -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 $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 keepalived主从_mysql高可用架构之(一)基于自身主从复制&keepalived实现相关推荐

  1. lvs加MySQL读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)

    mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言    4 2.原理    4 2.1.概要介绍    4 2.2.工作原理    4 2.3.实际作用    4 3方 ...

  2. 《MySQL性能优化和高可用架构实践》阅读总结

    文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...

  3. 《MySQL性能优化和高可用架构实践》简介与推荐序

    #好书推荐##好书奇遇季#<MySQL性能优化和高可用架构实践>,京东当当天猫都有发售.腾讯云架构师宋立桓倾情奉献,定价59元,网店打折销售其实没多少钱. 互联网公司里面几乎很少有公司不用 ...

  4. MySQL 5.6通过Keepalived+互为主从实现高可用架构

    本文将介绍两台Mysql如何实现高可用架构.通常我们会配置主从同步,但这样若主的Mysql挂掉,还需要手动干预,例如把指向主库的IP地址修改为指向从库的IP,为了实现自动切换到从数据库,我们可以使用K ...

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

    系统环境及架构 #主机名 系统版本 mysql版本 ip地址 mysqlMaster centos7.4 mysql5.7 192.168.1.42 mysqlSlave centos7.4 mysq ...

  6. mysql lvs 读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)

    mysql主从复制与lvs+keepalived实现负载高可用 目录 1.前言    4 2.原理    4 2.1.概要介绍    4 2.2.工作原理    4 2.3.实际作用    4 3方案 ...

  7. MySQL(11)数据库实现高可用架构之MMM

    文章目录 一.MySQL MMM介绍 1.1 什么是 MMM? 1.2 MMM的组成 2.1 MySQL M搭建的步骤(理论) 2.1.1 搭建步骤 2.1.2故障测试 2.2 MySQL M搭建具体 ...

  8. Mysql数据库MMM实现高可用架构

    文章目录 一,MMM介绍 二.MMM搭建 一,MMM介绍 MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器) 是一套支持双主故障 ...

  9. MySQL 数据库之 MMM 高可用架构构建

    文章目录 一.MMM 概述 1. 什么是 MMM 2. 应用场景 3. MMM 特点 4. 关于 MMM 高可用架构的说明 5. 用户及授权 二.案例环境 1. 服务器配置 2. 服务器环境 3. 修 ...

最新文章

  1. 基于Tkinter利用python实现颜色空间转换程序
  2. 《小程序个人信息保护研究报告》解读
  3. 『中级篇』k8s基础网络Cluster Network(66)
  4. 网站优化关键词如何分类看好这四种!
  5. xml与java代码相互装换的工具类
  6. JTAG之IO口作为普通IO口使用时注意事项
  7. ubuntu修改启动为文本模式
  8. C#制作WinForm控件
  9. 从趋势到必选项,探讨企业数字化转型方式方法
  10. 大圆距离matlab代码,python – cartopy:大圆距离线的更高分辨率
  11. Learning Shape Priors for Single-View 3D Completion and Reconstruction
  12. ASP.NET中定制自己的委托和事件参数类
  13. 问题的分析与解决(培训总结)
  14. php爬虫大数据抓取_爬虫软件介绍?大数据抓取软件?
  15. Linux面试题,经典Linux面试题,常见Linux面试题带答案
  16. Silverlight4 多页打印实现
  17. movielens数据集简述
  18. LAMP兄弟连ThinkPHP笔记
  19. 【Word】正则替换
  20. Microsoft Visual SourceSafe 6.0 关联VS

热门文章

  1. ubuntu 16卸载mysql_ubuntu16.04 彻底卸载MySQL
  2. idea2019打卡没多久就闪退_IDEA 2020.1打开时闪退的问题及解决方法(完美解决方法)...
  3. Oracle-索引分裂研究
  4. 强势回归丨2021数据库大咖讲坛(第1期):数据库高可用容灾方案的实践与探索
  5. 一招教你数据仓库如何高效批量导入与更新数据
  6. Python进阶丨如何创建你的第一个Python元类?
  7. SpringBoot写后端接口,看这一篇就够了!
  8. Presto性能调优的五大技巧
  9. 力算未来丨一张图看懂华为“鲲鹏+昇腾”双引擎
  10. activate-power-mode,让你在Python编码中,感受炫酷的书写特效!