主服务器搭建

  1. 准备三台服务器,一主一从一备

  2. 在主服务器(master)下找到mysql配置文件。

    Window下为my.ini(一般在C:\ProgramData\MySQL\MySQL Server 5.7下); Linux下为/etc/my.cnf

  3. 在[mysqld]下添加如下配置

# 服务的唯一编号
server-id=1
# 开启mysql binlog功能 slave会基于此log-bin来做replication
log-bin=master-bin
log-bin-index=master-bin.index
# binlog记录内容的方式,记录被操作的每一行
binlog_format=ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image=minimal
# 指定需要复制的数据库名
# 如果没有指定会监听复制所有的库,新建库操作也会复制,反之只监听复制指定的库
binlog-do-db=test
#不用于master-slave的具体数据库
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
  1. 授权

    我们需要给slave配置一个用户/密码的权限
# 只读赋权
GRANT SELECT ON *.* TO 'lucky'@'10.104.114.116' IDENTIFIED BY 'luckytea';
# 从权限 赋权
GRANT REPLICATION SLAVE ON *.* TO 'luckytea'@'10.104.132.33' IDENTIFIED BY 'luckytea';
# 刷新权限
FLUSH PRIVILEGES;
  1. 重启mysql
系统 命令
Linux service mysqld restart;
Window net stop mysql;
net start mysql;

6、 查看主服务器状态

注意!更改配置或者数据库重启,主库日志的Position会改变,从库需要重新配置

# 确保主从库数据库结构一致
# 查看server-id 是否和配置一致,从服务器id需要大于主服务器id
show variables like '%server_id%'
# 将下列结果中 File和 Position 记录后交给从服务器搭建人员
show master status\G;

从服务器搭建

  1. 在从服务器(slave)下找到mysql配置文件。

    Window下为my.ini(一般在C:\ProgramData\MySQL\MySQL Server 5.7下); Linux下为/etc/my.cnf
  2. 在[mysqld]下添加如下配置
log-bin=relay-bin
#先全局查找注释原来的server-id
server-id=2
#保存配置进行重启查看server-id
show variables like '%server_id%';
  1. 进入slave的mysql命令行 执行
CHANGE MASTER TO
MASTER_HOST='master所在服务器的IP',
MASTER_USER='master授权的账号',
MASTER_PASSWORD='master授权的密码',
MASTER_LOG_FILE='master的日志文件名',
MASTER_LOG_POS=master的日志所在位置;
  1. 执行服务 并查看状态
# 关闭防火墙或者打开端口权限
# 查看server-id 是否和配置一致,从服务器id需要大于主服务器id
show variables like '%server_id%'
start slave;
show slave status\G;
# 请确认 Master_Log_File = 主服务器的File, Read_Master_Log_Pos = 主服务器的Position
# 请确认 Slave_IO_Running = Slave_SQL_Running = yes
  1. 如果Slave_SQL_Running = No
方法一:说明从库执行了错误操作,请进行回滚
stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave ;
show slave status\G;
方法二:重新进行一次同步操作
stop slave ;
CHANGE MASTER TO
MASTER_HOST='master所在服务器的IP',
MASTER_USER='master授权的账号',
MASTER_PASSWORD='master授权的密码',
MASTER_LOG_FILE='master的日志文件名',
MASTER_LOG_POS=master的日志所在位置;
start slave;
show slave status\G;
  1. 修改主库数据库,如从库变化,则配置成功

主主互备

主主互备:服务器1是服务器2的主服务器,服务器2也是服务器1的主服务器,互相进行主从备份。主从备份过程参考如上。

注意,为了避免主键id冲突,需要加入如下配置

主服务器1 在/etc/my.cnf下[mysqld]加入如下语句,使得新增id全为奇数

# 自增id起始值
auto_increment_offset=1
# 每次自增数字
auto_increment_increment=2

主服务器2 在/etc/my.cnf下[mysqld]加入如下语句,使得新增id全为偶数

# 自增id起始值
auto_increment_offset=2
# 每次自增数字
auto_increment_increment=2

注意,本教程未考虑灾备和脑裂的情况,暂行方案是连接客户端时捕获异常,切换ip连接。

推荐使用keepaliver,但是脚本需要自己编写,较复杂

Linux 部署MySQL 一主一从一备的更多相关文章

  1. linux 部署mysql

    参考:https://www.cnblogs.com/silentdoer/articles/7258232.html mysql中执行的语句需要在语句结尾使用分号 下载 MySql yum 包  w ...

  2. Linux下Mysql安装与常见问题解决方案

    1.Mysql安装 环境: Mysql版本: 开始安装: 首先检查环境有没有老版本mysql,有的话先卸载干净,具体百度. 接着先获取mysql的安装包:wget https://dev.mysql. ...

  3. Linux Debian 7部署LEMP(Linux+Nginx+MySQL+PHP)网站环境

    我们在玩VPS搭建网站环境的时候,都经常看到所谓的LAMP.LNMP.LEMP,LAMP, 其中的A代表APECHE WEB驱动环境,LNMP中的N代表NGINX驱动环境,只不过海外的叫法NGINX ...

  4. 阿里云服务器部署php的laravel项目,在阿里云买ECS 搭建 Linux+Nginx+Mysql+PHP环境的

    在阿里云买ECS的时候选择自己习惯的镜像系统,我一般都是使用Linux Ubuntu,所以,以下的配置都是在Ubuntu 14.04稳定支持版的环境中搭建Linux+Nginx+Mysql+PHP环境 ...

  5. CentOS6系统编译部署LAMP(Linux, Apache, MySQL, PHP)环境

    我们一般常规的在Linux服务器中配置WEB系统会用到哪种WEB引擎呢?Apache还是比较常用的引擎之一.所以,我们在服务器中配置LAMP(Linux, Apache, MySQL, PHP)是我们 ...

  6. JAVAEE——BOS物流项目14:Linux部署(安装jdk、tomcat、mySQL)和扩展资料

    1 学习计划 1.Linux部署 n 安装jdk n 安装tomcat n 安装MySQL n 将项目发布到tomcat 2.扩展资料 2 Linux部署 2.1 安装jdk 第一步:获取Linux系 ...

  7. 【Linux】Centos部署MySQL

    将CentOS部署MySQL需要本地配置环境.本地编译MySQL,耗时较长的情况,优化为编译成型MySQL并打包,推送并按配置部署. 首先需要在一台机器配置好环境,搭个YUM源,并将所需要的包取出备用 ...

  8. linux 部署

    一.d2 安装之后的配置 centos系统安装后的基本配置: .常用软件安装: yum install -y bash-completion vim lrzsz wget expect net-too ...

  9. Mysql+Keepalived双主热备高可用操作记录

    我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...

随机推荐

  1. jsonp跨域 封装通用方法

    jsonp跨域 封装通用方法 //用法如下 jsonp({ url:"https://www.xxxx.com", params:{wd:'b'}, callback:'show' ...

  2. Unity5优秀插件分享

    转载请标明原文地址:http://www.cnblogs.com/zhangyukof/p/6836001.html  天空盒:1.SkyboxesUnity4中自带的天空盒,经常用到.不知道为什么U ...

  3. var和let部分浅析

    ES6中新增了let命令,用于声明变量,但所声明的变量只在let命令的代码块内有效. 举个例子: var a = []; for(var i=0;i<10;i++){ a[i] = functi ...

  4. 面试 3-5年Java开发后的感受

    在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面 ...

  5. Base64编码原理及应用

    最近在做一个H5上传图片并压缩的项目,其过程主要是先将图片上传通过readAsDataURL获取上传图片base64编码,然后根据高宽比将图片画到canvas上实现压缩,在通过toDataURL获取压 ...

  6. Activiti架构分析及源码详解

    目录 Activiti架构分析及源码详解 引言 一.Activiti设计解析-架构&领域模型 1.1 架构 1.2 领域模型 二.Activiti设计解析-PVM执行树 2.1 核心理念 2. ...

  7. JVM 学习笔记二 :JVM内存区域

    一.内存分配概述

  8. [NOIP模拟]文本编辑器 题解

    bsoj5089 文本编辑器 /* 题意描述 九发明了一个完美的文本编辑器.这个编辑器拥有两个光标(cursor),所以九能够同时在两处地方插入和删除文本.这个编辑器除了正常的编辑功能以外,还有一些只 ...

  9. spring boot2 修改默认json解析器Jackson为fastjson

    0.前言 fastjson是阿里出的,尽管近年fasjson爆出过几次严重漏洞,但是平心而论,fastjson的性能的确很有优势,尤其是大数据量时的性能优势,所以fastjson依然是我们的首选:sp ...

  10. JS 获取元素、修改元素/css样式/标签属性、简单事件、数据类型

    基本使用 写在Script 标签里 引入外部js文件:<script src=" "></script> console.log(" " ...