文章目录
一、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 10月 16 19:37 backup-my.cnf
drwxr-x--- 2 root root 48 10月 16 19:37 binlog
drwxr-x--- 2 root root 20 10月 16 19:37 blog
drwxr-x--- 2 root root 48 10月 16 19:37 gtid
-rw-r----- 1 root root 781 10月 16 19:37 ib_buffer_pool
-rw-r----- 1 root root 12582912 10月 16 19:37 ibdata1
drwxr-x--- 2 root root 4096 10月 16 19:37 mysql
drwxr-x--- 2 root root 8192 10月 16 19:37 performance_schema
drwxr-x--- 2 root root 82 10月 16 19:37 school
drwxr-x--- 2 root root 8192 10月 16 19:37 sys
drwxr-x--- 2 root root 56 10月 16 19:37 test
drwxr-x--- 2 root root 144 10月 16 19:37 world
-rw-r----- 1 root root 62 10月 16 19:37 xtrabackup_binlog_info
-rw-r----- 1 root root 141 10月 16 19:37 xtrabackup_checkpoints
-rw-r----- 1 root root 540 10月 16 19:37 xtrabackup_info
-rw-r----- 1 root root 2560 10月 16 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