实例如下:
mysqldump -A -B --single-transaction >/server/backup/mysql_$(date +%F).sql
一般备份时都会进行压缩处理,以节省磁盘空间,如下
mysqldump -A -B --single-transaction |gzip>/server/backup/mysql_$(date +%F).sql.gz
恢复操作
cd /server/backup/
gzip -o mysql_$(date +%F).sql.gz
mysql -uroot -pMyadmin -h mysqldb.mingongge.com
source /server/backup/mysql_$(date +%F).sql
逻辑备份的优点与使用场景
优点:简单,易操作,自带工具方便、可靠。
使用场景:数据库数据量不大的情况可以使用,数据量比较大(超过20G左右)时备份速度比较慢,一定程度上还会影响数据库本身的性能。
2、物理备份
物理备份就是利用命令(如cp、tar、scp等)直接将数据库的存储数据文件复制一份或多份,分别存放在其它目录,以达到备份的效果。
这种备份方式,由于在备份时数据库还会存在数据写入的情况,一定程度上会造成数据丢失的可能性。在进行数据恢复时,需要注意新安装的数据的目录路径、版本、配置等与原数据要保持高度一致,否则同样也会有问题。
所以,这种物理备份方式,常常需要在停机状态下进行,一般对实际生产中的数据库不太可取。因此,此方式比较适用于数据库物理迁移,这种场景下这种方式比较高效率。
物理备份的优点及使用场景
优点:速度快,效率高。
场景:可用于停机维护及数据库物理迁移场景中。
实际生产环境中,具体使用哪种方式,就需要看需求与应用场景所定。
全量与增量备份概述
在介绍完备份方式之后,再来介绍一下,增量与全量备份这两个概念。
什么是全量备份?
全量备份:就是将数据库中的所有数据,或者是某一个特定的库里的所有数据,一次全部备份下来。
备份数据库中所有数据
mysqldump -A -B --single-transaction |gzip>/server/backup/All_data_$(date +%F).sql.gz
备份某个库的数据
mysqldump -A -B --single-transaction testDB1|gzip>/server/backup/testDB1_$(date +%F).sql.gz
什么是增量备份?
增量备份:指的是上一次全量备份之后到下一次全量备份这前这段时间内数据库所更新或者是增加的数据,将其备份下来。
注:全量备份是一个文件,而增量备份则是MySQL的binlog日志文件。所以常说的增量备份就是备份binlog日志文件。
两者的区别在哪?
全量备份:需要的备份时间长一点,恢复时间会短一点,因为文件数少,维护方便。但是,全量备份的文件大,占用一定的磁盘空间,全理备份时会一定程序上影响数据库的性能(这也就是为什么在0:00点备份的原因),也因文件大的原因,不便于服务器本地保存过多文件,重要业务的全量备份文件可能需要手工下载或迁移到服务器之外的存储空间中。
增量备份:备份简单,恢复时复杂一点,因为文件数量多,需将所有binlog文件解析成SQL语句,如下:
mysqlbinlog testDB1-bin.000001 testDB1-bin.000002 >./bin.sql
然后,再通过恢复的方式进行恢复
mysql -uroot -pMyadmin -h mysqldb.mingongge.com
source /server/backup/bin.sql
或者如下操作
cd /server/backup
mysql testDB1 <./bin.sql
备份与恢复实践操作
对于Mysql数据库的备份,一般采取脚本+定时任务进行日常备份。
常用执行策略是:
- 每天0:00执行一次全量备份
- 按业务需求执行增量备份
分享一个我在一个创业公司初期的一个备份方案实例
阿里云数据库服务器备份方案
方案一:
目前数据库是主从同步,从库开启binlog日志功能进行异地备份,就目前数据量而言,只需要在从库的基础上进行定时全量与增量备份数据库即可。
1、创建备份目录
mkdir /server/backup
2、备份数据库到指定目录
mysqldump --single-transaction -F -B phoenix_coupon_production|gzip >/server/backup/phoenix_$(date +%F).sql.gz
mysqldump --single-transaction -F -B ywotx|gzip >/server/backup/ywotx_$(date+%F).sql.gz
find /server/backup/ -type f –name “*.sql.gz”-mtime +7 |xargs rm-f
将脚本写入定时任务,分时段进行打包备份
3、定时备份二进制文件
通过参数刷新binlog产生新的文件,通过脚本判断文件新旧,然后备份旧的日志文件
mysqladmin -uroot -pywotx!123 flush-logs #刷新日志,产生新的日志文件
最终将备份文件同步或定时手工下载到异地备份服务器异地存储备份文件,实现数据库备份文件双备份存储,防止服务器硬件故障。
方案二
后期数据量增大之后,数据库需要进行读写分离,实现主写,从读,主从同步的架构,备份还是按照原来的备份方案进行,可采用分库分表进行数据备份,防止数据量大导致的恢复时间的问题,提升恢复效率。
1、创建备份目录
Mkdir /server/backup
2、备份数据到指定目录( 分库分表)
#/bin/sh
#create by mingongge at 2017-06-01
BACKUPDIR=/server/backup
DATE=date +%F
USER=root
PASSWD=”123456”
CMD=”mysql –u
U
S
E
R
–
p
USER –p
USER–pPASSWD”
DUMPCMD=”mysqldump –u
U
S
E
R
–
p
USER –p
USER–pPASSWD --single-transaction -F”
for dbname in ${CMD} –e “show databases”|sed ‘1d’
do
mkdir –p
B
A
C
K
U
P
D
I
R
/
{BACKUPDIR}/
BACKUPDIR/{dbname}
for tablename in${CMD} –D ${dbname} –e “show tables”|sed ‘1d’
do
D
U
M
P
C
M
D
−
−
t
a
b
l
e
s
{DUMPCMD} --tables
DUMPCMD−−tables{dbname} ${tablename} |gzip >
B
A
C
K
U
P
D
I
R
/
{BACKUPDIR}/
BACKUPDIR/{dbname}/KaTeX parse error: Expected group after '_' at position 12: {tablename}_̲(DATE).sql.gz
done
done
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-SEERcYKj-1712937007515)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!