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
mysql有没有实现高可用_MySQL高可用架构:mysql+keepalived实现相关推荐
- mysql高可用_mysql高可用方案
第一节:mysql 高可用方案 1.1 一主一从架构 mysql 配置为主从模式,从库是主库的 backup,同一时间设置其中一台为主服务器,提供读写,另一台服务器作为热备,不提供读写,通过复制与主服 ...
- MySQL高可靠_MySQL高可用与高可靠架构
前言 数据库高可用是生产环境使用数据库必要条件,MySQL数据库通常使用复制技术实现.然MySQL复制本身存在很多的"坑"容易被忽视,导致一些开发或运维人员对于MySQL复制的可靠 ...
- mysql 升级高可用_MySQL高可用方案升级规划
这是学习笔记的第2035篇文章 这两天在梳理MySQL高可用方案的升级计划,发现要做的事情还真不少. 我们目前有新系统和老系统,老系统因为历史原因使用的是MySQL 5.5版本,新系统有了整体的规划, ...
- mysql最新高可用_MySQL高可用方案介绍
MySQL-Transefer(下称Transfer)是一个基于MySQL+patch后得到的主从同步工具. 其主要目的是为了解决原版本的主从同步里,从库是单线程apply主库的binlog,导致的延 ...
- nginx实现mysql高可用_MySQL高可用
3,nfs高可用,keepalive使用脚本(自己编写)vrrp_script {},通过脚本返回的状态(根据keepalive自定)判断drbd的主从,然后飘动vip,同时再触发脚本,切换drbd的 ...
- mysql三台高可用_Mysql高可用,实现方案
https://www.cnblogs.com/nuanxin/p/5665840.html 对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用 ...
- mysql数据库集群备份策略_mysql高可用方案之集群(cluster)
1.实验环境 我用三台服务器搭建mysql cluster环境,sql节点和数据节点在同一服务器上,管理节点单独一台. cluster node1:192.168.1.102 data ...
- mysql支持事务的存储引擎_MySQL基础(三)【MySQL事务与存储引擎】
3.1-数据库事务 什么是事务 一系列有序的数据库操作: 要么全部成功 要么全部回退到操作前的状态 中间状态对其他连接不可见 事务的基本操作: 基本操作 说明 start transaction 开始 ...
- mysql中只运行一部分数据_MySQL(一)——MySQL基础和部分面试题
MySQL基础: 数据库的创建与删除 CREATE DATABASE ;//创建数据库 DROP DATABASE ;//删除数据库 数据库表的创建与删除 CREATE TABLE (column_n ...
最新文章
- unity 2d 游戏优化之路 遇坑记录
- java opencv calcCovarMatrix 计算协方差矩阵
- Exchange 2010 共享邮箱
- CodeForcesGym 100753B Bounty Hunter II 二分图最小路径覆盖
- 有关onpropertychange事件
- J2EE项目风险(翻译)
- CSDN在线下载免费获取积分
- 高考为什么考计算机信息,信息技术是否应该进入高考?
- 《缠中说禅108课》24::MACD 对背弛的辅助判断
- 薪资16K,进华为外包怎么样?
- 具有聚集诱导发射(AIE)特性的新型TADF分子SBF-BP-DMAC的定制合成
- linux recuse 挂载u盘,从U盘启动kali系统出现Grub Rescue问题
- element ui 前台模板_一个干净优雅的 Element UI Admin 模板
- java excel 列_Java 删除Excel中的行和列
- 空间直角坐标系(XYZ)转经纬度(BLH)
- 大端(Bid Endian)、小端(Little Endian)含义
- 陆俊林计算机组成慕课第一章
- 三刷CPA注册会计师之会计决胜之道
- 学生计算机上的fix怎么取消,卡西欧计算器的屏幕上fix如何消去?
- 在Linux系统上安装Git
热门文章
- HDU 4812 D Tree
- 不用正则表达式,用javascript从零写一个模板引擎(一)
- 手机站点击商务通无轨迹解决方法
- MongoDB中关于64位整型存储解决方案
- 续——《RedHat/Fedora等非ubuntu的Linux系统星空极速netkeeper拨号上网 》
- 数据库,XML,MDB --- 我们来TXT...
- recyclerview item动画_这可能是你见过的迄今为止最简单的RecyclerView Item加载动画...
- opencv机器学习线性回归_机器学习(线性回归(二))
- java redis set list_RedisTemplate的各种操作(set、hash、list、string)_lichuangcsdn的博客-CSDN博客...
- [转载] Java重载、覆盖与构造函数