Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 ># 故障恢复

# 故障恢复

作者头像
用户1175783
发布于 2020-05-09 08:20:50
发布于 2020-05-09 08:20:50
82100
代码可运行
举报
运行总次数:0
代码可运行

# MySQL主从配置

首先准备两个MySQL服务器,具体mysql安装教程之前文章有介绍.

# 创建master

推荐是用mysqld_multi管理mysql服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
[mysqld1]
# 基础配置
port=3306
user=root
basedir	= /usr/local/mysql
datadir=/mysql/3306/data
pid-file = /mysql/3306/mysql.pid
socket=/mysql/3306/mysql.sock
log_error=/mysql/3306/error.log
# 服务器id,必须
server-id=1
# 开机二进制日志
log-bin=/mysql/3306/mysqlbin
# 可以忽略
binlog-ignore-db=mysql 
# 需要复制的数据库,必须
binlog-do-db=test
# STATEMENT不能解决时间函数的问题
# ROW记录每一行的改变,效率低
# MIXED自动切换,如果存在函数就用ROW,否则使用STATEMENT
binlog_format=mixed
# 二进制缓存大小
binlog_cache_size=4M

启动master

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysqld_multi --defaults-file=/root/mysql/my_multi.cnf start 1

创建用于同步数据的账户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 连接到master节点: mysql -uroot -p -S /mysql/3306/mysql.sock
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

查看master状态和复制起始点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show master status;
# File为复制的文件 Position为开始复制的接入点
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysqlbin.000001 |      682 | test         | mysql            |                   |
+-----------------+----------+--------------+------------------+-------------------+

# 创建slave节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[mysqld2]
port=3307
user=root
basedir	= /usr/local/mysql
datadir=/mysql/3307/data
socket=/mysql/3307/mysql.sock
pid-file = /mysql/3307/mysql.pid
socket=/mysql/3307/mysql.sock
log_error=/mysql/3307/error.log
server-id=2
relay-log=mysql-relay

启动slave节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysqld_multi --defaults-file=/root/mysql/my_multi.cnf start 2

连接master

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CHANGE MASTER TO MASTER_HOST='127.0.0.1',
MASTER_PORT=3307,
MASTER_USER='slave',
MASTER_PASSWORD='123456',
# 主节点当前logbin文件
MASTER_LOG_FILE='mysqlbin.000001',
# logbin文件的偏移值
MASTER_LOG_POS=682;

开始复制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
start slave;

查看连接状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show slave status \G;
# 下面两个同时为yes,表示成功
 -----------------------------------
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

连接主机失败时,重试,也可以用以下命令提升slave为主节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
stop slave;
reset master;

# 配置多个主节点

只要开启了binlog功能的mysql服务器就支持同步数据,支持数据同步就支持做为主节点.

所以我们配置多个开启binlog的mysql服务器,然后设置互为主从模式就能实现多个主节点共存.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
[mysqld1]
port=3306
user=root
basedir	= /usr/local/mysql
datadir=/mysql/3306/data
pid-file = /mysql/3306/mysql.pid
socket=/mysql/3306/mysql.sock
log_error=/mysql/3306/error.log
server-id=1
# 自增列从2开始
auto_increment_offset = 1
# 每次递增的步长
auto_increment_increment = 2
log-slave-updates = true 
relay-log=mysql-relay
log-bin=/mysql/3306/mysqlbin
binlog-ignore-db=mysql 
binlog-do-db=test
binlog_format=mixed
binlog_cache_size=4M
[mysqld2]
port=3307
user=root
basedir	= /usr/local/mysql
datadir=/mysql/3307/data
pid-file = /mysql/3307/mysql.pid
socket=/mysql/3307/mysql.sock
log_error=/mysql/3307/error.log
server-id=2
auto_increment_offset = 2
auto_increment_increment = 2
log-slave-updates = true 
relay-log=mysql-relay
log-bin=/mysql/3307/mysqlbin
binlog-ignore-db=mysql 
binlog-do-db=test
binlog_format=mixed
binlog_cache_size=4M

这里需要注意的是防止插入过快导致id重复报错,所以设置不同的起始id,步长设置为主节点数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[mysqld1]
auto_increment_offset = 1
auto_increment_increment = 2
relay-log=mysql-relay
log-slave-updates = true
[mysqld2]
auto_increment_offset = 2
auto_increment_increment = 2
relay-log=mysql-relay
log-slave-updates = true 

相互连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql:3306> CHANGE MASTER TO MASTER_HOST='127.0.0.1',
            MASTER_PORT=3307,
            MASTER_USER='slave',
            MASTER_PASSWORD='123456',
            MASTER_LOG_FILE='mysqlbin.000001',
            MASTER_LOG_POS=154;
mysql:3307> CHANGE MASTER TO MASTER_HOST='127.0.0.1',
            MASTER_PORT=3306,
            MASTER_USER='slave',
            MASTER_PASSWORD='123456',
            MASTER_LOG_FILE='mysqlbin.000001',
            MASTER_LOG_POS=154;
mysql:3306> start slave;
mysql:3307> start slave;

这就是配置多主的所有步骤.

多主多从虽然能增加mysql的连接数,但是数据会始终同步到一张表中,对插入速度并不会有任何提高,而且还会导致每次插入id都递增2而造成id不连续,浪费id空间。

# 读写分离

# 读写分离的三种方式
  1. 通过用户权限实现(推荐) 分别在主/从服务上创建读/写账号:

GRANT Select ON . TO 'reader'@'%' IDENTIFIED BY "123456"; GRANT Select,Alter,Create,INDEX,Insert,Delete,Update ON . TO 'writer'@'%' IDENTIFIED BY "123456"; ```

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用不同的账号连接数据库就实现了读写分离。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
通过配置文件(不推荐)
 只有确认某个主机永远不会执行写操作时才使用配置文件设置为只读
 [mysqld] read_only=1
 1
2

通过sql命令(配合第一种方式使用)
 该命令需要超级管理员才有权限执行,在自动切换主从时有用
 set global read_only=1;
 1

# 故障恢复

  1. 如果master宕机后恢复 对新的master节点加全库只读锁,阻止所有写入操作,并计下master节点当前得binlog信息,然后备份数据并恢复到宕机得节点中,恢复完成后让宕机得节点作为slave加入当前master节点。
  2. slave节点宕机后恢复 通常只需要重启slave节点就行,无需其它操作
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MYSQL 配置互为主从同步
A Server 1.1.1.1 (拥有完整数据) B Server 2.2.2.2
院长技术
2021/02/19
7570
Mysql5.7多实例配置
Mysql采用离线的二进制包安装方式,安装在/usr/local/mysql 两个实例配置 创建目录 > mkdir -p /usr/local/mysql/data/{3306,3307} 3306配置 > vim /etc/my3306.cnf [client] socket=/usr/local/mysql/data/3306/mysql.sock [mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data/3306 socke
入门笔记
2022/06/02
8690
部署 Mariadb HA 环境
部署 keepalived 的主要作用是为 Mariadb 提供 vip,在2个 Mariadb 实例之间切换,不间断的提供服务。
jwangkun
2021/12/27
1K0
基于HAVIP +Keepalived部署MySQL双主双从
https://cloud.tencent.com/document/product/215/20186
初一
2020/11/14
1.5K0
MySQL 5.7多实例安装配置实例
#!/bin/bash yum install -y ncurses-devel cmake gcc perl-Data-Dumper gcc-c++ useradd -s /sbin/nologin -r -M mysql tar -xzf mysql-boost-5.7.13.tar.gz cd mysql-5.7.13 cp support-files/my-default.cnf /etc/my.cnf make clean cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0 -DENABLED_LOCAL_INFILE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost/ make -j 2 make install mkdir /data/mysql -p chown mysql:mysql /data/mysql/ chown mysql:mysql -R /usr/local/mysql/ /usr/local/mysql/bin/mysqld --initialize --user=mysql
星哥玩云
2022/08/17
1.5K0
mysql多实例
同一开发环境下安装两个数据库,必须处理以下问题: 配置文件安装路径不能相同 数据库目录不能相同 启动脚本不能同名 端口不能相同 socket文件的生成路径不能相同
仙人技术
2020/04/29
2.6K0
mysql利用mysqld_multi部署单机多实例
近期博客更新不及时,是因为工作有了大的变动,今天分享个工作中遇到的一个小问题。 随着硬件层面的发展,linux系统多核已经是普通趋势,而mysql是单进程多线程,所以先天上对多进程的利用不是很高,虽然5.6版本已经在这方面改进很多,但是也没有达到100%,所以为了充分的利用系统资源,mysql有自己的补充,那就是可以部署多实例,一个实例一个端口。 一、mysql编译安装: cd /usr/local/src wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysq
老七Linux
2018/05/31
9200
linux上mysql MM(双主)及keepalived搭建
一、主备机IP及VIP规划: master1 10.1.1.14 VIP 10.1.1.16 master2    10.1.1.15 VIP 10.1.1.16
PHP开发工程师
2021/05/29
1K0
mysqld_multi 的使用方法
官方文档:https://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html   【文档有些问题,按照它的这个配置,mysqld_multi无法关闭实例】
保持热爱奔赴山海
2019/09/17
9070
一台服务器多实例mysql做主从复制
在一台服务器上开两个端口的mysql(3306、3307),做成主从复制环境 1)安装mysql(安装过程这里就不做过多介绍) 参考:http://www.cnblogs.com/kevingrace/p/6109679.html 本文在一台服务器上做主从实验 主库:172.29.16.24:3306 从库:172.29.16.24:3307 主从库的安装目录分别为/usr/local/mysql3306、/usr/local/mysql3307 主从库的数据目录分别为/data/mysql3306
洗尽了浮华
2018/01/23
1.4K0
MySQL主从复制
首先这主机和从机上安装MySQL,大家可以安装mariadb,更简单一点儿,安装命令如下:
贪挽懒月
2021/06/21
1.2K0
MySQL主从复制
如何基于 MySQL 主从模式搭建上万并发的系统架构?
在了解主从复制之前必须要了解的就是数据库的二进制日志(binlog),主从复制架构大多基于二进制日志进行。
架构师修炼
2021/08/13
6030
MySQL 主从搭建
MySQL 主从(MySQL replication),主要用于 MySQL 的实时备份或者读写分离。主从复制可以将 MySQL 主数据库中的数据实时复制到一个或多个 MySQL 从数据库中。
Se7en258
2021/09/15
4.8K0
MySQL 主从搭建
MySQL 8.X 主从配置
Desc ✏️ 本文以基于GTID的复制示例 GTID(Global Transaction ID)是对于一个已提交事务的唯一编号,并且是一个全局(主从复制)唯一的编号。 它的官方定义如下: GTID = source_id :transaction_id 7E11FA47-31CA-19E1-9E56-C43AA21293967:29 什么是sever_uuid,和Server-id 区别? 核心特性: 全局唯一,具备幂等性 GTID核心参数 重要参数: gtid-mode=on
星哥玩云
2022/08/18
2290
原有环境部署多个版本(下)
1.修改配置文件,先单独部署5.7。当前已经运行了一个数据库,那将/etc/my.cfn原有配置拷贝的一旁,等后面再用。 cp -p /etc/my.cnf /tmp/my.cnf.bak
陈不成i
2021/06/07
4100
docker学习系列12 轻松实现 mysql 主从同步
docker的一大好处是在本地可以很方便快速的搭建负载均衡,主从同步等需要多主机的环境。 可以说是极大方便了运维成本和难度。 本节在本地搭建mysql的一主一从的集群环境。
mafeifan
2018/09/10
8300
docker学习系列12 轻松实现 mysql 主从同步
Linux系统MySQL数据库主从同步实战过程
今天我们是用二进制安装包进行布署MySQL数据库服务,其它方式的安装布署方法请参考前面的文章
民工哥
2020/09/16
7550
Linux下MySQL多实例的安装部署
MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务:
星哥玩云
2022/08/17
1.4K0
Linux下MySQL多实例的安装部署
使用innobackup 2.4遇到的问题
一 前言 Percona公司发布 innobackup 2.4 版本已经很久了,增加了新的特性比如支持非Innodb表备份,指定 --safe-slave-backup,增强备份的一致性,最重要的一点是支持5.7的备份,2.2是不能备份5.7 版本的。 考虑到以后我们要上线5.7 版本,因此我们决定将我们的percona的pt工具和备份软件更新到最新版本。本文主要记录我们使用 2.4 版本过程中遇到的问题和之前的一些改变。 二 问题和差异 2.1 backup-my.cnf 文件 innobackup 2.4版本比 之前的版本多了几个参数 2.2版本的内容
用户1278550
2018/08/09
8730
mysql系列之多实例3----基于my
    上一篇博文mysql系列之多实例2----基于多配置文件介绍了,如何部署基于多配置文件的mysql多实例,本篇博文将介绍基于mysql自带的mysqld_multi工具来如何实现mysql多实例的部署和管理!
py3study
2020/01/06
4300
相关推荐
MYSQL 配置互为主从同步
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验