前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ># 故障恢复

# 故障恢复

作者头像
用户1175783
发布2020-05-09 16:20:50
7380
发布2020-05-09 16:20:50
举报

# MySQL主从配置

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

# 创建master

推荐是用mysqld_multi管理mysql服务器

代码语言:javascript
复制
[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
复制
mysqld_multi --defaults-file=/root/mysql/my_multi.cnf start 1

创建用于同步数据的账户

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

查看master状态和复制起始点

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

# 创建slave节点

代码语言:javascript
复制
[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
复制
mysqld_multi --defaults-file=/root/mysql/my_multi.cnf start 2

连接master

代码语言:javascript
复制
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
复制
start slave;

查看连接状态

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

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

代码语言:javascript
复制
stop slave;
reset master;

# 配置多个主节点

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

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

代码语言:javascript
复制
[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
复制
[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
复制
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
复制
使用不同的账号连接数据库就实现了读写分离。
代码语言:javascript
复制
通过配置文件(不推荐)
 只有确认某个主机永远不会执行写操作时才使用配置文件设置为只读
 [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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # MySQL主从配置
    • # 创建master
      • # 创建slave节点
        • # 配置多个主节点
          • # 读写分离
            • # 故障恢复
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档