目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

备份恢复与数据迁移

DBA 在数据库备份恢复方面的职责

全备

增量

定期恢复演练

故障恢复

迁移(停机时间、回退方案)

备份类型

  • 热备:在数据库正常业务时,备份数据,并且能够一致性恢复(只能是 innodb)
  • 稳备:锁表备份,只能查询修改,不能修改(myisam)
  • 冷备:关闭数据库业务,数据库没有任何变更的情况下,进行备份数据。

备份方式及工具

  • 逻辑备份:基于 SQL 语句进行备份

    1mysqldump
    2mysqlbinlog
    
  • 物理备份:基于磁盘数据文件备份

    1xtrabackup(XBK):percona   第三方(推荐使用)
    2Mysql Enterprise Backup (MEB)
    

逻辑备份 VS 物理备份

  • mysqldump(MDP)
    1# 优点
    21.不需要下载安装
    32.备份出来的是SQL,文本格式,可读性高,便于备份处理
    43.压缩比较高,介绍备份的磁盘空间
    5
    6# 缺点
    71.依赖于数据库引擎,需要从磁盘把数据读出,然后转换成SQL进行存储,比较耗费资源,数据量大的话效率较低
    82.100G以内的数据量级,可以使用mysqldump,也可以使用xtrabackup
    93.超过TB以上,也可以选择mysqldump,配合分布式的系统
    
  • xtrabackup(XBK)
    1# 优点
    21.类似于直接cp数据文件,不需要管理逻辑结构,相对来说性能较高
    3
    4# 缺点
    51.可读性差
    62.压缩比低,需要更多磁盘空间
    73.建议大于100G且小于1TB的时候使用
    8
    

备份策略

全备:全库备份,备份所有数据。

增量:备份变化数据。

1逻辑备份 = mysqldump(全备) + mysqlbinlog(增量)
2物理备份 = xtrabackup_full + xtrabackup_incr + mysqlbinlog 或者 xtrabackup_full + mysqlbinlog

根据数据量设计备份周期,比如:周日全备,周 1-周 6 增量。

逻辑备份工具-mysqldump

连接方式

1# 本地备份的连接方式
2mysqldump -uroot -pxxx -S /tmp/mysql.sock
3
4# 远程备份的连接方式
5mysqldump -uroot -pxxx -h 192.168.31.210 -P 3306

基本备份参数

 1-A	# 全库备份
 2-B	# 备份单个库或多个库
 3库名 表名
 4
 5# 备份全库
 6mkdir -p /data/backup
 7mysqldump -uroot -p123 -A -S /tmp/mysql.sock > /data/backup/full.sql
 8
 9# 备份oldboy和world库
10mysqldump -uroot -p123 -B world oldboy -S /tmp/mysql.sock > /data/backup/db.sql
11
12# 备份某个库下的一张或多张表:别分world数据库下的city和country表(恢复数据的时候需要提前建库并且use database,只会备份表)
13mysqldump -uroot -p123 world city country -S /tmp/mysql.sock > /data/backup/tab.sql

备份必加参数

 1-R	# 在备份时,同时备份存储过程和函数,如果没有会自动忽略
 2-E	# 在备份时,同时备份event,如果没有会自动忽略
 3--triggers	# 在备份时,同时备份触发器,如果没有会自动忽略
 4--master-data=2	#记录备份时候记录当前position号,作为将来日志截取的起点,自动锁表,配合 --single-transaction,减少锁表(innodb引擎)
 5--single-transaction	# 对于innodb的表,实现快照备份,不锁表
 6--set-gtid-purged=auto	# 默认是auto,on
 7使用场景:
 81. --set-gtid-purged=OFF,可以使用在日常备份参数中
 9mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction --set-gtid-purged=OFF > /data/backup/full.sql
102.auto , on :在构建主从复制环境时需要的参数配置
11mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction --set-gtid-purged=ON > /data/backup/full.sql
12
13--max-allowed-packet=128M  #避免由于备份大表产生的数据包报错问题
14

恢复思路

11.全备的时候自动记录日志当前的position号
22.全部的时候自动滚动生成新的bin_log日志
3
4mysql> source  /data/backup/full.sql

备份恢复案例(mysqldump+binlog)

数据量 80G,每日数据增长 5-6M

备份策略:每天 mysqldump 全备 + binlog 备份

故障描述:周三下午 2 点,数据路径由于某原因数据损坏

处理思路:

1.挂出维护页。

2.评估数据损坏状态(全部丢失【直接生产恢复】 or 部分丢失【从备份中导出单表数据,或者测试库进行全部恢复,再把单表导回生产库中】)

3.恢复全部,将数据追溯到周二晚上 23:00 状态,

4.截取并恢复从备份时刻到周三下午 2 点误删除之前 binlog

5.校验数据的一致性(测试人员会校验)

6.撤除维护页,恢复生产

1

处理结果:经过 30~40 分钟处理,业务恢复,评估此次故障的处理的合理性和实用性。

案例模拟

1、进行周二晚上 23:00 的全备

 1[root@localhost backup]# mysqldump -uroot -p123 -A -R --triggers -E --master-data=2 --single-transaction > /data/backup/full.sql
 2[root@localhost backup]# ll -h
 3total 49M
 4-rw-r--r--. 1 root root 49M May  9 09:22 full.sql
 5
 6# 记录备份时候记录当前position号,作为将来日志截取的起点,起点就是MASTER_LOG_POS=22108059;
 7[root@localhost backup]# vim full.sql
 8-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=22108059;
 9
10# 如果使用GTID来恢复,下面代表从285开始
11[root@localhost backup]# vim full.sql
12SET @@GLOBAL.GTID_PURGED='f98d1e0b-a7e4-11eb-8259-080027fb878b:1-284';

2、模拟周二晚上 23:00 之后到周三下午 2 点误删除之前的业务操作

 1mysql> create database mdp charset utf8mb4;
 2mysql> use mdp;
 3mysql> create table t1(id int);
 4mysql> insert into t1 values(1),(2),(3);
 5mysql> commit;
 6mysql> select * from t1;
 7+------+
 8| id   |
 9+------+
10|    1 |
11|    2 |
12|    3 |
13+------+

3.模拟数据损坏(真刺激)

1[root@localhost data]# pwd
2/data/mysql/data
3[root@localhost data]# /etc/init.d/mysqld stop
4Shutting down MySQL.... SUCCESS!
5[root@localhost data]# rm -rf *
6[root@localhost data]# ll
7total 0

4.初始化数据库

 1[root@localhost data]# mysqld --initialize-insecure --user=mysql --basedir=/application/mysql/ --datadir=/data/mysql/data
 2[root@localhost data]# ll
 3total 110636
 4-rw-r-----. 1 mysql mysql       56 May  9 09:44 auto.cnf
 5-rw-r-----. 1 mysql mysql      419 May  9 09:44 ib_buffer_pool
 6-rw-r-----. 1 mysql mysql 12582912 May  9 09:44 ibdata1
 7-rw-r-----. 1 mysql mysql 50331648 May  9 09:44 ib_logfile0
 8-rw-r-----. 1 mysql mysql 50331648 May  9 09:44 ib_logfile1
 9drwxr-x---. 2 mysql mysql     4096 May  9 09:44 mysql
10-rw-r-----. 1 mysql mysql      975 May  9 09:44 mysql.log
11drwxr-x---. 2 mysql mysql     8192 May  9 09:44 performance_schema
12-rw-r-----. 1 mysql mysql      163 May  9 09:44 slow.log
13drwxr-x---. 2 mysql mysql     8192 May  9 09:44 sys
14
15# 启动数据库
16[root@localhost data]# /etc/init.d/mysqld start
17Starting MySQL. SUCCESS!
18

5.进行全备恢复(没有 mdp 库)

 1mysql> set sql_log_bin=0;
 2mysql> source /data/backup/full.sql
 3mysql> show databases;
 4+--------------------+
 5| Database           |
 6+--------------------+
 7| information_schema |
 8| gg                 |
 9| mysql              |
10| oldboy             |
11| oldboy2            |
12| performance_schema |
13| school             |
14| sys                |
15| test               |
16| world              |
17| zrblog             |
18+--------------------+
1911 rows in set (0.00 sec)
20
21mysql> flush privileges;

6.截取 binlog 日志,完成增量恢复,需要找起点和终点,终点不需要找,起点的话都可以 position 活着 gtid 都可以。

 1# 分析000007日志
 2mysql> show binlog events in 'mysql-bin.000007';
 3285~287
 4
 5# 截取日志
 6[root@localhost ~]# mysqlbinlog --skip-gtids --include-gtids="f98d1e0b-a7e4-11eb-8259-080027fb878b:285-287" /data/binlog/mysql-bin.000007 > /data/backup/bin.sql
 7
 8或者这里没有写--stop-position 就代表一直截取到最后
 9[root@localhost ~]# mysqlbinlog --skip-gtids --start-position=22108059 /data/binlog/mysql-bin.000007 > /data/backup/bin.sql
10
11
12# 恢复数据
13mysql> set sql_log_bin=0;
14mysql> source /data/backup/bin.sql
15mysql> show databases;
16+--------------------+
17| Database           |
18+--------------------+
19| information_schema |
20| gg                 |
21| mdp                |
22| mysql              |
23| oldboy             |
24| oldboy2            |
25| performance_schema |
26| school             |
27| sys                |
28| test               |
29| world              |
30| zrblog             |
31+--------------------+
32
33mysql> use mdp;
34Database changed
35mysql> select * from t1;
36+------+
37| id   |
38+------+
39|    1 |
40|    2 |
41|    3 |
42+------+

mysqldump 备份命令

1# 仿照如下命令编写备份脚本
2mysql -uroot -p123 -A -R --triggers --master-data=2 max_allowed_packet=128M --single-transaction|gzip > /backup/full_$(date +%F).sql.gz

XBK

 1# 安装依赖包
 2yum install -y perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev
 3
 4# 下载地址
 5wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.22/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm
 6
 7# 安装软件包
 8[root@localhost software]# yum -y install percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm
 9[root@localhost software]# innobackupex --version
10xtrabackup: recognized server arguments: --datadir=/data/mysql/data --server-id=6 --log_bin=/data/binlog/mysql-bin --server-id=6
11innobackupex version 2.4.22 Linux (x86_64) (revision id: c99a781)
12

备份命令介绍

1xtrabackup
2innobackupex  ******

备份方式:物理备份

11.对于非Innodb表,锁表cp数据文件,数据一种温备份。
22.对于Innodb的表(支持事务的),不锁表,拷贝数据页,最终于数据文件的方式保存下来,把一部分redo和undo一并备走,数据热备份方式。

XBK 全备

 1# 新建备份目录
 2[root@localhost software]# mkdir -p /data/bak
 3
 4# 修改配置文件,将[mysql]改为[client]
 5[root@localhost software]# cat  /etc/my.cnf
 6[mysqld]
 7user=mysql
 8basedir=/application/mysql
 9datadir=/data/mysql/data
10socket=/tmp/mysql.sock
11server_id=6
12port=3306
13log_error=/data/mysql/data/mysql.log
14log_bin=/data/binlog/mysql-bin
15server_id=6
16secure-file-priv=/tmp
17gtid-mode=on
18enforce-gtid-consistency=true
19slow_query_log=1        #开关
20slow_query_log_file=/data/mysql/data/slow.log #位置
21long_query_time=0.1     #设定慢查询时间
22log_queries_not_using_indexes #没走索引的语句也记录
23[client]	# innobackupex需要使用socket
24socket=/tmp/mysql.sock
25
26# 重启服务
27[root@localhost software]# /etc/init.d/mysqld restart
28Shutting down MySQL.... SUCCESS!
29Starting MySQL. SUCCESS!
30
31# 全备:备份工具依赖于/etc/my.cnf文件,会读取[mysqld][client]标签下的信息
32[root@localhost software]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 /data/bak
33或者自主定制备份路径名(目录名)
34[root@localhost software]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 --no-timestamp /data/bak/full_$(date +%F)
35
36
37# 以目录的形式保存
38[root@localhost software]# ls /data/bak/
392021-05-09_11-10-54

xtrabackup_binlog_info:记录 position 和 GTID

1[root@localhost 2021-05-09_11-10-54]# cat xtrabackup_binlog_info
2mysql-bin.000010        234     1839d529-b068-11eb-8f64-080027fb878b:1,
3f98d1e0b-a7e4-11eb-8259-080027fb878b:1-287
4

xtrabackup_checkpoints:lsn 号

1[root@localhost 2021-05-09_11-10-54]# cat xtrabackup_checkpoints
2backup_type = full-backuped
3from_lsn = 0
4to_lsn = 105394732
5last_lsn = 105394741
6compact = 0
7recover_binlog_info = 0
8flushed_lsn = 105394741

xtrabackup_info:备份的总体信息

xtrabackup_logfile:备份过程中产生的新的数据变化

恢复数据

 1# 模拟数据丢失
 2[root@localhost 2021-05-09_11-10-54]# cd /data/mysql/data/
 3[root@localhost data]# ls
 4auto.cnf  ib_buffer_pool  ib_logfile0  mdp    mysql.log  oldboy2             school    sys   world
 5gg        ibdata1         ib_logfile1  mysql  oldboy     performance_schema  slow.log  test  zrblog
 6# 回复备份的前提是数据目录必须是空的,恢复的数据实例是关闭的
 7[root@localhost data]# rm -rf *
 8[root@localhost 2021-05-09_11-10-54]# /etc/init.d/mysqld stop
 9Shutting down MySQL.. SUCCESS!
10
11# 准备恢复数据
12[root@localhost data]# innobackupex --apply-log /data/bak/2021-05-09_11-10-54/
13InnoDB: Shutdown completed; log sequence number 105395240
14210509 11:36:49 completed OK!
15
16# 恢复数据
17[root@localhost data]# cd /data/bak/2021-05-09_11-10-54/
18[root@localhost 2021-05-09_11-10-54]# cp -a /backup/bak/2021-05-09_11-10-54/* /data/mysql/data/
19[root@localhost 2021-05-09_11-10-54]# cd /data/mysql/data/
20[root@localhost data]# ll
21total 196672
22-rw-r-----. 1 root root      487 May  9 11:10 backup-my.cnf
23drwxr-x---. 2 root root       48 May  9 11:10 gg
24-rw-r-----. 1 root root    10254 May  9 11:10 ib_buffer_pool
25-rw-r-----. 1 root root 79691776 May  9 11:36 ibdata1
26-rw-r-----. 1 root root 50331648 May  9 11:36 ib_logfile0
27-rw-r-----. 1 root root 50331648 May  9 11:36 ib_logfile1
28-rw-r-----. 1 root root 12582912 May  9 11:36 ibtmp1
29drwxr-x---. 2 root root       48 May  9 11:10 mdp
30drwxr-x---. 2 root root     4096 May  9 11:10 mysql
31drwxr-x---. 2 root root       54 May  9 11:10 oldboy
32drwxr-x---. 2 root root       20 May  9 11:10 oldboy2
33drwxr-x---. 2 root root     8192 May  9 11:10 performance_schema
34drwxr-x---. 2 root root      160 May  9 11:10 school
35drwxr-x---. 2 root root     8192 May  9 11:10 sys
36drwxr-x---. 2 root root       48 May  9 11:10 test
37drwxr-x---. 2 root root      174 May  9 11:10 world
38-rw-r-----. 1 root root      104 May  9 11:10 xtrabackup_binlog_info
39-rw-r-----. 1 root root      141 May  9 11:36 xtrabackup_checkpoints
40-rw-r-----. 1 root root      607 May  9 11:10 xtrabackup_info
41-rw-r-----. 1 root root  8388608 May  9 11:36 xtrabackup_logfile
42-rw-r--r--. 1 root root        1 May  9 11:36 xtrabackup_master_key_id
43drwxr-x---. 2 root root     4096 May  9 11:10 zrblog
44[root@localhost data]# chown -R mysql.mysql *
45[root@localhost data]# /etc/init.d/mysqld start
46Starting MySQL.Logging to '/data/mysql/data/mysql.log'.
47 SUCCESS!

XBK 增量备份

备份方式:基于上次的备份的增量

增量备份不能单独恢复,必须合并到全备中,一起恢复。

 1# 全备
 2[root@localhost bak]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 --no-timestamp /data/bak/full_$(date +%F)
 3[root@localhost bak]# ll
 4total 4
 5drwxr-x---. 13 root root 4096 May  9 12:06 full_2021-05-09
 6
 7# 模拟周一的数据变化
 8mysql> create database xbk charset utf8mb4;
 9mysql> use xbk;
10mysql> create table t1(id int);
11mysql> insert into t1 values(1),(2),(3);
12mysql> commit;
13
14# 周一晚上的增量备份
15[root@localhost bak]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/data/bak/full_2021-05-09 /data/bak/inc1_$(date +%F)
16
17# 模拟周二的数据变化
18mysql> use xbk;
19mysql> create table t2(id int);
20mysql> insert into t2 values(1),(2),(3);
21mysql> commit;
22
23# 周二晚上的增量备份
24[root@localhost bak]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/data/bak/inc1_2021-05-09 /data/bak/inc2_$(date +%F)

XBK 增量恢复

1、合并所有增量到全备

2、每个 XB 备份都需要恢复准备(prepare)

--apply-log --redo-only

 11.整理全备
 2innobackupex --apply-log --redo-only /data/bak/full_2021-05-09
 3
 42.整理并合并周一增量到全备
 5innobackupex --apply-log --redo-only --incremental-dir=/data/bak/inc1_2021-05-09  /data/bak/full_2021-05-09
 6
 73.整理并合并周二的增量到全备
 8innobackupex --apply-log --redo-only --incremental-dir=/data/bak/inc2_2021-05-09  /data/bak/full_2021-05-09
 9
104.再次整理全备
11innobackupex --apply-log /data/bak/full_2021-05-09
12
135.停止Mysql实例,并且删除数据目录下的所有文件
14[root@localhost bak]# /etc/init.d/mysqld stop
15[root@localhost bak]# rm -rf /data/mysql/data/*
16
176.恢复数据
18[root@localhost bak]# innobackupex --copy-back /data/bak/full_2021-05-09
19[root@localhost data]# chown -R mysql.mysql /data/mysql/data/*
20
217.验证数据完整性
22[root@localhost data]# /etc/init.d/mysqld start
23Starting MySQL.Logging to '/data/mysql/data/mysql.log'.
24 SUCCESS!
25mysql> show databases;
26+--------------------+
27| Database           |
28+--------------------+
29| information_schema |
30| gg                 |
31| mdp                |
32| mysql              |
33| oldboy             |
34| oldboy2            |
35| performance_schema |
36| school             |
37| sys                |
38| test               |
39| world              |
40| xbk                |
41| zrblog             |
42+--------------------+
4313 rows in set (0.01 sec)
44
45mysql> use xbk;
46mysql> show tables;
47+---------------+
48| Tables_in_xbk |
49+---------------+
50| t1            |
51| t2            |
52+---------------+
53
54mysql> select * from t2;
55+------+
56| id   |
57+------+
58|    1 |
59|    2 |
60|    3 |
61+------+
623 rows in set (0.00 sec)

XBK full+inc+binlog 案例

某中型互联网公司,数据量级 600G,每日数据量 15-50M

备份策略:周日 XBK 全备 + 周一到周六 inc 增量备份 +binlog 备份。每天 23:00 进行。

故障描述:周三下午 2 点,数据由于某原因数据损坏。

处理思路:

11.整理合并所有备份 full + inc1 + inc2
22.截取周二晚上到周三下午故障之间的binlog日志
33.恢复全备,恢复binlog
44.验证数据完整性

处理结果:

1经过70-80分钟处理,业务恢复

模拟环境:数据 + 故障

 1# 周日全备
 2[root@localhost bak]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 --no-timestamp /data/bak/full
 3
 4# 模拟周一的数据变化
 5mysql> create database oss charset utf8mb4;
 6mysql> use oss;
 7mysql> create table t1(id int);
 8mysql> insert into t1 values(1),(2),(3);
 9mysql> commit;
10
11# 模拟周一晚上的增量备份
12[root@localhost bak]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/data/bak/full /data/bak/inc1
13
14# 模拟周二的数据变化
15mysql> insert into t1 values(11),(22),(33);
16mysql> commit;
17
18# 模拟周二晚上的增量备份
19[root@localhost bak]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/data/bak/inc1 /data/bak/inc2
20
21# 模拟周三的数据变化
22mysql> insert into t1 values(111),(222),(333);
23mysql> commit;
24
25# 有个员工把数据库data目录下的数据全部都给删掉了
26[root@localhost bak]# /etc/init.d/mysqld stop
27Shutting down MySQL.. SUCCESS!
28[root@localhost data]# rm -rf /data/mysql/data/*

数据恢复

 1# 整理全备
 2[root@localhost data]# innobackupex --apply-log --redo-only /data/bak/full
 3
 4# 合并inc1到full
 5[root@localhost data]# innobackupex --apply-log --redo-only --incremental-dir=/data/bak/inc1 /data/bak/full
 6
 7# 合并inc2到full
 8[root@localhost data]# innobackupex --apply-log --redo-only --incremental-dir=/data/bak/inc2 /data/bak/full
 9
10# 整体整理
11[root@localhost data]# innobackupex --apply-log /data/bak/full
12
13# 恢复整理好的全备数据到数据库
14[root@localhost bak]# innobackupex --copy-back /data/bak/full
15[root@localhost bak]# chown -R mysql.mysql /data/mysql/data/*
16[root@localhost bak]# /etc/init.d/mysqld start
17Starting MySQL.Logging to '/data/mysql/data/mysql.log'.
18 SUCCESS!
19
20# 查看inc2中的xtrabackup_binlog_info信息
21[root@localhost bak]# cat /data/bak/inc2/xtrabackup_binlog_info
22mysql-bin.000018        1288    1839d529-b068-11eb-8f64-080027fb878b:1,
2342725169-b078-11eb-ba4c-080027fb878b:1-5,
2449fa3c6a-b081-11eb-ab05-080027fb878b:1-5,
257a9f76ed-b08d-11eb-a5ac-080027fb878b:1-4, ******
26a6927d77-b08a-11eb-b910-080027fb878b:1-5,
27b9462caa-b08c-11eb-bbb4-080027fb878b:1-9,
28d0b3b659-b088-11eb-9d15-080027fb878b:1-7,
29f98d1e0b-a7e4-11eb-8259-080027fb878b:1-287
30
31# 发现当前使用的是 7a9f76ed-b08d-11eb-a5ac-080027fb878b GTID
32# 根据分析,7a9f76ed-b08d-11eb-a5ac-080027fb878b:1-4,已经包含 1-4,那么就从第五的事务开始截取到最后
33mysql> show binlog events in 'mysql-bin.000018';
34SET @@SESSION.GTID_NEXT= '7a9f76ed-b08d-11eb-a5ac-080027fb878b:5' 
35
36# 截取日志
37[root@localhost bak]# mysqlbinlog --skip-gtids --include-gtids='7a9f76ed-b08d-11eb-a5ac-080027fb878b:5' /data/binlog/mysql-bin.000018 >/data/bak/bin.sql
38
39# 恢复数据
40mysql> set sql_log_bin=0;
41mysql> source /data/bak/bin.sql
42
43# 验证数据一致性
44mysql> select * from t1;
45+------+
46| id   |
47+------+
48|    1 |
49|    2 |
50|    3 |
51|   11 |
52|   22 |
53|   33 |
54|  111 |
55|  222 |
56|  333 |
57+------+
589 rows in set (0.00 sec)
59

远程推送备份

1# 备份完并使用ssh推送到指定服务器的目录下命名为/data/full.tgz
2innobackupex --user-root --password=123 --defaults-file=/etc/my.cnf --no-timestamp --stream=tar --use-memory=256M --parallel=8 /data/bak/full | gzip | ssh root@10.1.1.1" cat - > /data/full.tgz"

MySQL 数据迁移

  • 换主机(性能更强的硬件主机):

    11.在线 MDP XBK 备份出来,scp到目标主机恢复
    22.追加所有备份后的日志
    33.申请停机5分钟
    44.剩余的binlog继续恢复(搭建主从的方式来代替)
    55.校验数据
    66.进行业务切换
    77.数据量大用主从架构
    
  • 换版本升级:

    1# 方法一
    2新机器安装5.7,5.6使用逻辑备份mysqldump按业务库做备份,排除掉information_schema,performance_schema,sys, 在5.7中恢复,之后升级数据字典。
    3
    4# 方法二
    5主从进行过滤复制,排除掉information_schema,performance_schema,sys
    
  • 异构迁移(系统不一样):

    1只能用逻辑备份 mysqldump
    
  • 异构迁移(数据库产品不同):

    1Oracle -- OGG -- MYSQL
    2MYSQL -- CSV(格式) -- MongoDB
    3MYSQL8.0 -- JSON -- MongoDB
    

作者:Soulboy