mysql 5.7 主从切换_mysql5.7 主从复制的正常切换【转】

目前环境如下:

master server IP:172.17.61.131

slave server IP:172.17.61.132

mysql version: mysql-5.7.21-linux

目标:计划内的主从复制正常切换

1.切换之前需要检查slave的同步状态,对master进行锁表。

slave server: 确保Slave_IO_Running和Slave_SQL_Running都为YES

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.17.61.131

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql_bin.000036

Read_Master_Log_Pos: 154

Relay_Log_File: slave_relay_bin.000003

Relay_Log_Pos: 367

Relay_Master_Log_File: mysql_bin.000036

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

...

1 row in set (0.00 sec)

master server进行锁表操作,由于我是测试环境没有应用,所以锁表很快。

2.在flush tables with read lock成功获得锁之前,必须等待所有语句执行完成(包括SELECT)。所以如果有个慢查询在执行,或者一个打开的事务,或者其他进程拿着表锁,flush tables with read lock就会被阻塞,直到所有的锁被释放。

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.01 sec)

3.接着要确保master所有的binlog已同步到slave,并且slave都已apply了所有的binlog。

maser server:

mysql> show processlist;

+----+------+---------------------+------+-------------+------+---------------------------------------------------------------+------------------+

| Id | User | Host                | db   | Command     | Time | State                                                         | Info             |

+----+------+---------------------+------+-------------+------+---------------------------------------------------------------+------------------+

|  2 | repl | 172.17.61.132:60079 | NULL | Binlog Dump | 1907 | Master has sent all binlog to slave; waiting for more updates | NULL             |

|  3 | root | localhost           | NULL | Query       |    0 | starting                                                      | show processlist |

+----+------+---------------------+------+-------------+------+---------------------------------------------------------------+------------------+

2 rows in set (0.00 sec)

slave server:

mysql> show processlist;

+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+

| Id | User        | Host      | db   | Command | Time | State                                                  | Info             |

+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+

|  1 | system user |           | NULL | Connect | 1918 | Slave has read all relay log; waiting for more updates | NULL             |

|  2 | system user |           | NULL | Connect | 1918 | Waiting for master to send event                       | NULL             |

|  4 | root        | localhost | NULL | Query   |    0 | starting                                               | show processlist |

+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+

3 rows in set (0.00 sec)

4.停止slave的进程

slave sever:

mysql> STOP SLAVE IO_THREAD;

Query OK, 0 rows affected (0.02 sec)

mysql>  show processlist;

+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+

| Id | User        | Host      | db   | Command | Time | State                                                  | Info             |

+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+

|  1 | system user |           | NULL | Connect | 2039 | Slave has read all relay log; waiting for more updates | NULL             |

|  4 | root        | localhost | NULL | Query   |    0 | starting                                               | show processlist |

+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+

2 rows in set (0.00 sec)

5.修改slave的my.cnf,重启mysql

[mysqld]

socket = /usr/local/mysql/mysql.sock

character_set_server= utf8

init_connect= 'SET NAMES utf8'

basedir= /usr/local/mysql

datadir= /u01/mysql

socket = /u01/mysql/mysql.sock

log-error= /u01/log/mysql/mysql_3306.err

pid-file= /u01/mysql/mysqld.pid

lower_case_table_names = 1

sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

secure-file-priv = /u01/backup

server-id=10001

log_bin = /u01/mysql/mysql_bin

#skip-grant-tables

innodb_flush_log_at_trx_commit=1

sync_binlog=1

#relay-log=/u01/mysql/slave_relay_bin

expire_logs_days=10

read_only=0

#relay_log_recovery=on

#relay_log_info_repository=TABLE

max_binlog_size=1073741824

#autocommit=off

#long_query_time=15

#slow_query_log=on

[root@qht132 ~]# service mysql restart

Shutting down MySQL..                                      [  OK  ]

Starting MySQL.                                            [  OK  ]

需要开启原slave的bin_log,关闭relay_log*,关闭read_only

5.提升slave为master

mysql> stop slave;

Query OK, 0 rows affected (0.00 sec)

mysql> reset master;

Query OK, 0 rows affected (0.00 sec)

mysql> reset slave all;

Query OK, 0 rows affected (0.01 sec)

mysql> show variables like 'read_only';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| read_only     | OFF   |

+---------------+-------+

1 row in set (0.00 sec)

mysql> show master status \G

*************************** 1. row ***************************

File: mysql_bin.000001

Position: 154

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

在新的master上建立同步帐户并赋予同步权限(由于我为了省事,之前主从配置的时候将61网段的权限都赋予给了repl,所以这一步我也可以不做)

mysql> grant replication slave on *.* to 'repl'@'172.17.61.%';

Query OK, 0 rows affected (0.01 sec)

6.修改原master的my.cnf,重启mysql

[mysqld]

socket = /usr/local/mysql/mysql.sock

character_set_server= utf8

init_connect= 'SET NAMES utf8'

basedir= /usr/local/mysql

datadir= /u01/mysql

socket = /u01/mysql/mysql.sock

log-error= /u01/log/mysql/mysql_3306.err

pid-file= /u01/mysql/mysqld.pid

lower_case_table_names = 1

sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

secure-file-priv = /u01/backup

server-id=10000

#log_bin = /u01/mysql/mysql_bin

#skip-grant-tables

#innodb_flush_log_at_trx_commit=1

#sync_binlog=1

expire_logs_days=10

read_only=1

relay_log_recovery=on

relay_log_info_repository=TABLE

#max_binlog_size=1073741824

#autocommit=off

#long_query_time=15

#slow_query_log=on

关闭原master的binlog,开启relay_log*,打开read_only状态

[root@qht131 ~]# service mysql restart

Shutting down MySQL..                                      [  OK  ]

Starting MySQL.                                            [  OK  ]

7.将master切换为slave

mysql> reset master;

Query OK, 0 rows affected (0.00 sec)

mysql> change master to

-> master_host='172.17.61.132',

->  master_user='repl',

->  master_password='repl',

-> master_log_file='mysql_bin.000001',

-> master_log_pos=154;

Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

master_log_file和master_log_pos需指定为新master切换后显示的起始位置

检查一下新slave的状态,确保slave_io_running和slave_sql_running都为YES。

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.17.61.132

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql_bin.000001

Read_Master_Log_Pos: 360

Relay_Log_File: qht131-relay-bin.000002

Relay_Log_Pos: 526

Relay_Master_Log_File: mysql_bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 360

Relay_Log_Space: 734

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 10001

Master_UUID: 744cfcde-3a9b-11e8-b299-000c2900d025

Master_Info_File: /u01/mysql/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

Replicate_Rewrite_DB:

Channel_Name:

Master_TLS_Version:

1 row in set (0.00 sec)

8.最后进行测试

新master:

mysql> create table t3 ( c1 int);

Query OK, 0 rows affected (0.05 sec)

新slave:

mysql> use l5m

Database changed

mysql> show tables;

+---------------+

| Tables_in_l5m |

+---------------+

| t1            |

| t2            |

| t3            |

| test_emp      |

| tt            |

+---------------+

5 rows in set (0.00 sec)

mysql> show create table t3\G

*************************** 1. row ***************************

Table: t3

Create Table: CREATE TABLE `t3` (

`c1` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

至此测试完毕!

转自

mysql5.7 主从复制的正常切换 - CSDN博客

https://blog.csdn.net/jolly10/article/details/79877564

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Native之最构建对象通过构造方法传递值然后再获取值

1 问题 在一个文件构建一个对象,然后在另外一个文件里面new这个对象,通过构造方法传递参数,然后再获取这个参数 2 测试代码 Student.js文件如下 use strict;import React from reactimport {NativeModules, NativeEventEmitter, DeviceEventEmitter,Alert} from react-nativ…

System.Diagnostics.Process.Start()用法详解

System.Diagnostics.Process.Start(); 能做什么呢?它主要有以下几个功能: 1、打开某个链接网址(弹窗)。 2、定位打开某个文件目录。 3、打开系统特殊文件夹,如“控制面板”等。 那么它是怎么实现这几个功能的呢?在讲应用前,我们先来看看Process.Star()的构造方法。

后缀自动机在复习

后缀自动机,处理所有子串。 注意:nq节点的建立,是因为新加了一个字母使原本为一个状态的东西必须分为两个状态,例如ba到baa,a的出现次数变多,a状态与ba状态分离。baa的新pnt不能是ba,因为空节点…

1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 510 Solved: 196[Submit][Status][Discuss]Description Farmer Johns N cows (1 < N < 100,000) share many similarities. In fact, FJ has been able to narrow…

.NET点滴:SpanT

昨天小桂问了一个问题&#xff0c;把一个数组的全部元素加1&#xff0c;有什么好办法&#xff0c;于是有了下面的分析&#xff1a;var arr new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //方法一 foreach (var i in arr) {i; } //方法二 for (var i 0; i < arr.Length; i) {…

React Native之通过DeviceEventEmitter发送和接收事件

1 怎么实现发送和接收事件 理论上封装了Android原生广播的代码,需要注册和反注册,这里用DeviceEventEmitter实现 //增加监听 DeviceEventEmitter.addListener //取消监听 //this.emitter.remove(); 这里可也可以通过安卓原生向页面js发送消息,可以参考我的这篇博客 React Nat…

navicat循环执行上下两行相减sql语句_SQL太难?你离完全理解SQL就差这10步!

- 点击上方“中国统计网”设置⭐星标不迷路&#xff01;-很多程序员视 SQL 为洪水猛兽。SQL 是一种为数不多的声明性语言&#xff0c;它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言)。我们每天…

mysql游标书写_mysql中光标如何书写

mysql中光标书写的方法&#xff1a;首先声明光标&#xff1b;然后开启光标&#xff0c;代码为【OPEN cursor_name】&#xff1b;接着捕获光标&#xff1b;最后关闭光标&#xff0c;代码为【CLOSE cursor_name】。本教程操作环境&#xff1a;windows7系统、mysql5.8版&#xff0…

9个不懂,说得好!

1.不懂珍惜&#xff0c;守着金山也不会快乐。2.不懂宽容&#xff0c;再多的朋友也会离去。3.不懂感恩&#xff0c;再优秀也难以成功。4.不懂行动&#xff0c;再聪明也难以圆梦。5.不懂合作&#xff0c;再拼搏也难以大成。6.不懂积累&#xff0c;再挣钱也难以大富。7.不懂满足&a…

useradd命令详解

功能说明&#xff1a;建立用户帐号。语  法&#xff1a;useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号] 或 useradd -D [-b][-e <有…

上海女白领吃火锅碰瓷,支付宝口碑居然真的要赔?

昨天中午&#xff0c;新闻晨报在微博上发出一条新闻&#xff1a;上海一位汪小姐吃火锅的时候&#xff0c;因用支付宝口碑扫码中了一个999元大红包&#xff0c;结果因为太激动手机不小心掉进油汤里&#xff0c;捞出来以后开不了机了。关键是这位小姐觉得这是口碑和商家活动导致的…

thinkphp的select和find的区别(转)

做普通PHP项目转thinkphp时&#xff0c;字段自动完整匹配&#xff0c;ajax时前台数据一直取不到&#xff0c;后发现是select和find返回数据集有差异&#xff0c;参考下面方法修改。 $this->ajaxReturn($msg[0]); select返回的是二维数组&#xff0c;find返回一维数组。 thin…

ASP.NETCore统一处理404错误都有哪些方式?

当未找到网页并且应用程序返回 404 错误时&#xff0c;ASP.NET Core MVC 仅呈现通用浏览器错误页面&#xff0c;如下图所示这不是很优雅&#xff0c;是吗&#xff1f;我们平时看到的404页面一般是这样的还有这样的试了下京东&#xff0c;地址不存在的时候是会重定向到首页下面就…

React Native之组件(Component)生命周期学习笔记

1、Component介绍 一般Component需要被其它类进行继承&#xff0c;Component和Android一样&#xff0c;也有生命周期 英文图片如下 2 具体说明 1)、挂载阶段 constructor() //构造函数,声明之前先调用super(props) componentWillMount()//因为它发生在render()方法前&…

基于junit4的关于个人所得税计算的等价类与边界值_《边界值分析》-有这篇就够了...

目录&#xff1a;定义&#xff08;What&#xff09;为什么使用该方法&#xff1f;&#xff08;Why&#xff09;如何选定边界值&#xff1f;&#xff08;How&#xff09;设计测试用例根据测试用例的完整性划分边界的分类使用场景实战演练边界值分析的优缺点特殊值测试边界值分析…

【Envi风暴】ENVI中求两幅遥感影像的相关性(相关系数)

相关性,是指两个变量的关联程度。一般地,从散点图上可以观察到两个变量有以下三种关系之一:两变量正相关、负相关、不相关。如果一个变量高的值对应于另一个变量高的值,相似地,低的值对应低的值,那么这两个变量正相关。在土壤中,孔隙率和渗透度就具有典型的正相关。反之…

win 7 旗舰版镜像 注入USB3.0 驱动

问题来源&#xff1a;原版的win7镜像没有集成USB3.0的驱动&#xff0c;然后如今的电脑主板基本是XHCI主控&#xff08;以前是EHCI的&#xff09;&#xff0c;这一变动导致在安装Win7的过程中会出现USB接口全部失灵的状况&#xff0c;所以在安装时无法识别USB3.0接口的键盘鼠标和…

(三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE)…

Git之pull后回退版本

1 问题 更新代码 git pull 然后我想回退上一个版本 2 解决办法 1) 查看历史记录 git reflog git reflog 8b0f68e HEAD{0}: pull: Fast-forward 1b2c852 HEAD{1}: reset: moving to HEAD{1} d6cf47e HEAD{2}: pull: Fast-forward 1b2c852 HEAD{3}: pull: Fast-forward2)…

C# StreamReader类和StreamWriter类

先看看 StreamReader&#xff0c;将前面的示例转换为读取文件以使用 StreamReader。它现在看起来容易得多。StreamReader 的构造函数接收FileStream。使用 EndOfStream 属性可以检查文件的末尾&#xff0c;使用ReadLine 方法读取文本行&#xff1a;public static void ReadFile…