通过xtrabackup工具实现mysql大量数据迁移

通过xtrabackup工具实现mysql大量数据迁移

迁移前请确保数据库版本一致,具体至小版本

Mysql Version:8.0.19

主:192.168.118.21:3306 从:192.168.118.31:3306

1、安装XtraBackup工具 (主从服务器均需要安装)

1)下载工具

wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.34-29/binary/tarball/percona-xtrabackup-8.0.34-29-Linux-x86_64.glibc2.17.tar.gz

tar zxvf percona-xtrabackup-8.0.34-29-Linux-x86_64.glibc2.17.tar.gz

2、迁移数据

1)使用 XtraBackup 备份主库(在主库中执行)

cd /root/percona-xtrabackup-8.0.34-29-Linux-x86_64.glibc2.17/bin

./xtrabackup --defaults-file=/etc/my.cnf --backup --user=repl --password=jjxt@123 --target-dir=/opt/app/backup/3306 --host 192.168.118.21 --port=3306

指定数据目录:--datadir=/data/mysql/mysql_3306/data

提示如下则完成导出:

descript

2)报错解决

①权限报错

报错:2025-07-02T16:15:52.597028+08:00 0 [ERROR] [MY-011825] [Xtrabackup] failed to execute query 'LOCK INSTANCE FOR BACKUP' : 1227 (42000) Access denied; you need (at least one of) the BACKUP_ADMIN privilege(s) for this operation

MySQL 数据库授权用户没有 BACKUP_ADMIN 权限(尽量使用root用户,避免出现其他权限问题)。为了解决该问题,需要在 MySQL 数据库中授权 root 用户 BACKUP_ADMIN 权限,具体操作步骤如下:

mysql -uroot -h192.168.118.21 -P3306 -p

GRANT BACKUP_ADMIN ON *.* TO 'root'@'%';

mysql> show grants for 'root'@'%';

mysql> FLUSH PRIVILEGES;

②目录报错

2025-07-02T16:38:16.564363+08:00 0 [ERROR] [MY-013862] [InnoDB] Neither found #innodb_redo subdirectory, nor ib_logfile* files in ./

默认程序会找/etc/my.cnf配置文件,若搭建时不是此目录需要单独指定 --defaults-file=/etc/my.cnf

3)将备份传输到从库

cd /opt/app/backup

tar zcvf 3306.tar.gz 3306/

scp 3306.tar.gz root@192.168.118.31:/opt/app/backup

4)对原数据进行备份

mysqld_multi stop 3306 #停止数据库

mv /data/mysql/mysql_3306/data /opt/app/backup/data_3306 #将数据目录备份

5)恢复备份到从库数据目录(从库执行)

cd /opt/app/backup && tar zxvf 3306.tar.gz

descript

6)准备备份(在从库中执行)

./xtrabackup --prepare --target-dir=/opt/app/backup/3306

–target-dir:备份文件目录

descript

7)恢复备份到从库的数据目录(在从库中执行)

#将备份文件拷贝至数据目录

./xtrabackup --datadir=/data/mysql/mysql_3306/data --copy-back --target-dir=/opt/app/backup/3306

–target-dir:备份文件目录

--datadir=数据目录

descript

#授权

chown -R mysql:mysql /data/mysql/mysql_3306/

#启动数据库

mysqld_multi start 3306

3、修复主从

1)获取 binlog 文件名和位置(查看 xtrabackup_binlog_info)(可以从备份文件内获取,也可以登录主库获取)

[root@node-2 log]# cat /opt/app/backup/3306/xtrabackup_binlog_info

binlog.000013 157

2)配置从库连接主库并启动复制(在从库中执行)

#连接主库

mysql> CHANGE MASTER TO

-> MASTER_HOST='192.168.118.31',

-> MASTER_USER='repl', ## 之前在主库中设置的主从复制用户

-> MASTER_PASSWORD='jjxt@123',

-> MASTER_LOG_FILE='mysql3306_bin.000013',

-> MASTER_LOG_POS=157;

Query OK, 0 rows affected, 1 warning (0.02 sec)

#启动slave

START SLAVE;

3)检查主从复制状态

SHOW SLAVE STATUS \G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

posted @ 2025-07-03 14:09  小白不怕黑  阅读(71)  评论(0)    收藏  举报