Linux操作文档——MySQL备份恢复(5.7.26)


一、mysqldump(逻辑备份)

1、特点

优点 不需要下载安装,备份出来的是SQL,文本格式,可读性高,便于备份处理,压缩比较高,节省备份的磁盘空间
缺点 依赖于数据库引擎,需要从磁盘把数据读出,转换成SQL进行转储,比较耗费资源,数据量大的话效率较低
建议 100G以内的数据量级,可以使用mysqldump

2、客户端通用参数

本地备份:

[root@mysql-1 ~]# mysqldump -uroot -p -S /tmp/mysql.sock

远程备份:

[root@mysql-1 ~]# mysqldump -uroot -p -h 10.0.0.51 -P3306
参数 说明 参数 说明
-u 连接到服务器时使用的MySQL用户名 -p 连接服务器时使用的密码
-S 指定连接mysql的socket文件位置 -h 从给定主机上的MySQL服务器转储数据。默认主机是localhost
-P 用于连接的TCP / IP端口号

3、基础备份参数

[root@mysql-1 ~]# mysqldump -uroot -p1 -A  >/backup/full.sql
[root@mysql-1 ~]# mysqldump -uroot -p1 -B world oldguo wordpress >/backup/db.sql
参数 说明
-A 导出全部数据库
-B 导出几个数据库。参数后面所有名字参量都被看作数据库名
不加参数直接指定库名+表名表示导出指定库下的表,1库+1表或多表(表间空格隔开)
[root@mysql-1 ~]# mysqldump -uroot -p1 world city country > /backup/tab.sql

4、特殊备份参数

[root@mysql-1 ~]# mysqldump -uroot -p -A -R -E --triggers >/data/backup/full.sql
参数 说明
-R 存储过程和函数
-E 事件
–triggers 触发器
[root@mysql-1 ~]# mysqldump -uroot -p  -A  -R --triggers -F >/bak/full.sql
参数 说明
-F 在备份开始时,刷新一个新binlog日志
[root@mysql-1 ~]# mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction --set-gtid-purged=OFF >/data/backup/full.sql
[root@mysql-1 ~]# mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction --set-gtid-purged=ON >/data/backup/full.sql
[root@mysql-1 ~]# mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction --set-gtid-purged=OFF --max-allowed-packet=256M >/data/backup/full.sql
参数 说明
–master-data=2 记录备份时刻的binlog信息,自动锁表
–single-transaction 对于InnoDB的表,进行一致性快照备份,不锁表;不加–single-transaction是温备份,加了–single-transaction对于InnoDB表不锁表备份(快照备份)
–set-gtid-purged OFF,可以使用在日常备份参数;auto、on,在构建主从复制环境时需要的参数配置
–max-allowed-packet 服务器发送和接受的最大包长度

5、从mysqldump 全备中获取库和表的备份

1、获得表结构

[root@mysql-1 ~]# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `city`/!d;q'  full.sql>createtable.sql

2、获得INSERT INTO 语句,用于数据的恢复

[root@mysql-1 ~]# grep -i 'INSERT INTO `city`'  full.sqll >data.sql &

3、获取单库的备份

[root@mysql-1 ~]# sed -n '/^-- Current Database: `world`/,/^-- Current Database: `/p' all.sql >world.sql

二、xtrabackup(物理备份)

1、特点

优点 类似于直接cp数据文件,不需要管逻辑结构,相对来说性能较高
缺点 可读性差,压缩比低,需要更多磁盘空间
建议 大于100G小于1TB的数据量级,可以使用
存储引擎 对于非Innodb表时,锁表cp数据文件,属于一种温备份;对于Innodb的表(支持事务的),不锁表,拷贝数据页,最终以数据文件的方式保存下来,把一部分redo和undo一并备走,属于热备方式
备份流程 备份执行的瞬间立即触发ckpt,已提交的数据脏页从内存刷写到磁盘并记录此时的LSN号;备份时,拷贝磁盘数据页和记录备份过程中产生的redo和undo,即checkpoint LSN之后的日志;在恢复时,xbk会调用InnoDB引擎的CSR过程,将数据和redo的LSN追平,然后进行一致性恢复

2、下载软件并安装

注:由于新的MySQL重做日志和数据字典格式,8.0版本只支持mysql8.0和percona8.0,早于mysql8.0的版本需要使用xtrabackup2.4备份和恢复。

[root@mysql-1 ~]# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev
[root@mysql-1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@mysql-1 ~]# wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.20/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm
[root@mysql-1 ~]# yum -y install percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm

3、完全备份

[root@mysql-1 ~]# innobackupex --user=root --password=1 /data/backup
[root@mysql-1 ~]# innobackupex --user=root --password=1 --no-timestamp /backup/full
参数 说明
–no-timestamp 不要创建一个时间戳目录来存储备份
[root@mysql-1 ~]# cd /data/backup/2020-10-16_19-37-19/
[root@mysql-1 2020-10-16_19-37-19]# ll
总用量 12340
-rw-r----- 1 root root      487 1016 19:37 backup-my.cnf
drwxr-x--- 2 root root       48 1016 19:37 binlog
drwxr-x--- 2 root root       20 1016 19:37 blog
drwxr-x--- 2 root root       48 1016 19:37 gtid
-rw-r----- 1 root root      781 1016 19:37 ib_buffer_pool
-rw-r----- 1 root root 12582912 1016 19:37 ibdata1
drwxr-x--- 2 root root     4096 1016 19:37 mysql
drwxr-x--- 2 root root     8192 1016 19:37 performance_schema
drwxr-x--- 2 root root       82 1016 19:37 school
drwxr-x--- 2 root root     8192 1016 19:37 sys
drwxr-x--- 2 root root       56 1016 19:37 test
drwxr-x--- 2 root root      144 1016 19:37 world
-rw-r----- 1 root root       62 1016 19:37 xtrabackup_binlog_info
-rw-r----- 1 root root      141 1016 19:37 xtrabackup_checkpoints
-rw-r----- 1 root root      540 1016 19:37 xtrabackup_info
-rw-r----- 1 root root     2560 1016 19:37 xtrabackup_logfile
[root@mysql-1 2020-10-16_19-37-19]# vim xtrabackup_binlog_info
mysql-bin.000007        194     7d01bcc5-e854-11ea-9c8f-000c29bc0487:1-4
[root@mysql-1 2020-10-16_19-37-19]# vim xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0            //上次所到达的LSN号
to_lsn = 123959158            //备份开始时间(ckpt)点数据页的LSN
last_lsn = 123959167            //备份结束后,redo日志最终的LSN
compact = 0
recover_binlog_info = 0
flushed_lsn = 123959167   
文件 说明
xtrabackup_binlog_info 记录备份时刻的二进制日志信息,可以作为binlog截取的起点
xtrabackup_checkpoints 备份中包含的LSN号的起点,全备:0,增量:上次备份的结束位置
xtrabackup_info 备份信息
xtrabackup_logfile 备份过程日志
如果出现以下问题可以这样解决
Failed to connect to MySQL server: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2).
[root@mysql-1 ~]# mkdir /var/lib/mysql/
[root@mysql-1 ~]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

4、增量备份

注:必须依赖于全备

[root@mysql-1 ~]# innobackupex --user=root --password=1 --no-timestamp --incremental --incremental-basedir=/backup/full /backup/inc1 
参数 说明
–incremental 开关
–incremental-basedir=/backup/full 基于哪个备份进行增量
/backup/inc1 增量备份的位置点

5、恢复数据库

1、恢复前的准备

1、整理备份文件

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

2、合并增量备份文件到完全备份文件,并整理备份

[root@mysql-1 ~]# innobackupex --apply-log --redo-only  --incremental-dir=/backup/inc1 /backup/full 
[root@mysql-1 ~]# innobackupex --apply-log  --incremental-dir=/backup/inc2 /backup/full 

3、最后整理备份文件

[root@mysql-1 ~]# innobackupex --apply-log  /backup/full
参数 说明
–apply-log 通过应用位于同一目录中名为“xtrabackup logfile”的事务日志文件,在backup - dir中准备一个备份。另外,创建新的事务日志
–redo-only 强制xtrabackup忽略“rollback”阶段只做“redo”.
–incremental-dir 指定增量文件所在的目录备份将与完整备份结合在一起,形成一个完整的备份

2、截取二进制日志

[root@mysql-1 ~]# cat /backup/inc2/xtrabackup_binlog_info
mysql-bin.000031	1997	aa648280-a6a6-11e9-949f-000c294a1b3b:1-17,
e16db3fd-a6e8-11e9-aee9-000c294a1b3b:1-9
[root@mysql-1 ~]# mysqlbinlog /data/binlog/mysql-bin.000031 | grep 'SET'
SET @@SESSION.GTID_NEXT= 'e16db3fd-a6e8-11e9-aee9-000c294a1b3b:12'/*!*/;
[root@mysql-1 ~]# mysqlbinlog --skip-gtids --include-gtids='e16db3fd-a6e8-11e9-aee9-000c294a1b3b:10-12' /data/binlog/mysql-bin.000031>/backup/binlog.sql

3、恢复备份数据

[root@mysql-1 ~]# cp -a  /backup/full/* /data/mysql/data/
[root@mysql-1 ~]# chown -R mysql. /data/
[root@mysql-1 ~]# /etc/init.d/mysqld start
mysql> set sql_log_bin=0;
mysql> source /backup/binlog.sql

三、数据库迁移(5.6升级5.7)

1、5.6 数据库备份

[root@oldboyedu ~]# mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R -E --triggers >/tmp/full.sql
[root@oldboyedu ~]# scp /tmp/full.sql 10.0.0.51:/data/3308 

2、导入5.7数据库

[root@db01 /]# mysql -S /data/3308/mysql.sock
mysql> source /data/3308/full.sql
[root@db01 /]# mysql_upgrade -uroot -p123 -S /data/3308/mysql.sock      //旧版本更新到新版本

3、binlog的持续追加(主从复制)
4、停业务,恢复剩余的binlog

猜你喜欢

转载自blog.csdn.net/g950904/article/details/109087920