shell脚本备份MySQL_shell脚本实现mysql备份,我总结了24家大厂100份面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

total 122916
-rw-r----- 1 mysql mysql 357 Jun 15 23:36 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Jun 15 23:36 ibdata1
-rw-r----- 1 mysql mysql 50331648 Jun 15 23:36 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Jun 15 23:36 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Jun 15 23:36 ibtmp1
drwxr-x— 2 mysql mysql 4096 Jun 15 23:36 mysql
drwxr-x— 2 mysql mysql 8192 Jun 15 23:36 performance_schema
drwxr-x— 2 mysql mysql 8192 Jun 15 23:36 sys
drwxr-x— 2 mysql mysql 50 Jun 15 23:36 test1
-rw-r----- 1 mysql mysql 504 Jun 15 23:36 xtrabackup_info
[root@mysql ~]# systemctl restart mysqld
#验证还原后的数据
mysql> select * from tb1;
±-----±---------±-----+
| id | name | back |
±-----±---------±-----+
| 1 | zhangsan | w |
| 2 | lisi | q |
| 3 | wangwu | e |
| 4 | zhaoliu | r |
| 5 | liuyi | t |
| 6 | didi | y |
±-----±---------±-----+
6 rows in set (0.00 sec)

还原增量备份: 为了防止还原时产生大量的二进制日志,在还原时可临时关闭二进制日志后再还原:

mysql> set sql_log_bin=0;
mysql> source /opt/mysqlbackup/inc/2020-06-15.sql

也可以在命令行执行如下语句

mysql –uroot –p < /opt/mysqlbackup/inc/2020-06-15.sql
mysqlbinlog /opt/mysqlbackup/inc/2020-06-15.sql | mysql –uroot -p

重新启动二进制日志并验证还原数据:

mysql> set sql_log_bin=1;
mysql> select * from tb1; # 可以看到两个tom已经回来了
±-----±---------±-----+
| id | name | back |
±-----±---------±-----+
| 1 | zhangsan | w |
| 2 | lisi | q |
| 3 | wangwu | e |
| 4 | zhaoliu | r |
| 5 | liuyi | t |
| 6 | didi | y |
| 7 | tom | u |
| 8 | tom2 | i |
±-----±---------±-----+
8 rows in set (0.00 sec)

xtrabackup完全备份+xtrabacup增量备份

前面我们进行增量备份时,使用的还是老方法:备份二进制日志。其实xtrabackup还支持进行增量备份。先介 绍下xtrabackup的备份原理 在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件 (transaction log,事务日志)。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB 会检查数据文件和事务日志,并执行两个步骤:它应用已经提交的事务日志到数据文件,并将修改过但没有提 交的数据进行回滚操作。xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文 件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这 时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。xtrabackup必须持 续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开 始,就不停的将事务日志中每个数据文件的修改都记录下来。这就是xtrabackup的备份过程 所以每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础。xtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的 data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作:

1.It applies committed transaction logentries to the data files
2.it performs an undo operation on anytransactions that modified data but did not commit. 所以在prepare过程中,XtraBackup使用复制到的transactions log对备份出来的innodb data file进行crash recovery
准备测试环境,创建一个测试数据库,并创建一张表输入几行数据

mysql> create database test2;
mysql> use test2;
mysql> create table tab1(id int,name varchar(20));
mysql> insert into tab1 values(1,‘tom1’);
mysql> insert into tab1 values(2,‘tom2’);

xtrabacup进行备份执行完全备份:

[root@mysql ~]# xtrabackup --default-file=/etc/my.cnf --user=root --password=“123” --port=3306 --backup --target-dir=/opt/mysqlbackup/full/full_incre_KaTeX parse error: Expected 'EOF', got '#' at position 26: …m-%d_%H:%M:%S) #̲查看完全备份文件 [root@…(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_

部分显示信息如下图所示:
在这里插入图片描述

#查看增量备份文件:
[root@mysql ~]# ls -l /opt/mysqlbackup/inc/
total 8
drwxr-x— 7 root root 275 Jun 16 00:04 incre_20200616_000403
#这里的增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。
#向表中再插入几行数据,继续第二次增量备份
mysql> insert into tab1 values (4,‘tom4’);
mysql> commit;
#接下来进行第二次增量备份
[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password=“123” --port=3306 --backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20200616_000403

如下图所示:
在这里插入图片描述
注:第二次增量备份–incremental-basedir指向上一次增量备份文件的位置。注:第二次增量备份–incremental-basedir指向上一次增量备份文件的位置。注:第二次增量备份–incremental-basedir指向上一次增量备份文件的位置。

#查看增量备份文件
[root@mysql ~]# ls -l /opt/mysqlbackup/inc/
total 8
drwxr-x— 7 root root 275 Jun 16 00:04 incre_20200616_000403
drwxr-x— 7 root root 275 Jun 16 00:08 incre_20200616_000826

xtrabacup进行增量恢复 为了验证比对,先删除两个增量备份前表里面的数据

mysql> delete from tab1 where id=3;

完整备份恢复:在进行恢复前,如果完整备份在远程主机上,首先将完整备份复制到本地主机上,如果是tar 包,则需要先解包,解包命令为:tar –izxf xxx.tar,这里必须使用-i参数(忽略存档中的 0 字节块(通常意味着 文件结束))。

开始全备份恢复 :

[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password=“123” --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/

恢复成功如图所示:
**加粗样式**
恢复到第一次增量的时刻 增量备份恢复的步骤和完整备份恢复的步骤基本一致,只是应用日志的过程稍有不 同。增量备份恢复时,是先将所有的增量备份挨个应用到完整备份的数据文件中,然后再将完整备份中的数据 恢复到数据库中。

[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password=“123” --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_000403/

如图所示:
在这里插入图片描述
恢复到第二次增量备份前面:

[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password=“123” --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_000826/

在这里插入图片描述
恢复整个库 :

[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password=“123” --target-dir=/opt/mysqlbackup/full/full_incre_/

在这里插入图片描述
停止mysql数据库:

[root@mysql ~]# systemctl stop mysqld

开始rsync同步数据文件:

[root@mysql full_incre_]# rsync -rvt --exclude ‘xtrabackup_checkpoints’ --exclude ‘xtrabackup_logfile’ ./ /usr/local/mysql/data/

#当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在 启动mysqld之前还需要事先修改数据文件的属主和属组。
[root@mysql data]# ll
total 122972
-rw-r----- 1 mysql mysql 56 Jun 15 23:38 auto.cnf
-rw-r----- 1 root root 425 Jun 15 23:56 backup-my.cnf
-rw-r----- 1 mysql mysql 177 Jun 15 23:38 bin_log.000001
-rw-r----- 1 mysql mysql 177 Jun 15 23:40 bin_log.000002
-rw-r----- 1 mysql mysql 1847 Jun 16 00:42 bin_log.000003
-rw-r----- 1 mysql mysql 111 Jun 15 23:41 bin_log.index
-rw-r----- 1 root root 298 Jun 15 23:56 ib_buffer_pool
-rw-r----- 1 root root 12582912 Jun 16 00:19 ibdata1
-rw-r----- 1 root root 50331648 Jun 16 00:19 ib_logfile0
-rw-r----- 1 root root 50331648 Jun 16 00:19 ib_logfile1
-rw-r----- 1 root root 12582912 Jun 16 00:19 ibtmp1
drwxr-x— 2 mysql mysql 4096 Jun 16 00:18 mysql
-rw-r----- 1 mysql mysql 22460 Jun 16 00:42 mysql.err
drwxr-x— 2 mysql mysql 8192 Jun 16 00:18 performance_schema
drwxr-x— 2 mysql mysql 8192 Jun 16 00:18 sys
drwxr-x— 2 mysql mysql 50 Jun 16 00:18 test1
drwxr-x— 2 mysql mysql 52 Jun 16 00:18 test2
-rw-r----- 1 root root 20 Jun 16 00:18 xtrabackup_binlog_info
-rw-r–r-- 1 root root 20 Jun 16 00:19 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root 628 Jun 16 00:18 xtrabackup_info
[root@mysql data]# chown -R mysql:mysql /usr/local/mysql/data/
[root@mysql data]# systemctl restart mysqld
mysql> select * from tab1;
±-----±-----+
| id | name |
±-----±-----+
| 1 | tom1 |
| 2 | tom2 |
| 3 | tom3 |
| 4 | tom4 |
±-----±-----+

innobackupex全库备份+innobackupex增量备份

测试环境准备创建一个测试数据库,并创建一张表输入几行数据

mysql> create database test3;
mysql> use test3;
mysql> create table tab1(id int,name varchar(20));
mysql> insert into tab1 values(1,‘lisi1’);
mysql> insert into tab1 values(2,‘lisi2’);

1、innobackupex先做完全备份

[root@mysql data]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=“123” /opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S) --no-timestamp
#查看完全备份文件
[root@mysql data]# ls /opt/mysqlbackup/full/
full_incre_20200616_005156

做第一次增量备份 先录入增量数据

mysql> insert into tab1 values(3,‘lisi3’);
#进行增强备份
[root@mysql data]# innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20200616_005156 --user=root --password=“123” --no-timestamp
#查看增量备份文件
[root@mysql data]# ll /opt/mysqlbackup/inc/
drwxr-x— 8 root root 288 Jun 16 00:56 incre_20200616_005610

基于全备和第一个增量备份来做第二次增量备份 先录入增量数据录入

mysql> insert into tab1 values(4,‘lisi4’);
[root@mysql inc]# innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20200616_005610/ --user=root --password=“123” --no-timestamp
#查看增量备份文件
[root@mysql inc]# ll
total 8
drwxr-x— 8 root root 288 Jun 16 00:56 incre_20200616_005610
drwxr-x— 8 root root 288 Jun 16 01:03 incre_20200616_010301

#**先删除两次增量数据,用来查看验证恢复结果**
mysql> delete from tab1 ;
#开始做恢复,恢复全备份
[root@mysql inc]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/
#–redo-only 用于准备增量备份内容把数据合并到全备份目录,配合incremental-dir 增量备份目录使用
#基于全备份进行第一次增量备份的恢复
[root@mysql ~]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_005610/
#基于全备份和第一次增量备份,恢复第二次增量备份
[root@mysql ~]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_010301/

#停止数据库
[root@mysql ~]# systemctl stop mysqld
#清空数据目录下所有文件

[root@mysql ~]# mkdir -p /tmp/mysqldatabak
[root@mysql ~]# mv /usr/local/mysql/data/* /tmp/mysqldatabak/
#将恢复好的数据按照配置文件的需求拷贝到相应目录
[root@mysql ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=“123” --copy-back /opt/mysqlbackup/full/full_incre_20200616_005156/

#当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在 启动mysqld之前还需要事先修改数据文件的属主和属组
[root@mysql ~]# cd /usr/local/mysql/data/
[root@mysql data]# ll
total 12328
-rw-r----- 1 root root 298 Jun 16 01:12 ib_buffer_pool
-rw-r----- 1 root root 12582912 Jun 16 01:12 ibdata1
drwxr-x— 2 root root 4096 Jun 16 01:12 mysql
drwxr-x— 2 root root 8192 Jun 16 01:12 performance_schema
drwxr-x— 2 root root 8192 Jun 16 01:12 sys
drwxr-x— 2 root root 50 Jun 16 01:12 test1
drwxr-x— 2 root root 52 Jun 16 01:12 test2
drwxr-x— 2 root root 52 Jun 16 01:12 test3
-rw-r----- 1 root root 20 Jun 16 01:12 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root 598 Jun 16 01:12 xtrabackup_info

[root@mysql data]# chown -R mysql:mysql /usr/local/mysql/data/
#启动服务
[root@mysql data]# systemctl restart mysqld

登录mysql界面,查看数据是否已经恢复

mysql> select * from tab1;
±-----±------+
| id | name |
±-----±------+
| 1 | lisi1 |
| 2 | lisi2 |
| 3 | lisi3 |
| 4 | lisi4 |
±-----±------+
4 rows in set (0.00 sec)

Xtrabackup的“流”及“备份压缩”功能 Xtrabackup对备份的数据文件支持“流”功能,即可以将备份的数据通过 STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需要使用-stream选项即可。

innobackupex --user=root --password=“123” --stream=tar /opt/mysqlbackup/full/ | gzip >/opt/mysqlbackup/full/full_date +%F\_%H%M%S.tar.gz

MySQL备份脚本及异地备份

1.异地备份的话,需要做ssh免密登录

在MySQL服务器上操作

ssh-keygen

ssh-copy-id root@192.168.1.4

  1. MySQL全备脚本,可以备份多个数据库,单独文件夹,删除十天前的备份,拷贝到其他服务器(scp增量,不会覆盖掉原先文件)

#!/bin/bash

#Mysql dabase information

#主机

find /aebiz/soft/databackup/* -type f -mtime +10 -name “*.gz” -exec rm {} ;

db_host=“localhost”

#数据库帐号

db_user=“root”

#数据库密码

db_passwd=“123456”

#mysql安装目录

MYSQL=“/aebiz/soft/mysql”

#mysql命令目录

MYSQLDUMP=“/aebiz/soft/mysql/bin/mysqldump”

#Path information

#存放备份文件的路径

BACKUP_DB=“/aebiz/soft/databackup”

LogFile=$BACKUP_DB"/bak.log"

#Time information

#时间

time=date +"%Y-%m-%d-%H-%M-%S"

day=date +"%d"

month=date +"%Y-%m"

weekday=date +"%u"

#Path enable write

if [ ! -w “$BACKUP_DB” ]; then

chmod -R 700 $BACKUP_DB

fi

#echo “**********************************host info****************************************”

#echo “db_host:”$db_host

#echo “db_user:”$db_user

#echo “db_passwd:”$db_passwd

#echo “MYSQL:”$MYSQL

#echo “MYSQLDUMP:”$MYSQLDUMP

#echo “databaseName:”$databaseName

#echo “BACKUP_DB:”$BACKUP_DB

#echo “**********************************************************************************”

#Mysql Backup

Date=date +%Y%m%d

Begin=date +"%Y-%m-%d %H:%M:%S"

#echo "start backup database:" d a t a b a s e N a m e " " databaseName" " databaseName""Begin

#databases

#需要备份的数据库,如果有多个数据库,请用,分隔

databaseList=“ceshishop,ceshiydys,testshop0711,testydys0711”

for databaseName in echo "$databaseList" | sed 's/,/\n/g'

do

echo $databaseName

#fileName

#生成备份文件名

fileName= d a t a b a s e N a m e " − " databaseName"-" databaseName""time".sql"

#生成备份文件完整路径

BACKUP_DBPATH= B A C K U P _ D B " / " BACKUP\_DB"/" BACKUP_DB"/"databaseName

#echo “***********************************database Info***********************************************”

#echo “BACKUP_DBPATH:”$BACKUP_DBPATH

#echo “fileName:”$fileName

#echo “**********************************************************************************”

if [ ! -d “$BACKUP_DBPATH” ]; then

mkdir “$BACKUP_DBPATH”

fi

#备份mysql

$MYSQLDUMP -u d b _ u s e r − p db\_user -p db_userpdb_passwd -h $db_host $databaseName > B A C K U P _ D B P A T H / BACKUP\_DBPATH/ BACKUP_DBPATH/fileName

#打包.sql文件

cd $BACKUP_DBPATH && tar -czf $fileName.tar.gz $fileName && rm -rf $fileName && chmod go-rwx $fileName.tar.gz

Last=date +"%Y-%m-%d %H:%M:%S"

#echo "end backup database:" d a t a b a s e N a m e " " databaseName" " databaseName""Last

#输出日志

echo start: B e g i n e n d : Begin end: Beginend:Last $fileName succ >> $LogFile

done

scp -r /aebiz/soft/databackup root@192.168.1.4:/aebiz/soft

3.Mysql服务器设置crontab定时任务

每隔三天的凌晨三点,执行备份

0 3 */3 * * sh /aebiz/soft/databasebak.sh

4.备份服务器设置crontab定时任务

备份服务器的可以设置保留时间长一些,删除30天前的备份

每隔三天查找备份目录下超过三十天的文件并删除.

0 3 */3 * * find /aebiz/soft/databackup/* -type f -mtime +30 -name “*.gz” -exec rm {} ;

mysql的备份和恢复

一、mysql备份:

1.备份脚本如下:

#!/bin/bash
#备份存放的路径
backup_dir=“/backup/mysql/full”
#备份用户
mysql_user=“root”
#备份密码
mysql_passwd=“password”
#备份记录日志
log=“./mysql_backup.log”
[ -d $backup_dir ] || mkdir -p KaTeX parse error: Expected '}', got '#' at position 44: …mysql\_full(){ #̲1.全量备份,在full目录生…log
innobackupex --user= m y s q l u s e r − − p a s s w o r d = mysql_user --password= mysqluserpassword=mysql_passwd $backup_dir
if [ ? − e q 0 ] ; t h e n e c h o " B a c k u p s u c c e s s a t " ‘ d a t e + " ? -eq 0 ];then echo "Backup success at "`date +"%Y-%m-%d %H:%M:%S"`>> ?eq0];thenecho"Backupsuccessat"‘date+"log
#删除1天前的备份
find b a c k u p d i r − t y p e d − m t i m e + 7 ∣ x a r g s r m − r f > > backup_dir -type d -mtime +7|xargs rm -rf >> backupdirtypedmtime+7∣xargsrmrf>>log
else
echo "Backup fail at "date +"%Y-%m-%d %H:%M:%S">>$log
fi
}
backup_mysql_full

2.添加定时备份,每天凌晨2点开始自动备份。

crontab -e
00 02 * bash /opt/xtrabackup_scripts/backup_mysql_full.sh

说明:前提需安装xtrabackup备份工具,一款物理备份,速度相比mysqldump的逻辑备份快很多。

脚本的特点:

1.属于物理热备,速度快,不影响业务。
2.定时自动备份
3.自动保留7天的备份,并删除旧备份,防止磁盘占满
4.备份日志记录,备份失败或没有备份方便查找原因
5.全库备份

二、mysql数据库的恢复

#!/bin/bash

使用方法 先删除数据rm -rf /data/mysqldata/, 然后 sh recover_mysql_full.sh 2018-08-08_16-33-07

#恢复的目标库的用户名
mysql_user=“root”

#恢复的目标库的密码
mysql_passwd=“password”

#备份文件存放的目录
mysql_recover_dir=“/backup/mysql/full”

#恢复的目标库数据库文件路径
mysql_dir=“/data/mysqldata/”

#目标库的数据配置文件
my_cnf=“/etc/my.cnf”

#日志记录
log=“./mysql_recover.log”

#自动创建恢复目录
[ -d $mysql_recover_dir ] || mkdir -p $mysql_recover_dir

#备份数据数据中可能包含未提交的事务或已经提交但未同步至数据文件中的事务,此时数据还处于不一致状态。因此需要通过回滚未提交的事务及已经提交的事务至数据文件,使得数据文件
处于一致性状态

innobackupex --defaults-file= m y c n f − − u s e r = my_cnf --user= mycnfuser=mysql_user --password=$mysql_passwd --apply-log $mysql_recover_dir/$1

#开始真正的恢复数据
service mysqld stop
rm -rf KaTeX parse error: Undefined control sequence: \* at position 11: mysql_dir/\̲*̲ >>log
innobackupex --defaults-file= m y _ c n f − − u s e r = my\_cnf --user= my_cnfuser=mysql_user --password=$mysql_passwd --copy-back $mysql_recover_dir/ 1 > > 1>> 1>>log

chown mysql.mysql -R m y s q l _ d i r > > mysql\_dir >> mysql_dir>>log
service mysqld start
[ $? -ne 0 ] && service mysqld start

脚本说明:

此恢复脚本可以和备份脚本组合在一起,加个定时任务,就可以做每天定时同步生产数据到测试环境。对于数据量几十上百G不大的情况挺实用。当然,如果数据量很大,300G以上则需要用到otter,数据的消费和订阅,后面会讲到此方案,强大到能实时同步跨国家、跨地区的数据实时同步。

三、恢复到一台新的数据库

很多时候我们数据出了问题,并不想直接还原到原先的库,毕竟数据缺少一天的。还原直接损失一天的数据,因此我们想还原到别的地方做对比看看,现准备好新搭建的一台数据库。
1.恢复数据前的准备(合并xtabackup_log_file和备份的物理文件),应用备份文件

innobackupex —apply-log /backup/mysql/full/2019-01-02_02-00-02

2.删除原先数据库里的数据

service mysqld stop
cd /var/lib/mysql/
rm -rf *

3.恢复

innobackupex —copy-back /backup/mysql/full/2019-01-02_02-00-02
chown -R mysql.mysql /var/lib/mysql/
service mysqld restart

最后查看新数据库已有原来的数据。

参考链接 :
MySQL增量备份脚本 :https://www.jianshu.com/p/8455d061a1e7

Mysql备份 https://mp.weixin.qq.com/s/SBiKqZXe1K-bjHiuKQLSVA

xtrabackup 实现MySQL数据库备份 :https://mp.weixin.qq.com/s/fL8Mp0hM-rzyPXjDUFZP-Q

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
p/mysql/full/2019-01-02_02-00-02

2.删除原先数据库里的数据

service mysqld stop
cd /var/lib/mysql/
rm -rf *

3.恢复

innobackupex —copy-back /backup/mysql/full/2019-01-02_02-00-02
chown -R mysql.mysql /var/lib/mysql/
service mysqld restart

最后查看新数据库已有原来的数据。

参考链接 :
MySQL增量备份脚本 :https://www.jianshu.com/p/8455d061a1e7

Mysql备份 https://mp.weixin.qq.com/s/SBiKqZXe1K-bjHiuKQLSVA

xtrabackup 实现MySQL数据库备份 :https://mp.weixin.qq.com/s/fL8Mp0hM-rzyPXjDUFZP-Q

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-K1KijwvX-1713414640104)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一个备份MySQL数据库的Shell脚本示例: ```bash #!/bin/bash # MySQL数据库备份脚本 # 设置备份文件名和目录 BACKUP_DIR="/var/backups/mysql" DATE=$(date +%Y-%m-%d_%H-%M-%S) DB_NAME="mydatabase" FILENAME="$BACKUP_DIR/$DB_NAME-$DATE.sql" # 设置MySQL登录信息 MYSQL_USER="root" MYSQL_PASSWORD="password" # 执行备份 mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD $DB_NAME > $FILENAME # 压缩备份文件 gzip $FILENAME # 删除7天前的备份文件 find $BACKUP_DIR -type f -name "*.gz" -mtime +7 -exec rm {} \; ``` 上述脚本将会备份名为 "mydatabase" 的MySQL数据库,并将备份文件保存在 "/var/backups/mysql" 目录下。脚本将创建一个新的备份文件名,格式为 "mydatabase-YYYY-MM-DD_HH-MM-SS.sql",其中 "YYYY-MM-DD_HH-MM-SS" 是当前日期和时间。备份完成后,脚本将使用 gzip 压缩备份文件,并删除7天前的备份文件。 请注意,为了安全起见,建议将MYSQL_USER和MYSQL_PASSWORD的值设置为有效的MySQL用户名和密码,而不是将其硬编码在脚本中。 ### 回答2: shell脚本备份MySQL数据库是一种自动化的数据库备份方式,它通过编写shell脚本实现备份任务的执行。下面是一个简单的用于备份MySQL数据库的shell脚本示例: #!/bin/bash # 设置备份目录 BACKUP_DIR="/opt/backup/db" # 设置MySQL登录信息 DB_USER="root" DB_PASSWORD="yourpassword" # 设置备份文件名 BACKUP_FILE="db_backup_$(date +%Y%m%d%H%M%S).sql" # 创建备份目录 mkdir -p $BACKUP_DIR # 备份MySQL数据库到指定目录 mysqldump -u $DB_USER -p$DB_PASSWORD --all-databases > $BACKUP_DIR/$BACKUP_FILE # 判断备份是否成功 if [ $? -eq 0 ]; then echo "MySQL数据库备份成功,备份文件名为:$BACKUP_FILE" else echo "MySQL数据库备份失败" fi 在上述脚本中,首先定义了备份目录、MySQL登录信息和备份文件名的变量。然后,通过mkdir命令创建备份目录。接下来,使用mysqldump命令将MySQL数据库备份到指定目录,并将备份文件命名为当前日期和时间。最后,通过判断mysqldump命令执行的返回值来确定备份是否成功,并输出相应的提示信息。 使用该脚本进行MySQL数据库备份只需在终端中执行bash命令加上脚本路径即可,如:bash /path/to/backup_mysql.sh。执行完毕后,备份文件将保存在指定的备份目录中。 这种shell脚本备份MySQL数据库的方式可以自动化执行备份任务,提高工作效率,同时也方便了备份文件的管理和查找。 ### 回答3: shell脚本备份MySQL数据库是通过编写一个脚本文件来实现自动备份和恢复MySQL数据库的操作。下面是一个简单的示例: #!/bin/bash # Shell脚本备份MySQL数据库 # 定义备份存储目录和时间戳 backup_dir="/path/to/backup" timestamp=$(date +%Y%m%d%H%M%S) # 定义MySQL数据库的连接参数 db_user="root" db_password="password" db_host="localhost" db_name="database_name" # 创建备份目录 if [ ! -d "$backup_dir" ]; then mkdir -p $backup_dir fi # 使用mysqldump命令备份数据库 mysqldump -u$db_user -p$db_password -h$db_host $db_name > $backup_dir/${db_name}_${timestamp}.sql # 检查备份是否成功 if [ $? -eq 0 ]; then echo "数据库备份成功!" else echo "数据库备份失败!" fi # 清理过期备份(保留最新的N个备份) backup_count=$(ls -l $backup_dir | grep -c "^-" 2>/dev/null) if [ $backup_count -gt 10 ]; then oldest_backup=$(ls -tr $backup_dir | head -1) rm -f $backup_dir/$oldest_backup fi # 恢复MySQL数据库(如果需要) # mysql -u$db_user -p$db_password -h$db_host -e "DROP DATABASE $db_name;" # mysql -u$db_user -p$db_password -h$db_host -e "CREATE DATABASE $db_name;" # mysql -u$db_user -p$db_password -h$db_host $db_name < $backup_dir/latest.sql 这个脚本的功能是备份指定的MySQL数据库,将备份文件保存到指定的目录中,并可根据需要恢复数据库。脚本中使用了mysqldump命令来导出数据库,并使用mysql命令来恢复数据库。备份文件保留最新的10个,超过数量的将自动删除最旧的备份文件。可以根据实际需求修改备份目录、数据库连接参数和保留备份数量等设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值