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)