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)