目前环境如下:

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

[html] view plain copy
  1. mysql> show slave status \G
  2. *************************** 1. row ***************************
  3. Slave_IO_State: Waiting for master to send event
  4. Master_Host: 172.17.61.131
  5. Master_User: repl
  6. Master_Port: 3306
  7. Connect_Retry: 60
  8. Master_Log_File: mysql_bin.000036
  9. Read_Master_Log_Pos: 154
  10. Relay_Log_File: slave_relay_bin.000003
  11. Relay_Log_Pos: 367
  12. Relay_Master_Log_File: mysql_bin.000036
  13. Slave_IO_Running: Yes
  14. Slave_SQL_Running: Yes
  15. ...
  16. 1 row in set (0.00 sec)

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

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

[html] view plain copy
  1. mysql> flush tables with read lock;
  2. Query OK, 0 rows affected (0.01 sec)

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

maser server:

[html] view plain copy
  1. mysql> show processlist;
  2. +----+------+---------------------+------+-------------+------+---------------------------------------------------------------+------------------+
  3. | Id | User | Host                | db   | Command     | Time | State                                                         | Info             |
  4. +----+------+---------------------+------+-------------+------+---------------------------------------------------------------+------------------+
  5. |  2 | repl | 172.17.61.132:60079 | NULL | Binlog Dump | 1907 | Master has sent all binlog to slave; waiting for more updates | NULL             |
  6. |  3 | root | localhost           | NULL | Query       |    0 | starting                                                      | show processlist |
  7. +----+------+---------------------+------+-------------+------+---------------------------------------------------------------+------------------+
  8. 2 rows in set (0.00 sec)

slave server:

[html] view plain copy
  1. mysql> show processlist;
  2. +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
  3. | Id | User        | Host      | db   | Command | Time | State                                                  | Info             |
  4. +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
  5. |  1 | system user |           | NULL | Connect | 1918 | Slave has read all relay log; waiting for more updates | NULL             |
  6. |  2 | system user |           | NULL | Connect | 1918 | Waiting for master to send event                       | NULL             |
  7. |  4 | root        | localhost | NULL | Query   |    0 | starting                                               | show processlist |
  8. +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
  9. 3 rows in set (0.00 sec)

4.停止slave的进程

slave sever:

[html] view plain copy
  1. mysql> STOP SLAVE IO_THREAD;
  2. Query OK, 0 rows affected (0.02 sec)
  3. mysql>  show processlist;
  4. +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
  5. | Id | User        | Host      | db   | Command | Time | State                                                  | Info             |
  6. +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
  7. |  1 | system user |           | NULL | Connect | 2039 | Slave has read all relay log; waiting for more updates | NULL             |
  8. |  4 | root        | localhost | NULL | Query   |    0 | starting                                               | show processlist |
  9. +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
  10. 2 rows in set (0.00 sec)

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

[html] view plain copy
  1. [mysqld]
  2. socket = /usr/local/mysql/mysql.sock
  3. character_set_server= utf8
  4. init_connect= 'SET NAMES utf8'
  5. basedir= /usr/local/mysql
  6. datadir= /u01/mysql
  7. socket = /u01/mysql/mysql.sock
  8. log-error= /u01/log/mysql/mysql_3306.err
  9. pid-file= /u01/mysql/mysqld.pid
  10. lower_case_table_names = 1
  11. sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  12. secure-file-priv = /u01/backup
  13. server-id=10001
  14. log_bin = /u01/mysql/mysql_bin
  15. #skip-grant-tables
  16. innodb_flush_log_at_trx_commit=1
  17. sync_binlog=1
  18. #relay-log=/u01/mysql/slave_relay_bin
  19. expire_logs_days=10
  20. read_only=0
  21. #relay_log_recovery=on
  22. #relay_log_info_repository=TABLE
  23. max_binlog_size=1073741824
  24. #autocommit=off
  25. #long_query_time=15
  26. #slow_query_log=on
[html] view plain copy
  1. [root@qht132 ~]# service mysql restart
  2. Shutting down MySQL..                                      [  OK  ]
  3. Starting MySQL.                                            [  OK  ]

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

5.提升slave为master

[html] view plain copy
  1. mysql> stop slave;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> reset master;
  4. Query OK, 0 rows affected (0.00 sec)
  5. mysql> reset slave all;
  6. Query OK, 0 rows affected (0.01 sec)
  7. mysql> show variables like 'read_only';
  8. +---------------+-------+
  9. | Variable_name | Value |
  10. +---------------+-------+
  11. | read_only     | OFF   |
  12. +---------------+-------+
  13. 1 row in set (0.00 sec)
  14. mysql> show master status \G
  15. *************************** 1. row ***************************
  16. File: mysql_bin.000001
  17. Position: 154
  18. Binlog_Do_DB:
  19. Binlog_Ignore_DB:
  20. Executed_Gtid_Set:
  21. 1 row in set (0.00 sec)

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

[html] view plain copy
  1. mysql> grant replication slave on *.* to 'repl'@'172.17.61.%';
  2. Query OK, 0 rows affected (0.01 sec)

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

[html] view plain copy
  1. [mysqld]
  2. socket = /usr/local/mysql/mysql.sock
  3. character_set_server= utf8
  4. init_connect= 'SET NAMES utf8'
  5. basedir= /usr/local/mysql
  6. datadir= /u01/mysql
  7. socket = /u01/mysql/mysql.sock
  8. log-error= /u01/log/mysql/mysql_3306.err
  9. pid-file= /u01/mysql/mysqld.pid
  10. lower_case_table_names = 1
  11. sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  12. secure-file-priv = /u01/backup
  13. server-id=10000
  14. #log_bin = /u01/mysql/mysql_bin
  15. #skip-grant-tables
  16. #innodb_flush_log_at_trx_commit=1
  17. #sync_binlog=1
  18. expire_logs_days=10
  19. read_only=1
  20. relay_log_recovery=on
  21. relay_log_info_repository=TABLE
  22. #max_binlog_size=1073741824
  23. #autocommit=off
  24. #long_query_time=15
  25. #slow_query_log=on

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

[html] view plain copy
  1. [root@qht131 ~]# service mysql restart
  2. Shutting down MySQL..                                      [  OK  ]
  3. Starting MySQL.                                            [  OK  ]

7.将master切换为slave

[html] view plain copy
  1. mysql> reset master;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> change master to
  4. -> master_host='172.17.61.132',
  5. ->  master_user='repl',
  6. ->  master_password='repl',
  7. -> master_log_file='mysql_bin.000001',
  8. -> master_log_pos=154;
  9. Query OK, 0 rows affected, 2 warnings (0.03 sec)
  10. mysql> start slave;
  11. Query OK, 0 rows affected (0.01 sec)

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

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

[html] view plain copy
  1. mysql> show slave status\G
  2. *************************** 1. row ***************************
  3. Slave_IO_State: Waiting for master to send event
  4. Master_Host: 172.17.61.132
  5. Master_User: repl
  6. Master_Port: 3306
  7. Connect_Retry: 60
  8. Master_Log_File: mysql_bin.000001
  9. Read_Master_Log_Pos: 360
  10. Relay_Log_File: qht131-relay-bin.000002
  11. Relay_Log_Pos: 526
  12. Relay_Master_Log_File: mysql_bin.000001
  13. Slave_IO_Running: Yes
  14. Slave_SQL_Running: Yes
  15. Replicate_Do_DB:
  16. Replicate_Ignore_DB:
  17. Replicate_Do_Table:
  18. Replicate_Ignore_Table:
  19. Replicate_Wild_Do_Table:
  20. Replicate_Wild_Ignore_Table:
  21. Last_Errno: 0
  22. Last_Error:
  23. Skip_Counter: 0
  24. Exec_Master_Log_Pos: 360
  25. Relay_Log_Space: 734
  26. Until_Condition: None
  27. Until_Log_File:
  28. Until_Log_Pos: 0
  29. Master_SSL_Allowed: No
  30. Master_SSL_CA_File:
  31. Master_SSL_CA_Path:
  32. Master_SSL_Cert:
  33. Master_SSL_Cipher:
  34. Master_SSL_Key:
  35. Seconds_Behind_Master: 0
  36. Master_SSL_Verify_Server_Cert: No
  37. Last_IO_Errno: 0
  38. Last_IO_Error:
  39. Last_SQL_Errno: 0
  40. Last_SQL_Error:
  41. Replicate_Ignore_Server_Ids:
  42. Master_Server_Id: 10001
  43. Master_UUID: 744cfcde-3a9b-11e8-b299-000c2900d025
  44. Master_Info_File: /u01/mysql/master.info
  45. SQL_Delay: 0
  46. SQL_Remaining_Delay: NULL
  47. Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
  48. Master_Retry_Count: 86400
  49. Master_Bind:
  50. Last_IO_Error_Timestamp:
  51. Last_SQL_Error_Timestamp:
  52. Master_SSL_Crl:
  53. Master_SSL_Crlpath:
  54. Retrieved_Gtid_Set:
  55. Executed_Gtid_Set:
  56. Auto_Position: 0
  57. Replicate_Rewrite_DB:
  58. Channel_Name:
  59. Master_TLS_Version:
  60. 1 row in set (0.00 sec)

8.最后进行测试

新master:

[html] view plain copy
  1. mysql> create table t3 ( c1 int);
  2. Query OK, 0 rows affected (0.05 sec)

新slave:

[html] view plain copy
  1. mysql> use l5m
  2. Database changed
  3. mysql> show tables;
  4. +---------------+
  5. | Tables_in_l5m |
  6. +---------------+
  7. | t1            |
  8. | t2            |
  9. | t3            |
  10. | test_emp      |
  11. | tt            |
  12. +---------------+
  13. 5 rows in set (0.00 sec)
  14. mysql> show create table t3\G
  15. *************************** 1. row ***************************
  16. Table: t3
  17. Create Table: CREATE TABLE `t3` (
  18. `c1` int(11) DEFAULT NULL
  19. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  20. 1 row in set (0.00 sec)

至此测试完毕!

转自

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

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

转载于:https://www.cnblogs.com/paul8339/p/8779091.html

mysql5.7 主从复制的正常切换【转】相关推荐

  1. 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-lin ...

  2. mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案

    MySQL5.6主从复制(读写分离)方案 一.前言:为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低. 为了提升业务系统性能, ...

  3. MySQL5.6主从复制(读写分离)方案

    MySQL5.6主从复制(读写分离)方案 https://yq.aliyun.com/articles/24255 摘要: 一.前言:为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库 ...

  4. centos6.5 mysql5.6主从复制

    centos6.5   mysql5.6主从复制 主mysql  vi /etc/my.cnf [client] default-character-set = utf8 port           ...

  5. mysql5.7主从复制--在线变更复制类型【转】

    这里说一下关于如何在线变更复制类型(日志复制到全局事物复制),参考课程:mysql5.7复制实战 先决条件     (1)集群中所有的服务器版本均高于5.7.6 (2)集群中所有的服务器gtid_mo ...

  6. mysql5.6主从复制与基于amoeba实现读写分离

    Mysql5.6主从复制 1.特性分析说明: mysql 5.6支持多线程复制的机制并且mysql 5.6还引用了GTID的概念,使得其复制功能的配置.监控及管理变得更加易于实现,且更加健壮. TID ...

  7. MySQL5.6 主从复制配置

    2019独角兽企业重金招聘Python工程师标准>>> MySQL5.6 主从复制配置 转自本人独立博客:http://www.wangboak.com/2014/10/mysql5 ...

  8. postgresql主从复制、主从切换

    postgresql主从复制.主从切换 一. 不再需要配置recovery.conf文件 从PostgreSQL 12开始,在执行通过流复制来配置主备数据库的时候,不再需要配置额外配置recovery ...

  9. Redis(持久化、主从复制、主从切换、twemproxy、redis集群)

    文章目录 Redis Redis应用场景 下载及安装 Redis常用指令 Redis持久化 Redis主从复制 Redis的Sentinel分布式系统(主从切换) sentnel(Redis的高可用方 ...

  10. Centos mysql5.7 主从复制 之 无损复制,增强版的半同步复制 ( lossless replication )单向同步

    mysql 有四种同步方式: 1.异步复制( asynchronous replication) 原理:在异步复制中,master写数据到binlog且sync,slave request binlo ...

最新文章

  1. linux下安装mysql笔记
  2. 我的WAF Bypass实战系列
  3. DataGridView的DataGridViewComboBoxColumn列点击一次,自动处于编辑状态
  4. android 调用c wcf服务,如何使用命名管道从c调用WCF方法?
  5. 一致性hash算法_(图文案例)一致性哈希算法详解 一点课堂(多岸教育)
  6. python缩进说法_【多选题】关于Python程序中与“缩进”有关的说法中,以下选项中错误的是()。...
  7. java能写复杂的查询么_spring-data-jpa 复杂查询的写法(包含or的查询)
  8. 陈序猿,你敢创业吗?怎么才算成功?
  9. leetcode - 740. 删除与获得点数
  10. c++ 函数当参数传参,类函数当参数传参,匿名函数当参数传参,function<void()>
  11. 一个长方体玻璃容器从里面量长宽_葡萄干这样吃,功效翻倍,含铁量是葡萄的15倍!葡萄干的功效和作用...
  12. python用哪种字体比较好_女生练哪种字体比较好?适合女生写的漂亮字体推荐
  13. android studio 登录与注册,Android Studio实现QQ的注册登录和好友列表跳转
  14. win10系统在文件夹中图片不显示内容问题
  15. 解决Windows 10 无法安装.msi文件的办法
  16. 神威太湖之光入门指南
  17. kali安装搜狗拼音输入法
  18. 二、伊森商城 环境 虚拟机配置 p3
  19. 逻辑思维题及答案解析
  20. 本周最新文献速递20220306

热门文章

  1. jQuery 鼠标事件
  2. 帆软 动态改变填报数据库表;数据分析亦可用此方法
  3. linux 通知线程退出,[Linux线程]多线程的阻塞和退出
  4. 主题模型(Topic Model)与LDA算法
  5. 堆排序和优先队列的python实现
  6. 三枚Flash 0day漏洞曝光,Flash再次紧急更新
  7. Linux下互斥量加锁与解锁操作的C代码实现
  8. 3.1~4 处理器架构IA32/x86介绍+IA32架构下汇编基本介绍
  9. 线性代数知识荟萃(3)——行列式
  10. 前端性能优化 —— 起步篇(一)