源端 | 目标端 |
---|---|
mariadb 5.5.x | mysql 8.0.x |
跨大版本迁移, 建议使用逻辑导出导入
mysqldump官方自带的, 单线程, 速度较慢.
mydumper 第三方工具, 支持多线程(某个别表大的话, 速度不明显).
create user 'repl'@'%' identified by 'repl';
grant all on *.* to 'repl'@'%';
flush privileges;
如果源库开启了binlog, 则跳过这一步
如果源库未开启binlog, 则需要修改配置文件,并重启mariadb(源库)
log-bin=mysql_binlogname
set global binlog_format=ROW;
mysqldump --single-transaction --master-data --databases db1,db2,db3 > t20230513.sql
参数说明
--single-transaction 按照事务导出数据
--master-data 导出文件包含 CHANGE MASTER TO 语句
--databases db1,db2,db3 指定导出数据db1,db2,db3
--host 指定主机
--port 指定端口
--user 指定用户
--password 指定密码
导出数据文件大小可能会比实际的数据文件大, 因为是逻辑导出的. (几乎没有update,delete)
如果数据文件有很多空页, 则导出的文件会比实际的小(增删改较频繁的情况 )
scp t20230512.sql IP:/root
mysql -hDEST_IP -p123456 < t20230512.sql
因为mariadb5.5无gtid_mode, 所以目标端也要关闭gtid_mode
GTID_MODE=ON时, 不支持匿名事务(源库没得gtid,所以都是默认的匿名事务)
GTID_MODE=OFF时, 只支持匿名事务
GTID_MODE=ON_PERMISSIVE时, 新事务使用gtid,但也支持匿名事务
GTID_MODE=OFF_PERMISSIVE
gtid切换顺序只能是如下箭头所示
ON <--> ON_PERMISIVE <--> OFF_PERMISIVE <--> OFF
gtid_mode | Source OFF | Source OFF_PERMISSIVE | Source ON_PERMISSIVE | Source ON |
---|---|---|---|---|
Replica OFF | Y | Y | N | N |
Replica OFF_PERMISSIVE | Y | Y | Y | Y* |
Replica ON_PERMISSIVE | Y | Y | Y | Y* |
Replica ON | N | N | Y | Y* |
set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
官网说明:https://dev.mysql.com/doc/refman/8.0/en/replication-mode-change-online-concepts.html
找到log_file和log_pos
head -100 t20230512.sql | grep 'CHANGE MASTER'
CHANGE MASTER TO
MASTER_HOST='172.17.32.44', -- 源库IP, 本环境的mariadb
MASTER_PORT=3306, -- 源库端口
MASTER_USER='repl', -- 主从账号
MASTER_PASSWORD='repl', -- 主从密码
master_log_file='mysql_binlogname.000001', -- mysqldump导出时的log_file
master_log_pos=332213432; -- mysqldump导出时的 log_pos
start slave;
show slave status\G
设置主库为只读, 就不会新产生二进制日志了. 可以等从库接收完binlog了再设置
set global read_only=ON;
判断从库是否接收完binlog, 可以在从库执行show slave status , 看到如下信息则为接收完binlog
Slave_IO_State: Waiting for source to send event
使用show slave status
看到如下信息, 则为数据同步完成
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
stop slave;
reset slave all;
1. 抽查数据
select xx from tablename where id = n;
2.验证部分表
checksum table db1.t3; -- 比较主从库相同表的hash值
3.pt-table-checksum
pt-table-checksum -h172.17.32.47 -uroot -p123456 -P3306 --no-check-binlog-format
略
通过搭建主从的方式迁移数据, 停机时间最短, 但是也较为麻烦.
8.0的数据字典和5.5的差别很大, 不建议导出数据字典, 建议只导出需要的数据.
8.0 有很多不一样的地方, 比如参数, 可以看官网: https://dev.mysql.com/doc/mysqld-version-reference/en/optvar-changes-8-0.html
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。