mysql5.7的主从切换

♀尐吖头ヾ 提交于 2019-12-06 17:03:28
mysql5.7的主从切换

主库: master 10.11.0.211
从库: slave  10.11.0.210

目标:主从切换,将slave切换为master,master切换为slave


一、使用innobackup进行主从同步设置

# 应用的连接数据库的账号配置
grant select,insert,update,delete on task.* to task_user@"%" identified by "cmslU6WFkX2pBylwINy2T";

# 修改root密码
update mysql.user set authentication_string = password('root'), password_expired = 'N', password_last_changed = now() where user = 'root';

# 设置主从同步:
# 备份主库
innobackupex --defaults-file="/etc/my.cnf" --user=root -p'root' --socket=/tmp/mysql.sock --apply-log --use-memory=1G /opt/2019-12-06_15-51-53
# 应用事务
innobackupex --defaults-file="/etc/my.cnf" --user=root --socket=/tmp/mysql.sock --copy-back /data/2019-12-06_15-51-53/

# 配置主从账号
grant replication slave,reload,super on *.* to rep@'%' identified by 'wsdb123';

# 记录主库的同步位置
[root@node1 data]# cat 2019-12-06_15-51-53/xtrabackup_binlog_info 
mysql_bin.000003    154

# 设置主从同步
change master to master_host='10.11.0.211',master_user='rep',master_password='wsdb123',master_log_file='mysql_bin.000003',master_log_pos=154;

二、进行主从切换操作:

1.锁定主数据写操作:

master: 
mysql> flush tables with read lock;

2然后修改从数据库为主要数据库:

1> 保证所有从数据库都已经执行了relay log中的全部更新,在从服务器中执行stop slave io_thread,用show processlist检查,查看状态是否是Has read all relay log,表示更新完成.
slave:
mysql>stop slave;
mysql>stop slave io_thread;

mysql>show processlist\G
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 4757
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL

2> 在从服务器上执行stop slave,reset master命令,重置成主数据库

mysql>stop slave;

mysql>reset master;

mysql>reset slave all;   -- 清除同步信息

3> 删除新的主服务器数据库目录中的master.info和relay-log.info文件,否则下次重启时还会按照从服务器来启动,
关闭新主库的my.cnf配置 read_only

4> 在新的主库中查看binlog日志
mysql> show master status\G;   

mysql> show master status\G
*************************** 1. row ***************************
             File: mysql_bin.000001
         Position: 154
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 

重新设置主从同步,
附切换从数据库命令:

change master to master_host='10.11.0.210',master_user='rep', master_password='wsdb123', master_log_file='mysql_bin.000001', master_log_pos=154;
start slave;


5>从服务器上检测是否复制正常(Slave_IO_Running: Yes    &&  Slave_SQL_Running: Yes)

mysql> start slave;
Query OK, 0 rows affected (0.03 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.11.0.210
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql_bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql_bin.000001



解锁定原主数据写操作:

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

#修改原主库的my.cnf 打开read_only参数

进行相应的应用检查

数据库的测试:
主库创建表,并插入数据:
MySQL [wanxing]> use wanxing;

Database changed
MySQL [wanxing]> show tables;
+-------------------+
| Tables_in_wanxing |
+-------------------+
| users             |
+-------------------+
1 row in set (0.00 sec)

MySQL [wanxing]> create table itpart(id int,name varchar(30)) ;
Query OK, 0 rows affected (0.01 sec)

MySQL [wanxing]> insert into itpart(1,'it engineer');


从库查询数据是否同步:
mysql> select * from itpart;
+------+-------------+
| id   | name        |
+------+-------------+
|    1 | it engineer |
+------+-------------+
1 row in set (0.01 sec)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!