千家信息网

浅谈Mysql数据库的备份方案

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,自从入行干IT互联网已经有些年头了,以前自己确实比较懒,从来不写博文,从来不总结工作经验,导致自身的技术提升的很慢,成长也是很慢,正儿八经的开始写博文也是从去年才开始的,写点东西,总结下,确实挺好,这
千家信息网最后更新 2026年11月03日浅谈Mysql数据库的备份方案

自从入行干IT互联网已经有些年头了,以前自己确实比较懒,从来不写博文,从来不总结工作经验,导致自身的技术提升的很慢,成长也是很慢,正儿八经的开始写博文也是从去年才开始的,写点东西,总结下,确实挺好,这样回顾自己的过往,感觉自己还是多多少少留下了点东西,不至于回想起来太过空虚,太过遗憾。好了废话不多说了,接下来分享点自己近4年来接触MySQL数据备份这一块的小经验。

数据是一个互联网公司的命脉,数据库的安全以及备案的完整性是至关重要的,所以我们需要在工作中要很熟练的掌握数据的备份与恢复,这也是一个合格的运维DBA必须具有的职业技能。

我这里简单总结MySQL的备份分为3种
分为冷备份,逻辑备份,热备份

1、冷备份:

一般主要用于非核心业务,这类业务一般都是允许业务中断的,冷备份的特点就是数度快,恢复时也最为简单。通常直接复物理文件来实现冷备份

1.1备份过程:

第一关闭mysql服务
第二步就是把datas数据目录(包含ibdata1)和日志目录(包含ib_logfile0,ib_logfile1,ib_logfile2)复制到磁盘,或者本地的另一块磁盘里

1.2恢复过程:

第一使用复制的数据目录和日志目录替换原有的目录
第二就是启动mysql

2、逻辑备份MySQLdump

生产场景备份的命令:
生产场景不同引擎mysqldump备份命令
myisam引擎企业生产备份命令(适合所有引擎或混合引擎):

mysqldump -uroot -p123456 -A -B -F -R --master-data=2 -x --events|gzip >/opt/all.sql.gz

提示:-F也可以不用,与--master-data有些重复。
innodb引擎企业生产备份命令:推荐使用的

mysqldump -uroot -p123456 -A -B -F -R --master-data=2  --default-character-set=utf8  --events --single-transaction |gzip >/opt/all.sql.gz

提示:-F也可以不用。与--master-data有些重复。
--default-character-set=utf8 指定备份出的sql数据的字符集为utf8,当然,这个要提前知道线上的mysql库全部采用的字符集都是utf8,否则在恢复到线上的库会出现字符集不一致的问题出现乱码

提示:逻辑备份一般是数据迁移或者数据量很小时采用,逻辑备份采用的是数据导出的方式

2.1mysqldump库表等备份说明:

全备:

Mysqldump -uroot -p  -q -single-transaction -A >>all.sql

导出多个数据库:

Mysqldump -uroot -p  -q -single-transaction -B  test01 wjw01 test02 >test01_wjw01_test02.sql

导出一个test库的某张wjw01表:

Mysqldump -uroot -p  -q -single-transaction -b  test  wjw01>>test_wjw01.sql

只导出表结构:

Mysqldump -uroot -q -d  --skip-triggers

只需要导出储存过程时:

Mysqldump -uroot -q -Rtdn  --skip-triggers 

只需要导出触发器:

Mysqldump -uroot -p -q -tdn -triggers

只需要导出事件:

Mysqldump -uroot -p -q -Etdn -skip-triggers

只需要导出数据:

Mysqldump -uroot -p -q  --skip-transaction --skip-triggers -t

要想在线上建立一台新的slave,则在master上执行如下命令:

Mysqldump -uroot -p -q -single-transaction -master-data=2 -A >>all.sql

提示:在mysql5.5里增加了一个新的参数:--dump-slave,使用该参数可在slave端dump数据,建立新的slave,其目的是为了防止对主库造成过大的压力。

在slave上执行以下命令:

Mysqldump  -uroot -p  -A -dump-slave=2 -q -single-transaction >/tmp/all.sql查看alls.sql 里面会记录slave上的那个点。

注意:--dump-slave用于在slave上dump数据,建立新的slave

2.2Mysqldump优缺点以及使用场景

优点:
1、恢复简单,可以使用管道将他们输入到mysql
2、与存储引擎无关,因为是从MySQL服务器中提取数据而生成的,所以消除了底层数据存储的不同
3、有助于避免数据损坏。若磁盘驱动器有故障而要复制原始文件时,此时将得到一个损坏的备份
缺点:
1、 必须有数据库服务器完成逻辑工作,需要更多地cpu周期
2、 逻辑备份还原速度慢:需要MySQL加载和解释语句、转化存储格式、重建引擎

使用场景:对于MySQL数据库数据量不是很大的场景,建议使用。因为备份方便,简单灵活,易操作
当数据库特别的时候,比如30G以上时,备份MySQL数据时,也就建议不要采用mysqldump了,因为备份的时间以及恢复数据库的时间太长了,会对库表造成锁,对线上的业务影响还是比较大的

2.3简单介绍下MySQL全量备份+增量备份binlog

注意:生产上强烈建议MySQL开启Row格式来记录binlog,尽管这样对磁盘的IO以及磁盘的空间的消耗是比较大,但是和数据的安全性、完整性相比,磁盘资源那都是小事

全量备份脚本内容:

#!/bin/bash#mysql全量备份脚本建议在slave从库上运行,从库slave上建议开启参数log_slave_updates=1mkdir /backupcd /backupdateDIR=$(date +"%Y-%m-%d")mkdir -p $dateDIR/datapath=/data/mysql/datafor n in `mysql -uroot -p123456 -e "show databases"|grep -v "Database"`domysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B $n|gzip >/backup/$dateDIR/data/${n}_$dateDIR.sql.gzdonebinlog_rm=$(tail -n 1 $path/mysql-bin.index|sed 's/.\///')mysql -uroot -p123456 -e "purge binary logs to '$binlog_rm'"说明:这个全量备份脚本,会在导出的时候锁住全局表,并且此时刷新产生一个新的bin-log,期间会产生写操作的等待,直到导出结束后才会写入新产生的bin-log文件,然后旧的bin-log 文件会被删除删除掉,一般在晚上2:00业务低峰期执行操作

进行本地bin-log增量备份

在执行完全量备份脚本后,就可以执行增量备份脚本了.
增量备份脚本思路很简单:

先mysqladmin -uroot -p123456 flush-logs 刷新新的binlog文件,此时mysql写入到新的binlog文件中。然后把当前mysql数据库存放binlog的目录中抛去刚才最新生成的binlog文件,其余旧的binlog文件全部cp到本地服务器/backup/binlog  binlog的备份目录下。最后在登录MySQL清除当前的binlog文件数减一mysql -uroot -p123456 -e "purge binary logs to 'mysql-bin.(n-1)'"

3.热备份与恢复

热备份的方式也是直接复制数据物理文件,和冷备份一样,但是热备份可以不停机直接复制,一般用于7*24小时不间断的重要核心业务。Mysql的社区版本热备份工具InnoDB Hot Backup是付费的,只能试用30天,商业版才可以永久的使用,
Percona公司发布一个xtrabackup热备工具,和付费的工具一样,支持在线热备(备份时不影响数据的读写)是商业工具InnoDB Hot Backup的一个很好的替代。
xtrabackup热备工具是一个开源的工具,他可以非常快速的备份和恢复mysql数据库。由于Xtrabackup支持备份innodb表,实际生产环境中我们使用的工具是innobackupex,它是对xtrabackup的一层封装。innobackupex脚本用来备份非 InnoDB 表,同时会调用 xtrabackup命令来备份 InnoDB 表,innobackupex的基本流程如下:

1.开启redo日志拷贝线程,从最新的检查点开始顺序拷贝redo日志;2.开启idb文件拷贝线程,拷贝innodb表的数据3.idb文件拷贝结束,通知调用FTWRL,获取一致性位点4.备份非innodb表(系统表)和frm文件5.由于此时没有新事务提交,等待redo日志拷贝完成6.最新的redo日志拷贝完成后,相当于此时的innodb表和非innodb表数据都是最新的7.获取binlog位点,此时数据库的状态是一致的。8.释放锁,备份结束。

具体使用请参考博文:https://blog.51cto.com/wujianwei/1934084

关于Mysql数据库的备份方案到此处就介绍完了,博主技术水平有限,如有不对,请及时指出。欢迎一起交流学习

备份 数据 文件 数据库 命令 工具 引擎 拷贝 目录 脚本 业务 日志 磁盘 逻辑 生产 场景 建议 增量 提示 服务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 华服互联网科技怎么样 科技互联网项目 智能科技公司是互联网公司吗 互联网科技英文 浩特互联网科技 新浪科技互联网 互联网 新科技 蓝色互联网科技 互联网科技热点资讯 语蝶互联网科技有限公司 互联网科技公司有风险吗 洛阳昕诺飞互联网科技有限公司 世界互联网领先科技成果获奖 互联网时代的科技公司 锡山区互联网智能科技产品供应 江苏互联网智能科技软件 吉林省码上互联网科技电话 艺电能源互联网科技有限公司招聘 互联网领先科技成果宣传视频 互联网科技有限公司经营范围 厦门中拓互联网络科技有限公司 疫情对互联网科技公司影响 互联网 科技创业 深圳艾佳互联网科技 崇明区互联网教育科技售后服务 银川新华互联网科技学校联系电话 科技类公司包括互联网吗 互联网科技融合创新 科技互联网公司两年变化
0