MySQL主从切换具体步骤(非常详细)
在实际工作环境中,有时候会遇到这样的问题:在一个工作环境中,有一个主数据库服务器 A,两个从数据库服务器 B、C 同时指向主数据库服务器 A,当主数据库服务器 A 发生故障时,需要将其中的一个从数据库服务器 B 切换成主数据库服务器,同时修改数据库服务器 C 的配置,使其指向新的主数据库服务器 B。
下面介绍一下切换主从服务器的具体操作步骤。
2) 再从数据库 B 上停止 slave 服务,然后执行 reset master,重置成主数据库。
3) 在从数据库服务器 B 上添加具有 replication 权限的用户 rep1,查询主数据库状态:
4) 在从数据库服务器 C 上配置复制的参数。
5) 在从数据库服务器 C 上执行 show slave status 命令,查看从数据库服务是否成功启动:
6) 在主数据库服务器 B 和从数据库服务器 C 上面测试数据库是否成功设置复制功能。首先,查看主数据库服务器 B 中 test 库中表的情况:
7) 在主数据库服务器 B 中增加表 rep_t3:
8) 在从数据库服务器 C 中查询,看看表 rep_t3 是否从主数据库服务器 B 上成功复制过来:
下面介绍一下切换主从服务器的具体操作步骤。
MySQL主从切换步骤
1) 首先要确保所有的从数据库都已经执行了 relay log 中的全部更新,查看从数据库的状态是否是 Has read all relay log(是否更新都已经执行完成)。mysql> stop slave IO_THREAD; Query OK, 0 rows affected (0.00 sec) mysql> SHOW PROCESSLIST \G; *** 1. row *** Id: 2 User: system user Host: db: NULL Command: Connect Time: 39 State: Has read all relay log; waiting for the slave I/O thread to update it Info: NULL *** 2. row *** Id: 3 User: root Host: localhost db: NULL Command: Query Time: 0 State: NULL Info: SHOW PROCESSLIST 2 rows in set (0.00 sec)
2) 再从数据库 B 上停止 slave 服务,然后执行 reset master,重置成主数据库。
mysql> stop slave; Query OK, 0 rows affected (0.00 sec) mysql> reset master; ERROR 1186 (HY000): Binlog closed, cannot RESET MASTER此时报 Binlog 错误(表示没有设置),不能够执行 reset master 命令。下面关闭数据库服务,然后修改 /etc/my.cnf,在 [mysqld2]后面的配置选项中添加 log-bin 选项:
[mysqld2] … log-bin = /usr/local/var/mysql2/mysql-bin配置完成后,重启数据库服务,登录数据库 B,然后执行如下命令开启主数据库功能:
mysql> stop slave; Query OK, 0 rows affected (0.00 sec) mysql> reset master; Query OK, 0 rows affected (0.04 sec)此时从数据库 B 已经成功切换成为主数据库,下面接着设置从数据库。
3) 在从数据库服务器 B 上添加具有 replication 权限的用户 rep1,查询主数据库状态:
mysql> grant replication slave on *.* to 'rep1'@'localhost' identified by '123'; Query OK, 0 rows affected (0.00 sec) mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 229 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
4) 在从数据库服务器 C 上配置复制的参数。
mysql> change master to -> master_host='127.0.0.1', -> master_user='rep1', -> master_password='123', -> master_port=3307, -> master_log_file='mysql-bin.000002', -> master_log_pos=98; Query OK, 0 rows affected (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.01 sec)
5) 在从数据库服务器 C 上执行 show slave status 命令,查看从数据库服务是否成功启动:
mysql> show slave status \G; *** 1. row *** Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: rep1 Master_Port: 3307 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 98 Relay_Log_File: mysql3-relay-bin.000002 Relay_Log_Pos: 235 Relay_Master_Log_File: mysql-bin.000002 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: 98 Relay_Log_Space: 235 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 1 row in set (0.00 sec)
6) 在主数据库服务器 B 和从数据库服务器 C 上面测试数据库是否成功设置复制功能。首先,查看主数据库服务器 B 中 test 库中表的情况:
mysql> use test; Database changed mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | rep_t1 | | rep_t2 | +----------------+ 2 rows in set (0.00 sec)然后,查询从数据库服务器 C 中 test 库中表的情况:
mysql> use test; Database changed mysql> show tables; Empty set (0.01 sec)
7) 在主数据库服务器 B 中增加表 rep_t3:
mysql> create table rep_t3(data int); Query OK, 0 rows affected (0.01 sec)
8) 在从数据库服务器 C 中查询,看看表 rep_t3 是否从主数据库服务器 B 上成功复制过来:
mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | rep_t3 | +----------------+ 1 row in set (0.00 sec)至此,主从数据库成功地做了切换。最后,如果原来的主数据库服务器 A 可以修复,可以考虑采用以上方法将数据库服务器 A 配置成为数据库服务器 B 的从数据库。