日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2023/12/4 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的mysql 5.7 主从切换_mysql5.7 主从复制的正常切换【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。