MySQL数据库备份与恢复基础
2020-05-07 06:12:16来源:博客园 阅读 ()
MySQL数据库备份与恢复基础
目录
- 前言
- 1.备份数据的意义
- 2.使用mysqldump进行数据库备份
- 2.1.不带参数备份单个数据库
- 2.2.加-B参数备份
- 2.3.使用gzip压缩备份数据库
- 2.4.mysqldump命令工作原理
- 2.5.备份多个库
- 2.5.1.备份多个库
- 2.5.2.如何做分库备份
- 2.6.备份单个表
- 2.7.备份多个表
- 2.8.备份数据库表结构(不包含数据)
- 2.9.只备份数据库表的数据(不包含表结构)
- 2.10.同时将数据和表结构分离导出
- 2.11.刷新binlog文件参数(-F)
- 2.11.1.binlog是什么
- 2.11.2.binlog对于备份的作用
- 2.11.3.为什么要刷新binlog
前言
1.备份数据的意义
运维工作的核心简单概括起来就是两件事:第一个是保护公司的数据,第二个是让网站能够7*24小时提供服务。
虽然这两件事情都很重要,但是相比较而言,丢失一部分数据和让网站7*24小时提供服务,哪个更重要呢?
对于绝大多数企业来讲,失去数据就相当于失去商机,失去产品,失去客户,甚至会造成公司倒闭,那么,在所有的数据中,最核心的数据又是哪些呢?这恐怕要属数据库中的数据了。既然数据库中的数据地位这么高,那么数据库备份与恢复的重要性就不言而喻了。
2.使用mysqldump进行数据库备份
MySQL数据库自带了一个很优秀的备份命令,即mysqldump。
2.1.不带参数备份单个数据库
mysqldump oldboy >/opt/mysql_bak.sql
2.2.加-B参数备份
mysqldump -B oldboy >/opt/mysql_bak_B.sql #B参数的作用是增加创建数据库和连接数据库的语句,可同时备份多个库。
2.3.使用gzip压缩备份数据库
mysqldump -B oldboy|gzip>/opt/mysql_bak_B.gz
2.4.mysqldump命令工作原理
利用mysqldump命令备份数据的过程,实际上就是把数据(包括库表)从MySQL库里以SQL语句的形式直接输出或者生成备份文件的过程,这种备份成SQL语句的方式称为逻辑备份。
使用mysqldump命令可以把数据库中的数据导出来,并通过SQL语句的形式存储。这种备份方式称为逻辑备份,效率不是很高。在当下的生产场景中,多用于数据量不是很大的备份情况,例如30GB以内的数据。若在数据库数据很大的时候采用此备份方法,则所用的时候就会很长,恢复的时间也会很长,因此,当数据大于30GB后,建议选择其他的诸如Xtrabackup的物理方式进行备份和恢复。
2.5.备份多个库
2.5.1.备份多个库
mysqldump -B oldboy oldboy_utf8 mysql|gzip>/opt/all.sql.gz
2.5.2.如何做分库备份
分库备份实际上就是每次只执行一个mysqldump备份命令语句备份一个库,如果数据库里有多个库,就执行多条相同的语句来备份各个库。
mysqldump -uroot -p'oldboy123' -B oldboy |gzip >/tmp/oldboy.sql.gz
mysql -e "show databases;" |egrep -v "_schema|atabase" |sed -r 's#^(.*)#mysqldump -B \1 |gzip >/tmp/\1.sql.gz#g' |bash #bash执行这些备份命令,就是一次分开备份多个库了
2.6.备份单个表
当不加-B参数备份数据库时,例如“mysqldump oldboy test”,mysqldump命令默认就会把oldboy当作库,把test当作表,如果后面还有多个字符串,例如“mysqldump oldboy test test1“,那么除了oldboy为库之外,其他的test、test1都是oldboy库的表。
mysqldump oldboy test>/tmp/oldboy_test,sql
2.7.备份多个表
分表备份的缺点:数据文件多,很碎,一旦需要全部恢复又很麻烦。
1、做一个完整备份,再做一个分库分表备份。
2、虽然文件多、碎,但可以利用脚本批量操作多个SQL文件。
mysqldump mysql user db>/tmp/mysql.sql
egrep -v "#|\*|--|^$" /tmp/mysql.sql
mysqldump oldboy test > /tmp/oldboy_test.sql
2.8.备份数据库表结构(不包含数据)
利用mysqldump的-d参数可以只备份表的结构,即建表的语句。
mysqldump -d oldboy >/opt/oldboy.sql
2.9.只备份数据库表的数据(不包含表结构)
利用-t参数备份数据库表的数据(SQL语句形式)。
mysqldump -t oldboy >/opt/oldboy1.sql
2.10.同时将数据和表结构分离导出
利用-T参数可以实现将数据和表结构同时分离备份。
vi /etc/my.cnf
secure_file_priv='' #在[mysqld]模块下增加
/etc/init.d/mysqld restart
mysqldump oldboy test --compact -T /tmp/
1、-d参数的作用是只备份库表结构(SQL语句形式)。
2、-t参数的作用是只备份表内的数据(SQL语句形式)。
3、-T将库表和数据分离成不同的文件,数据是纯文本,表结构是SQL语句。
2.11.刷新binlog文件参数(-F)
2.11.1.binlog是什么
binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库库表和更改表内容的SQL语句都会记录到binlog里,但是对库表等内容的查询则不会记录到日志中。
2.11.2.binlog对于备份的作用
当有数据写入到数据库时,还会同时把更新的SQL语句写入到对应的binlog文件里。
使用mysqldump备份时,一般是对某一时刻的数据进行全备,例如,0点进行数据库备份。
假设是每天0点对数据库进行备份,那么在两次备份之间就有24小时的数据没有备份,在这期间如果数据库发生故障,使用mysqldump全量恢复也只能恢复到当日0点,但是有了binlog文件,就可以将两次完整备份间隔之间的数据还原,因为binlog文件里的数据就是写入数据库的数据,使用binlog文件恢复数据,我们称之为二进制增量数据恢复。
2.11.3.为什么要刷新binlog
刷新(切割)binlog日志的目的就是确定全备和增量备(binlog文件)的临界点,当全备完成后,全备时刻以前的binlog文件就无用了(全备里已有这部分数据了),但是全备以后到下一次全备之前的数据就是十分重要的,这部分数据就存在于binlog文件里,因此在进行全备时需要找到全备之后和binlog增量之间的临界点,使得恢复时,需要的binlog文件数据一条不多(不能和全备的内容重合),一条不少(全备后的所有数据都要有)。
原文链接:https://www.cnblogs.com/yanyanqaq/p/12842081.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- centos7下安装mysql6初始化安装密码 2020-06-05
- Linux系统CentOS6.9 x64 配置jdk和MySQL8.0环境,授予MySQL 2020-05-27
- Linux 下MySQL的安装及基本使用 2020-05-25
- 一次云服务器安装达梦数据库后无法远程访问问题处理 2020-05-24
- Linux安装MySQL 2020-05-12
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash