MySQLBackup备份数据库

环境:MySQL 8.0.36

1、安装部署

root@node5 \~\]# `wget -c https://edelivery.oracle.com/osdc/softwareDownload?fileName=V1040085-01.zip` \[root@node5 \~\]# `ll` total 22776 -rw-------. 1 root root 1066 Jan 21 14:59 anaconda-ks.cfg -r--r--r--. 1 root root 23316009 Feb 24 18:50 V1040085-01.zip \[root@node5 \~\]# `unzip V1040085-01.zip` \[root@node5 \~\]# `yum install mysql-commercial-backup-8.0.36-1.1.el8.x86_64.rpm -y` ## 2 、配置备份管理员 mysql\> `create user 'mysqlbackup'@'localhost' identified by 'MySQL@123';` Query OK, 0 rows affected (0.09 sec) mysql\> `grant all on *.* to 'mysqlbackup'@'localhost';` Query OK, 0 rows affected (0.03 sec) ## 3、 backup-to-image方式备份数据库 ### 3.1 全量备份 \[root@node5 \~\]# `mkdir /data` #创建备份目录 \[root@node5 \~\]# `mysqlbackup --user=mysqlbackup --password=MySQL@123 --socket=/var/lib/mysql/mysql.sock --backup-image=my_full_bak.mbi --backup-dir=/data/backup --show-progress --compress backup-to-image` \[root@node5 \~\]# `ll /data/backup/` #查看备份后的文件 total 4408 -rw-r--r--. 1 root root 255 Feb 24 19:59 backup-my.cnf drwxr-x---. 2 root root 4096 Feb 24 19:59 datadir drwxr-x---. 2 root root 4096 Feb 24 19:59 meta -rw-r-----. 1 root root 4475730 Feb 24 19:59 my_full_bak.mbi -rw-r-----. 1 root root 19936 Feb 24 19:59 server-all.cnf -rw-r-----. 1 root root 632 Feb 24 19:59 server-my.cnf ### 3.2 全量备份还原 **1、检验** \[root@node5 \~\]# `mysqlbackup --backup-image=/data/backup/my_full_bak.mbi list-image` #通过list-image查看备份image中的文件内容 \[root@node5 \~\]# `mysqlbackup --backup-image=/data/backup/my_full_bak.mbi validate` #通过validate验证备份image的有效性 \[root@node5 \~\]# `mysql -e 'drop database school'` #删库 \[root@node5 \~\]# `mysql -e 'show databases'` ```bash +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ ``` **2、还原image** #这两步必做 \[root@node5 \~\]# `systemctl stop mysqld.service` #关闭mysqld服务 \[root@node5 \~\]# `rm -rf /var/lib/mysql/*` #清空mysql的datadir目录 \[root@node5 \~\]# `mysqlbackup --datadir=/var/lib/mysql --backup-image=/data/backup/my_full_bak.mbi --backup-dir=/data/backup/tmp --uncompress copy-back-and-apply-log` \[root@node5 \~\]# `chown -R mysql.mysql /var/lib/mysql/*` #更改权限 \[root@node5 \~\]# `systemctl start mysqld.service` \[root@node5 \~\]# `mysql -e 'select * from school.stu'` #确认恢复 ```bash +-----+---------+--------+------+------------------+ | Sno | Sname | Ssex | Sage | Sdept | +-----+---------+--------+------+------------------+ | 1 | Alice | Female | 20 | Mathematics | | 2 | Bob | Male | 22 | Computer Science | | 3 | Charlie | Male | 21 | Engineering | | 4 | David | Female | 19 | Literature | +-----+---------+--------+------+------------------+ ``` ### 3.2 增量备份 **1、第一次增量备份** mysql\> `INSERT INTO stu (Sno, Sname, Ssex, Sage, Sdept) VALUES (5, 'Emma', 'Female', 20, 'Mathematics'),(6, 'Tom', 'Male', 22, 'Computer Science');` \[root@node5 \~\]# `mysqlbackup --user=mysqlbackup --password=MySQL@123 --socket=/var/lib/mysql/mysql.sock --compress --incremental --incremental-base=dir:/data/backup --backup-dir=/data/backup/incr1 --backup-image=my_inc1_bak.mbi backup-to-image` \[root@node5 \~\]# `ll /data/backup/incr1/` total 1792 -rw-r--r--. 1 root root 255 Feb 24 20:22 backup-my.cnf drwxr-x---. 2 root root 4096 Feb 24 20:22 datadir drwxr-x---. 2 root root 4096 Feb 24 20:22 meta -rw-r-----. 1 root root 1796619 Feb 24 20:22 my_inc1_bak.mbi -rw-r-----. 1 root root 19936 Feb 24 20:22 server-all.cnf -rw-r-----. 1 root root 505 Feb 24 20:22 server-my.cnf **2、第二次增量备份** mysql\> `INSERT INTO stu (Sno, Sname, Ssex, Sage, Sdept) VALUES (7, 'Lily', 'Female', 21, 'Engineering'),(8, 'Jack', 'Male', 19, 'Literature');` \[root@node5 \~\]# `mysqlbackup --user=mysqlbackup --password=MySQL@123 --socket=/var/lib/mysql/mysql.sock --compress --incremental --incremental-base=history:last_backup --backup-dir=/data/backup/incr2 --backup-image=my_inc_bak.mbi backup-to-image` #--incremental-base 可以写成history:last_backup不用写上次备份的dir,两个方法都可以 \[root@node5 \~\]# `ll /data/backup/incr2/` total 1700 -rw-r--r--. 1 root root 255 Feb 24 20:28 backup-my.cnf drwxr-x---. 2 root root 4096 Feb 24 20:28 datadir drwxr-x---. 2 root root 4096 Feb 24 20:28 meta -rw-r-----. 1 root root 1696167 Feb 24 20:28 my_inc_bak.mbi -rw-r-----. 1 root root 19936 Feb 24 20:28 server-all.cnf -rw-r-----. 1 root root 632 Feb 24 20:28 server-my.cnf ### 3.3 增量备份还原 \[root@node5 \~\]# `mysql -e 'drop database school'` #删库 \[root@node5 \~\]# `mysql -e 'show databases'` ```bash +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ ``` \[root@node5 \~\]# `systemctl stop mysqld.service` #关闭mysqld服务 \[root@node5 \~\]# `rm -rf /var/lib/mysql/*` #清空mysql的datadir目录 **1、先还原完全备份** \[root@node5 \~\]# `mysqlbackup --datadir=/var/lib/mysql --backup-image=/data/backup/my_full_bak.mbi --backup-dir=/data/backup/tmp1 --uncompress copy-back-and-apply-log` #注意backup-dir刚才是/data/backup/tmp,这里得换一个 **2、第一次增量备份还原** \[root@node5 \~\]# `mysqlbackup --backup-image=/data/backup/incr1/my_inc1_bak.mbi --backup-dir=/data/backup/incr1/tmp2 --datadir=/var/lib/mysql/ --incremental copy-back-and-apply-log` **3、第二次增量备份还原** \[root@node5 \~\]# `mysqlbackup --backup-image=/data/backup/incr2/my_inc_bak.mbi --backup-dir=/data/backup/incr2/tmp3 --datadir=/var/lib/mysql/ --incremental copy-back-and-apply-log` \[root@node5 \~\]# `chown -R mysql.mysql /var/lib/mysql/*` \[root@node5 \~\]# `systemctl start mysqld.service` \[root@node5 \~\]# `mysql -e 'select * from school.stu'` ```bash +-----+---------+--------+------+------------------+ | Sno | Sname | Ssex | Sage | Sdept | +-----+---------+--------+------+------------------+ | 1 | Alice | Female | 20 | Mathematics | | 2 | Bob | Male | 22 | Computer Science | | 3 | Charlie | Male | 21 | Engineering | | 4 | David | Female | 19 | Literature | | 5 | Emma | Female | 20 | Mathematics | | 6 | Tom | Male | 22 | Computer Science | | 7 | Lily | Female | 21 | Engineering | | 8 | Jack | Male | 19 | Literature | +-----+---------+--------+------+------------------+ ``` ## 4、datafile方式备份数据库 **环境:最好恢复初始环境,或只把上次备份的目录删了** ### 4.1 完全备份 \[root@node5 \~\]# `mysqlbackup --user=mysqlbackup --password=MySQL@123 --socket=/var/lib/mysql/mysql.sock --backup-dir=/data/backup --show-progress --compress backup` \[root@node5 \~\]# `ll /data/backup/` total 36 -rw-r--r--. 1 root root 255 Feb 24 20:53 backup-my.cnf drwxr-x---. 6 root root 4096 Feb 24 20:53 datadir drwxr-x---. 2 root root 4096 Feb 24 20:53 meta -rw-r-----. 1 root root 19936 Feb 24 20:53 server-all.cnf -rw-r-----. 1 root root 632 Feb 24 20:53 server-my.cnf ### 4.2 完全备份恢复 \[root@node5 \~\]# `mysql -e 'drop database school'` \[root@node5 \~\]# `mysql -e 'show databases'` ```bash +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ ``` \[root@node5 \~\]# `systemctl restart mysqld.service` \[root@node5 \~\]# `systemctl stop mysqld.service` \[root@node5 \~\]# `rm -rf /var/lib/mysql/*` \[root@node5 \~\]# `mysqlbackup --backup-dir=/data/backup apply-log` #备份过程中产生的日志文件 \[root@node5 \~\]# `mysqlbackup --datadir=/var/lib/mysql/ --backup-dir=/data/backup copy-back-and-apply-log` #将备份的文件拷贝到datadir下 \[root@node5 \~\]# `chown -R mysql.mysql /var/lib/mysql/*` \[root@node5 \~\]# `systemctl start mysqld.service` \[root@node5 \~\]# `mysql -e 'select * from school.stu'` ```bash +-----+---------+--------+------+------------------+ | Sno | Sname | Ssex | Sage | Sdept | +-----+---------+--------+------+------------------+ | 1 | Alice | Female | 20 | Mathematics | | 2 | Bob | Male | 22 | Computer Science | | 3 | Charlie | Male | 21 | Engineering | | 4 | David | Female | 19 | Literature | +-----+---------+--------+------+------------------+ ``` ### 4.2 增量备份 **1、第一次增量备份** mysql\> `INSERT INTO stu (Sno, Sname, Ssex, Sage, Sdept) VALUES (5, 'Emma', 'Female', 20, 'Mathematics'),(6, 'Tom', 'Male', 22, 'Computer Science');` \[root@node5 \~\]# `mysqlbackup --user=mysqlbackup --password=MySQL@123 --socket=/var/lib/mysql/mysql.sock --compress --incremental --incremental-base=dir:/data/backup --incremental-backup-dir=/data/backup/incr1 backup` \[root@node5 \~\]# `ll /data/backup/incr1/` total 36 -rw-r--r--. 1 root root 255 Feb 24 21:55 backup-my.cnf drwxr-x---. 6 root root 4096 Feb 24 21:55 datadir drwxr-x---. 2 root root 4096 Feb 24 21:55 meta -rw-r-----. 1 root root 19936 Feb 24 21:55 server-all.cnf -rw-r-----. 1 root root 632 Feb 24 21:55 server-my.cnf **2、第二次增量备份** mysql\> `INSERT INTO stu (Sno, Sname, Ssex, Sage, Sdept) VALUES (7, 'Lily', 'Female', 21, 'Engineering'),(8, 'Jack', 'Male', 19, 'Literature');` \[root@node5 \~\]# `mysqlbackup --user=mysqlbackup --password=MySQL@123 --socket=/var/lib/mysql/mysql.sock --compress --incremental --incremental-base=history:last_backup --incremental-backup-dir=/data/backup/incr2 backup` \[root@node5 \~\]# `ll /data/backup/incr2/` total 36 -rw-r--r--. 1 root root 255 Feb 24 21:56 backup-my.cnf drwxr-x---. 6 root root 4096 Feb 24 21:56 datadir drwxr-x---. 2 root root 4096 Feb 24 21:56 meta -rw-r-----. 1 root root 19936 Feb 24 21:56 server-all.cnf -rw-r-----. 1 root root 632 Feb 24 21:56 server-my.cnf ### 4.3 增量备份还原 \[root@node5 \~\]# `mysql -e 'drop database school'` #删库 \[root@node5 \~\]# `mysql -e 'show databases'` ```bash +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ ``` \[root@node5 \~\]# `systemctl stop mysqld.service` #关闭mysqld服务 \[root@node5 \~\]# `rm -rf /var/lib/mysql/*` #清空mysql的datadir目录 \[root@node5 \~\]# `mysqlbackup --backup-dir=/data/backup apply-log` #备份过程中产生的日志文件 \[root@node5 \~\]# `mysqlbackup --incremental-backup-dir=/data/backup/incr1 --backup-dir=/data/backup/ apply-incremental-backup` #增备apply-incremental-backup \[root@node5 \~\]# `mysqlbackup --incremental-backup-dir=/data/backup/incr2 --backup-dir=/data/backup/ apply-incremental-backup` \[root@node5 \~\]# `mysqlbackup --datadir=/var/lib/mysql --backup-dir=/data/backup/ copy-back-and-apply-log` #将几次备份搞得文件拷到datadir \[root@node5 \~\]# `chown -R mysql.mysql /var/lib/mysql/*` \[root@node5 \~\]# `systemctl start mysqld.service` \[root@node5 \~\]# `mysql -e 'select * from school.stu'` ```bash +-----+---------+--------+------+------------------+ | Sno | Sname | Ssex | Sage | Sdept | +-----+---------+--------+------+------------------+ | 1 | Alice | Female | 20 | Mathematics | | 2 | Bob | Male | 22 | Computer Science | | 3 | Charlie | Male | 21 | Engineering | | 4 | David | Female | 19 | Literature | | 5 | Emma | Female | 20 | Mathematics | | 6 | Tom | Male | 22 | Computer Science | | 7 | Lily | Female | 21 | Engineering | | 8 | Jack | Male | 19 | Literature | +-----+---------+--------+------+------------------+ ```

相关推荐
鼠鼠我捏,要死了捏7 分钟前
MongoDB性能优化实战指南:原理、实践与案例
数据库·mongodb·性能优化
古井无波 202429 分钟前
ARMv8.1原子操作指令(ll_sc/lse)
数据库
__只是为了好玩__1 小时前
MongoDB 数据库 启用访问控制
数据库·mongodb
JeffreyGu.1 小时前
【Oracle】centos7静默安装oracle19c
数据库·oracle
Databend3 小时前
使用 SeaTunnel 建立从 MySQL 到 Databend 的数据同步管道
数据库
老纪的技术唠嗑局3 小时前
度小满列举五大技术场景拆解数据库选型方案,降本、性能、效率均翻倍
数据库·百度
一眼万里*e3 小时前
Python 字典 (Dictionary) 详解
前端·数据库·python
L_qingting3 小时前
Redis 主从复制
数据库·redis·缓存
不辉放弃4 小时前
pyspark中map算子和flatmap算子
数据库·pyspark·大数据开发
搞数据的小杰4 小时前
spark广播表大小超过Spark默认的8GB限制
大数据·数据库·分布式·spark