目录
迁移拓扑图
业务方案沟通
相关知识传送门
准备工作
MGR数据迁移
例子中的场景是 M-S 3305 转到 G-R 3306
1、迁移前检查
a. 表必须使用Innodb引擎
b. 表必须有主键或者唯一索引
c.自增ID非连续,自增列的起始值和步长不是1,业务逻辑不能依赖自增
d. 不使用 CREATE TABLE … SELECT语法
e. 在一个事务中 CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE
f. 在一个事务中或语句中同时更新事务和非事务表,比如在一个事务中更新 innodb表和myisam表。要更新的所有非事务表是临时表除外
g.对MGR集群多机房部署
h.不使用 select xxx for update 语法
2、版本升级到MySQL 5.7
a. 升级MySQL从库实例,通知业务上线 (DBA)
b. 观察一周高版本从库是否正常使用 (业务)
c. MySQL 主库切换到高版本实例。验证写,并观察一段时间 (DBA &业务)
d. 验证没问题后,端口全部实例升级 (DBA)
e. GTID 开启(DBA)
注:
a. 升级将使用滚动升级的方式,5.5升级到5.6,5.6升级到5.7
b. 升级时会保留老版本MySQL实例并保持同步。若遇到不兼容或者其他问题可以快速回滚
c. 升级时若发现语法不兼容,联系DBA修改语法限制
3、MGR 迁移
a.主从集群与MGR集群搭建双向同步(DBA)
b.将读切至新集群验证是否正常(业务方)
c.将写切至新集群(业务方)
d.观察一段时间,确认所有业务迁移至新集群(DBA&业务)
e.断开双向复制 (DBA)
注:
1. 需要将数据库域名配置为新集群域名
2. 做数据迁移时,会保证两个集群为双向复制,老集群若有写入会同步到新集群中,且有任何问题可以回滚至老集群,但双向复制为中间状态,一旦开始写迁移,不可长久保持双主状态,需尽快把所有业务迁移。
3.3305迁移MGR 方案图如上
4.业务逻辑尽量不使用select xxx for update,由于锁不在组员内共享,很可能会导致死锁
限制与环境要求
https://blog.csdn.net/nicolevv/article/details/90716555
GITD 开启
https://blog.csdn.net/nicolevv/article/details/90716607
1、主键检查
select table_schema,table_name from information_schema.tables where (table_schema,table_name) not in(select distinct table_schema,table_name from information_schema.columns where COLUMN_KEY='PRI' ) and table_schema not in ('sys','mysql','information_schema','performance_schema');
2、innodb 引擎检查
select table_schema,table_name from tables where table_schema not in ('information_schema','mysql','performance_schema') and ENGINE != 'innodb';
3、语法确认
4、参数修改,在下面的流程里的参数修改部分有写
1、规划自增ID以及端口号
IP | auto_increment_offset | auto_increment_increment | 角色 | 机房 |
x.x.x.1 |
1 | 7 | M-S主库 | A |
x.x.x.2 | 2 | 7 | 双向节点 | C |
x.x.x.3 | 3 | 7 | GR组员 | A |
x.x.x.4 | 4 | 7 | GR组员 | A |
x.x.x.5 | 5 | 7 | GR组员 | B |
x.x.x.6 | 6 | 7 | GR组员 | B |
2、停mb从库实例(在这之前可以先做数据一致性校验) (这个从库上的gtid_set 一定要与主库保证一致,为了后面做双主的时候不修改gtid_purged值,自动找位点)
3、从规划中的五个节点的机器上拷贝
rsync --password-file=/etc/rsyncd.secrets.passfile -avP --progress --exclude auto.cnf [email protected]::data1/mysql3306_expanding /data1/
4、修改配置文件
# Group Replication
#server-id 修改
transaction-isolation = READ-COMMITTED
binlog_checksum = NONE
master_info_repository = TABLE
relay_log_info_repository = TABLE
plugin-load = group_replication.so
transaction_write_set_extraction = XXHASH64
loose-group_replication_group_name = "05bf1a54-82d3-11e9-b604-c81f66d12345"
loose-group_replication_start_on_boot = OFF
loose-group_replication_local_address = 'x.x.x.2:13306'
loose-group_replication_group_seeds = 'x.x.x.2:13306,x.x.x.3:13306,x.x.x.4:13306,x.x.x.5:13306;x.x.x.6:13306,'
group_replication_ip_whitelist = '10.0.0.0/8'
loose-group_replication_bootstrap_group = OFF
loose-group_replication_single_primary_mode = OFF # Trun off Single primary
loose-group_replication_enforce_update_everywhere_checks = ON # Multi-Primary Mode
loose-group_replication_transaction_size_limit = 52428800 # 5.7.19 Configures the maximum transaction size in bytes which the group accepts
# loose-group_replication_unreachable_majority_timeout
report_host = 'x.x.x.2'
report_port = 3306
# Multi Primary Mode
auto_increment_offset = 2
auto_increment_increment = 7
5、授权
mv mysql3305/ mysql3306
useradd -r -g mysql -M -s /sbin/nologin my3306
chown -R my3306: /data1/mysql3306/
6、启动实例
7、其他机器重复步骤 3、4(修改参数)、5、6
8、做拷贝的mb节点起来,回归M-S集群
9、双向复制实例,x.x.x.2
start slave ; #打开主从的复制通道
10、GR开启
第一个实例:
SET GLOBAL group_replication_bootstrap_group = ON ;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF ;
新加入成员:
change master to master_user = 'xxxxxx',master_password='xxxxxx' for channel 'group_replication_recovery';
START GROUP_REPLICATION;
11、搭建双主(M-S 主库指向 GR 双向复制节点,gtid点位一致)
change master to master_host='x.x.x.1',master_port=3306,master_auto_position =1;
12、做数据一致性校验,验证复制pt-table-sync --print --sync-to-master h=x.x.x.2,u=root,p='123',P=3306 --verbose --wait=10 --transaction --engines=innodb --recursion-method=processlist --check-triggers --foreign-key-checks -unique-checks --charset=utf8 >3306.log
SELECT * FROM performance_schema.replication_group_members;
Amazing!