MySQL备份恢复

一、介绍

       备份时候需要考虑的有:备份周期,备份策略,备份工具;

1.1 检查备份可用性

        crontab  -l     查看备份任务;

       查看备份脚本;

       查看备份路径;

       查看备份日志,检查备份文件;

1.2定期备份演练

1.3数据库迁移升级

二、Mysqldump备份

2.1 mysqldump参数

      连接数据库参数     -u    -p    -S   -h    P

      基础备份参数: -A   备份所有的库与表        -B  可以指定多个库   -R (–routines:导出存储过程以及自定义函数)    –triggers (默认导出触发器,使用–skip-triggers屏蔽导出)  --events, -E导出事件。

全备:

[root@#localhost ~]# mysqldump -uroot -p -A >/tmp/fullback.sql

备份指定的数据库

[root@#localhost ~]# mysqldump -uroot -p -B school care2 > /tmp/back.sql

备份库下的表

[root@#localhost ~]# mysqldump -uroot -p school student > /tmp/table.sql

 核心备份参数:

--master-data=2 

          (1)记录备份时刻的binlog信息(以注释的形式记录二进制的信息);

         (2)自动锁表(单独使用该参数都要进行锁表备份)

                        不加--single-transaction,温备份

                        加  --single-transaction,对于Innodb的表,不锁表备份,非Innodb的表,锁表备份

--single-transaction

                       对于Innodb的表进行一致性快照备份,不锁表。

2.2故障恢复演练

   模拟mysqldump全备+binlog恢复删除的数据库;

创建实验数据库:

mysql> select @@sql_log_bin;
+---------------+
| @@sql_log_bin |
+---------------+
|             1 |
+---------------+
1 row in set (0.00 sec)

mysql> create database yu charset utf8mb4;
Query OK, 1 row affected (0.06 sec)

创建实验表插入数据:

mysql> create table t1(id int);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t1 values(1);
Query OK, 1 row affected (0.08 sec)
mysql> insert into t1 values(2);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values(3);
Query OK, 1 row affected (0.04 sec)
mysql> insert into t1 values(4);
Query OK, 1 row affected (0.03 sec)
mysql> insert into t1 values(5);
Query OK, 1 row affected (0.02 sec)

备份数据:

[root@#localhost tmp]# mysqldump -uroot -p -A --master-data=2 --single-transaction -R -E --triggers > /tmp/full2.sql

备份后继续插入数据:

mysql> insert into t1 values(22);
Query OK, 1 row affected (0.01 sec)

mysql> insert into t1 values(23);
Query OK, 1 row affected (0.02 sec)

mysql> update t1 set id=100 where id=2;
Query OK, 1 row affected (0.03 sec)

查看备份中记录备份结束后事务开始的位置:

-- Position to start replication or point-in-time recovery from
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=1766;

导出从备份后开始的binlog

[root@#localhost data]# mysqlbinlog --start-position=1766  --stop-position=2488  mysql-bin.000007>/tmp/full3.sql

找其他的一个数据库恢复测试:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.04 sec)

mysql> source /tmp/full2.sql;

  mysql> source /tmp/full3.sql

全备+binlog恢复完成!

三、物理备份  XtraBackup

3.1安装XtraBackup

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

 3.2备份过程

1.针对非Innodb表,进行锁表备份,copy所有非Innodb表文件;

2.针对Innodb表,立即触发CKPT,立即记录一个LSN,copy所有innodb表相关的文件(ibdata1,ibd,frm),并且将备份过程中产生的新数据变化的部分redo一起备份走,并记录最新的LSN;

恢复过程:

在恢复时候,xdb会调用Innodb引擎的csr过程,将数据和redo的LSN追平,

3.3备份语句

1、给数据库来一次全备:

innobackupex --user=root --password=Password@123 --host=192.168.43.4 --p=3306 --no-timestamp /backup/full

2、新增数据,准备增量备份:

mysql> show tables;
+--------------+
| Tables_in_yu |
+--------------+
| t1           |
+--------------+
1 row in set (0.00 sec)

mysql> create table t2(id int);
Query OK, 0 rows affected (0.04 sec)

mysql> insert into t2 values(2),(3),(4);
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

3、进行一次增量备份:

innobackupex --user=root --password=Password@123 --host=192.168.43.4 --p=3306 --no-timestamp --incremental --incremental-basedir=/backup/full /backup/incr1

4、查看增量和全备的信息:

[root@#localhost full]# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 2875667
last_lsn = 2875676
compact = 0
recover_binlog_info = 0
[root@#localhost full]# cd ..
[root@#localhost backup]# cd incr1/
[root@#localhost incr1]# cat xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2875667
to_lsn = 2881475
last_lsn = 2881484
compact = 0
recover_binlog_info = 0

全备的 last_lsn=2875676-9=287567   这个是增量的from_lsn

5、继续模拟数据变化,准备下一次增量

mysql> create table t3(id int);
Query OK, 0 rows affected (0.07 sec)

mysql> insert into t3 values(3),(4),(5);
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0

6、在来一次增量备份

innobackupex --user=root --password=Password@123 --host=192.168.43.4 --p=3306 --no-timestamp --incremental --incremental-basedir=/backup/incr1  /backup/incr2

7、增量备份后在添加一点数据

mysql> create table t4(id int);
Query OK, 0 rows affected (0.09 sec)

8、在这个步骤后发生数据丢失,现在模拟全备+增量1+增量2+binlog模式恢复所有数据

[root@#localhost mysql]# mv data data.bak

9、恢复前的准备

整理full备份

[root@#localhost ~]# innobackupex --apply-log --redo-only /backup/full

合并第一次增量到全备中

[root@#localhost ~]# innobackupex --apply-log --redo-only --incremental-dir=/backup/incr1 /backup/full

合并第二次增量到全备中,这次不用加redo-only

[root@#localhost ~]# innobackupex --apply-log  --incremental-dir=/backup/incr2 /backup/full

观察日志:

 

 最后一次整理全备:

[root@#localhost ~]# innobackupex --apply-log  /backup/full

查看第二次增量的binlog信息,查看增量备份后,日志的起始日志位置,假设binlog没有丢失,截取增量后的binlog日志,进行恢复

[root@#localhost incr2]# cat xtrabackup_info
uuid = 1063e108-0a69-11ed-91a1-000c29d9caa0
name = 
tool_name = innobackupex
tool_command = --user=root --password=... --host=192.168.43.4 --p=3306 --no-timestamp --incremental --incremental-basedir=/backup/incr1 /backup/incr2
tool_version = 2.4.12
ibbackup_version = 2.4.12
server_version = 5.7.16-log
start_time = 2022-07-23 17:23:01
end_time = 2022-07-23 17:23:08
lock_time = 0
binlog_pos = filename 'mysql-bin.000007', position '3851'
innodb_from_lsn = 2881475
innodb_to_lsn = 2887300
partial = N
incremental = Y
format = file
compact = N
compressed = N
encrypted = N

截取最后的binlog日志

[root@#localhost data.bak]# mysqlbinlog --start-position=3851  --stop-position=4009  mysql-bin.000007>/backup/full4.sql

恢复备份数据

[root@#localhost mysql]# cp -a /backup/full/*  /data/mysql/data/
[root@#localhost mysql]# chown -R mysql. data
[root@#localhost mysql]# systemctl restart mysqld

恢复binlog日志

  mysql> set sql_log_bin=0;

mysql> source /backup/full4.sql

查看数据完全恢复

mysql> show tables;
+--------------+
| Tables_in_yu |
+--------------+
| t1           |
| t2           |
| t3           |
| t4           |
+--------------+
4 rows in set (0.00 sec)
mysql> set sql_log_bin=1;

 三、mysqldump备份数据库-原来探究

在my.cnf中加入mysqldump的参数

 

 

参数

   基础备份参数: -A   备份所有的库与表        -B  可以指定多个库   -R (–routines:导出存储过程以及自定义函数)    –triggers (默认导出触发器,使用–skip-triggers屏蔽导出)  --events, -E导出事件。

--master-data=2 

          (1)记录备份时刻的binlog信息(以注释的形式记录二进制的信息);

         (2)自动锁表(单独使用该参数都要进行锁表备份)

                        不加--single-transaction,温备份

                        加  --single-transaction,对于Innodb的表,不锁表备份,非Innodb的表,锁表备份

--single-transaction

                       对于Innodb的表进行一致性快照备份,不锁表。

[root@mysql ~]# mysqldump -uroot -p --single-transaction -B db1 > db01.bak
Enter password: 

3.1、使用generallog查看原理

首先将log_output设置为table

(root@localhost) [mysql]> set global log_output='table';
Query OK, 0 rows affected (0.00 sec)

将general_log设置为1,记录所有操作

(root@localhost) [mysql]> set global general_log=1;
Query OK, 0 rows affected (0.00 sec)

接下来我们做一个备份

[root@mysql ~]# mysqldump -uroot -p --single-transaction -B db1 > db01.bak
Enter password: 

先关闭日志

(root@localhost) [mysql]> set global general_log=0;
Query OK, 0 rows affected (0.00 sec)

查看general_log记录了很多日志,找出他的threadid

(root@localhost) [mysql]> (root@localhost) [mysql]> select * from general_log;

通过查看日志查看备份执行过程

(root@localhost) [mysql]> select thread_id,left(argument,88) from general_log where thread_id=10;
+-----------+------------------------------------------------------------------------------------------+
| thread_id | left(argument,88)                                                                        |
+-----------+------------------------------------------------------------------------------------------+
|        10 | root@localhost on  using Socket                                                          |
|        10 | /*!40100 SET @@SQL_MODE='' */                                                            |
|        10 | /*!40103 SET TIME_ZONE='+00:00' */                                                       |
|        10 | SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ                                  |
|        10 | START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */                                   |
|        10 | SHOW VARIABLES LIKE 'gtid\_mode'                                                         |
|        10 | UNLOCK TABLES                                                                            |
|        10 | SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM IN |
|        10 | SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZ |
|        10 | SHOW VARIABLES LIKE 'ndbinfo\_version'                                                   |
|        10 | db1                                                                                      |
|        10 | SHOW CREATE DATABASE IF NOT EXISTS `db1`                                                 |
|        10 | SAVEPOINT sp                                                                             |
|        10 | show tables                                                                              |
|        10 | show table status like 'aa'                                                              |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `aa`                                                                   |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `aa`                                                                    |
|        10 | show fields from `aa`                                                                    |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `aa`                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'aa'                                                                  |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'ab'                                                              |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `ab`                                                                   |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `ab`                                                                    |
|        10 | show fields from `ab`                                                                    |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `ab`                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'ab'                                                                  |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'bc'                                                              |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `bc`                                                                   |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `bc`                                                                    |
|        10 | show fields from `bc`                                                                    |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `bc`                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'bc'                                                                  |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'cc'                                                              |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `cc`                                                                   |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `cc`                                                                    |
|        10 | show fields from `cc`                                                                    |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `cc`                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'cc'                                                                  |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'd'                                                               |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `d`                                                                    |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `d`                                                                     |
|        10 | show fields from `d`                                                                     |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `d`                                               |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'd'                                                                   |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'da'                                                              |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `da`                                                                   |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `da`                                                                    |
|        10 | show fields from `da`                                                                    |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `da`                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'da'                                                                  |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'de'                                                              |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `de`                                                                   |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `de`                                                                    |
|        10 | show fields from `de`                                                                    |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `de`                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'de'                                                                  |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'f'                                                               |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `f`                                                                    |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `f`                                                                     |
|        10 | show fields from `f`                                                                     |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `f`                                               |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'f'                                                                   |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'passd'                                                           |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `passd`                                                                |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `passd`                                                                 |
|        10 | show fields from `passd`                                                                 |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `passd`                                           |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'passd'                                                               |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'stu'                                                             |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `stu`                                                                  |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `stu`                                                                   |
|        10 | show fields from `stu`                                                                   |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `stu`                                             |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'stu'                                                                 |
|        10 | SHOW CREATE TRIGGER `trg_upd_score`                                                      |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 't6'                                                              |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `t6`                                                                   |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `t6`                                                                    |
|        10 | show fields from `t6`                                                                    |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `t6`                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 't6'                                                                  |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'tb\_article'                                                     |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `tb_article`                                                           |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `tb_article`                                                            |
|        10 | show fields from `tb_article`                                                            |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `tb_article`                                      |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'tb\_article'                                                         |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | show table status like 'tb\_article2'                                                    |
|        10 | SET SQL_QUOTE_SHOW_CREATE=1                                                              |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | show create table `tb_article2`                                                          |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | show fields from `tb_article2`                                                           |
|        10 | show fields from `tb_article2`                                                           |
|        10 | SELECT /*!40001 SQL_NO_CACHE */ * FROM `tb_article2`                                     |
|        10 | SET SESSION character_set_results = 'binary'                                             |
|        10 | use `db1`                                                                                |
|        10 | select @@collation_database                                                              |
|        10 | SHOW TRIGGERS LIKE 'tb\_article2'                                                        |
|        10 | SET SESSION character_set_results = 'utf8'                                               |
|        10 | ROLLBACK TO SAVEPOINT sp                                                                 |
|        10 | RELEASE SAVEPOINT sp                                                                     |
|        10 |                                                                                          |
+-----------+------------------------------------------------------------------------------------------+
199 rows in set (0.01 sec)

从日志中可以看出,备份的数据是任务开始时候的数据,比如备份执行了30分钟,期间有数据插入,插入的数据不备份,

|        10 | START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */                                   |

 

posted @ 2022-07-29 13:33  中仕  阅读(8)  评论(0编辑  收藏  举报