引言
内容为慕课网的《高并发 高性能 高可用 MySQL 实战》视频的学习笔记内容和集体整顿扩大之后的笔记,本篇内容偏重Mysql备份的基本原理和罕用介绍为主,大部分为实践相干的内容。
数据备份在平时的工作和学习中可能应用的比拟少,然而对于一个线上我的项目来说却是不可或缺的一环,对于开发人员来说相熟和理解备份的相干常识是很有必要的,学习备份的相干内容能够帮忙咱们理解运维工作中一些根本的备份操作。
本节内容偏差实践为主,重点在于理解Mysqldump如何实现增量备份和全量备份,为前面的文章介绍Mysql主备同步打下基础。
知识点:
- Outfile 原生mysql工具介绍
- MysqlDump对于Outfile工具改良,MysqlDump特点介绍
- MysqlDump实现增量备份和全量备份的细节
- Xtrabackup备份工具的介绍以及实现增量备份和全量备份的细节
备份介绍
为什么须要备份?
- 古代的少数服务少数零碎高可用,数据无价,失落会带来难以承当的损失。
- 一套残缺的备份机制能够使得零碎遇到不可抗力的状况时将数据的修复代价降到最低甚至零损失。
- 对于任何我的项目都应该具备定期备份数据的好习惯,无论是否为生产我的项目。
备份模式
- 物理备份:比方咱们应用硬盘拷贝本人的重要数据,灵活性个别,安全性较高。
- 云服务器备份:将数据传到第三方的云数据库进行保存,保护老本个别,安全性取决于第三方保护商的品质。
- 自建服务器备份:开销比拟大,然而数据安全性和稳定性都是最高的,也能够离线进行物理备份,可操作性强。
备份时候数据状态三种:
- 热备:失常运行备份。此时数据库可读可写。
- 冷备:停机备份。数据库无奈进行任何操作。
- 温备:数据库只读。数据库可用性弱于热备,备份期间,数据库只能进行读操作,不能进行写操作
备份文件格局
备份文件的格局意味着导出的时候是什么样的:
- 逻辑备份:输入或者SQL语句,能够供技术人员浏览。
- 物理备份(裸文件):备份数据库底层文件然而不可浏览
备份内容
- 齐全备份:备份残缺数据
- 增量备份:备份全量备份之后的数据差别
- 日志备份:也就是Binlog 备份
常用工具
罕用的备份工具有上面两种
- Mysqldump:逻辑备份,热备份,全量
- xtrabackup:物理,热,全量 + 增量备份
小结
- 备份的根本模式:从备份的模式来看,能够应用物理磁盘备份,也能够依赖于三方服务商的服务器或者自建的服务器进行备份,而从备份数据状态来看,能够存在热备,冷备和温备,这里须要小心温备这个概念。
- 备份工具比拟罕用的有两种:Mysqldump和xtrabackup,这两种工具都须要重点把握根底的操作应用,实际多余实践,多应用就会了。
- 开发的时候应用逻辑备份比拟多,然而对于运维人员来说可能应用物理备份的形式更快,逻辑备份经常用于线上出问题的场景。
Outfile命令备份(理解)
怎么来?
对于这个命令咱们只须要理解,在日常应用中并不波及应用场景,此命令为mysql自带的命令同时也是mysql 的预留关键字,能够说是最原始的逻辑备份形式,能够作为理解MysqlDump的前置根底。
应用前提
- 要晓得网站的绝对路径,能够通过报错信息、phpinfo界面、404界面等一些形式晓得。
- 要有file的读写权限,倡议给相干文件夹执行
chmod -R /xxx/xxx
。 - 写的文件名肯定是在文件治理中中不存在的,不然也会不胜利!
特点
- 简略的导出SQL后果次要用于长期须要数据验证的场景。
- Mysql原生命令反对的导出形式,执行效率高。
- 命令简略操作不便,能够导出一致性视图。
缺点
- 导出的格局较为简陋,通常须要对于数据进行二次解决能力失常应用。
- 只能导出SQL执行后果,没有方法将导出后的数据用于还原。
通过下面的介绍能够看出Outfile这个命令只能用于日常开发的场景下须要测试数据长期导出,不能作为热备的次要工具,然而这个命令对于Mysqldump来说是启发性的。
如何应用?
前提条件:在具体的导出之前咱们须要理解Mysql导出的具体门路,应用上面的语句检查一下以后的平安文件导出前缀,留神后果如果为NULL在Mysql5.6版本没有影响然而Mysql5.7版本是存在影响的。
另外集体应用的Mac零碎的文件系统治理尽管和Linux大体一致,然而其实有很多权限等等细节问题也是踩了一波小坑。
show variables like '%secure%'-- secure_file_priv NULL
为什么说应用
secure_file_priv
为NULL是存在影响的?解答:
Mysql5.7的版本中,在Mysql启动的时候,如果应用了这个参数的配置则会 限度你能够应用LOAD DATA INFILE加载文件的范畴,意味着如果想要导出必须是在这个配置指定的目录上面能力胜利,上面是此配置对应的变动:
1. secure\_file\_priv 为 NULL 时,示意限度mysqld不容许导入或导出。
2. secure\_file\_priv 为 /tmp 时,示意限度mysqld只能在/tmp目录中执行导入导出,其余目录不能执行。
3. secure\_file\_priv 没有值时,示意不限度mysqld在任意目录的导入导出。
实现下面这些筹备工作之后,咱们须要搭建根本的操作环境,比方新建数据库或者表,这里仍然应用了sakila数据库,咱们能够应用上面的命令进行尝试导出,比方上面的语句中咱们将payment表的所有数据导出。
select * from payment into Outfile '/Users/xxx/xxx/a.csv'
注:Sakila数据库在Mysql官网的example中能够间接下载。
然而理论执行过程中会呈现如下的报错,从报错信息能够看到这里是因为secure_file_priv
为NULL
的问题:
1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, Time: 0.004000s
再次强调集体学习的时候应用的是macos零碎,设置起来比拟麻烦这里也不啰嗦具体细节了,次要讲一下解决思路:
- 设置自定义的配置
my.ini
文件并且放到/etc
的目录上面(Mysql读取配置文件规定最高优先级),在文件结尾设置此参数:secure_file_priv=/Users/xxxx/xxx/
而后:x
保留(留神用sudo vim my.ini
),导出门路倡议选的以后/User/xxx
家目录,不便导出之后立马关上。(根门路门路不太平安,macos零碎也不容许你这么弄) - 重启Mysql或者重启电脑,连贯Mysql之后继续执行上述命令后发现报错:
PermissionError: [Errno 13] Permission denied
,显著是macOs的权限问题,通过命令chmod 777 导出文件夹/*
能够给整个文件夹凋谢权限(根目录不要这样做)。 - 如果呈现重名文件应用命令一样报错,提醒导出文件曾经存在,切记每次执行前查看是否重名文件。
Macos应用
brew
装置Mysql会发现没有my.ini
文件,集体从网上翻了份能用的间接在上面链接提供的文件尾部增加secure_file_priv=/Users/xxxx/xxx/
即可 ,省去大伙的工夫,当然是针对我这种蛋疼的MacOs零碎来说的,其余操作系统应该能够间接找到相干配置文件。链接: https://pan.baidu.com/s/1bM3cQtaXMl3ZGNgQRzhEMA 提取码: phkg
插曲:Maxos应用homebrew装置版本的启动和敞开:
敞开:
sudo pkill -9 mysql
启动:
cd /usr/local/mysql/support-file/mysql.server start(stop敞开)
下面啰嗦一大堆之后,上面是最终导出的后果,能够看到默认只应用了空格分隔,并且格局比拟乱:
Outfile应用也是比拟好记的,同时上面是Outfile的一些应用参数,通过这些参数能够自在配置:
SELECT ... INTO Outfile 'file_name' [CHARACTER SET charset_name] [export_options] export_options: [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]
咱们发现下面的格局比拟凌乱,咱们 心愿依照标准表格的模式导出,于是咱们能够在每一行的数据之间增加都好,让导出之后的数据放弃标准。
select * from payment into Outfile '/Users/xxx/xxx/a.csv' FIELDS terminated by ','
从后果能够看出Outfile只能用作一些简略的场景的导出操作:
到此为止咱们只须要简略理解这个命令即可,为上面理解Mysqldump
打下原理根底。
Mysqldump命令应用
Mysqldump
的命令能够看作是Outfile命令的扩大,作为非常重要的备份工具常常用于开发和测试的场景,当然线上不举荐应用这种命令操作,个别须要由运维人员操作来导出须要的数据,如果间接对着整个库热备份很容易出问题。
「知识点」
- Outfile的痛点,或者说Mysqldump改良点
- Mysqldump特点
- Mysqldump的操作(实战案例)
Mysqldump的增量备份如何实现(原理)
- Binlog 忠诚记录mysql变动
- Mysqldump通常只能全量备份,所以借助Binlog作为增量备份。
- 要害:Mysqldump备份,切换新的Binlog文件,之后拷贝binlog文件作为增量备份,留神全量备份和增量备份文件的不同。
- 采纳从零开始还原,采纳全量还原 + Binlog还原。
Mysqldump通常只能全量备份,应用Binlog增量备份
- 要害:Mysqldump备份,切换新的Binlog文件。
- 采纳从零开始还原:全量还原 + Binlog还原
Outfile的痛点
只有简略操作一下Outfile命令就会发现Outfile有上面这几个显著的毛病,Mysqldump其实就是解决了Outfile的很多事实问题,并且在此基础上改良让它更加简略好用。
- 只能导出数据,很难把数据再次导入
- 无奈做逻辑备份,也就是备份SQL逻辑
- 导出模式繁多,通常只能导出excel。
Mysqldump特点
- Mysql官网内置命令,内置实现能够避开很多没有必要的问题。
- 反对近程备份,能够生成多种格局的文件。
- 与存储引擎无关,能够在多种存储引擎下进行备份复原,对innodb引擎反对热备,对MyISAM引擎反对温备(施加表锁)。
- 收费。
如何学习Mysqldump?
官网开发的当然是官网文档学习最好啦,链接提供的是Mysql8.0的版本,其余版本须要依据本人以后应用的版本切换浏览,另外命令参数不须要去记忆也没有意义,在须要的时候翻出来看看而后看看官网文档即可:
任何工具类的货色适宜应用的时候查阅,死记硬背是没有意义的,最初会发现只须要记住罕用的形式即可。
https://dev.mysql.com/doc/ref...
备份所需权限
- 如果须要备份数据至多须要
SELECT
权限。 - 备份视图须要
SHOW VIEW
权限。 - 备份触发器须要
TRIGGER
权限。 - 如果不应用参数--single-transaction,则须要相干权限进行锁表。
- (从MySQL 8.0.21开始)如果不应用
--no-tablespaces
选项则须要PROCESS
权限。 - 如果须要导入备份数据,则须要蕴含执行语句的所有权限,比方
CREATE、ALTER、DELETE
权限
实际:MysqlDump备份案例
咱们能够尝试备份一下官网提供的example比方sakila,上面是一些简略的操作命令:
备份一个数据库
-- 第一种备份办法./Mysqldump -uroot -pxxxxxx sakila > /Users/xxx/xxx/xxx/xxxx/backup-file.sql-- Mysqldump: [Warning] Using a password on the command line interface can be insecure.
备份多个数据库到一个sql文件
./Mysqldump --databases sakila sakila-db -uroot -xxx > /Users/xxx/xx/xxxx/xxx/backup-file_bk2.sql
将数据从一个服务器备份到另一个服务器
-- 集体是本地单机没有进行虚拟机模仿,试验后果未知Mysqldump --opt db_name | mysql --host=remote_host -C db_name
如果应用InnoDB 的存储引擎Mysql有一种在线备份的办法:
-- 参数解释-- --all-databases 所有数据库-- --single-transaction RR级别的备份,也就是确保一致性的视图(Innodb存储引擎)-- --master-data 将二进制日志文件的名称和地位写到输入端(注意一下,为下文的增量备份铺垫)-- 如果不是InnoDB,须要应用上面的参数:-- 1. --lock-all-tables 应用FTWRL锁锁住所有表(MyISAM)-- 2. --lock-tables 应用READ LOCAL锁住以后库的表(MyISAM)Mysqldump -uroot -pxx --all-databases --master-data --single-transaction > /Users/xxx/xxx/all_databases.sql
还原数据库
-- ./Mysqldump -uroot -pxxxxxx sakila < /Users/xxx/xxx/xxx/xxxx/backup-file.sql-- 第二种还原备份办法-- 1. 应用具备相干权限的用户名和明码登陆连贯到mysql服务器 mysql -uroot -proot -- 2. source /xxx门路/xx.sql文件 source xxx.sql-- 第三种形式mysql -e "source /path-to-backup/backup-file.sql" db_name
对于其余的命令这里就不再扩大了,这里介绍一些罕用的根本够日常开发应用了,如果须要更多的写法能够参考下面的官网文档。
Mysqldump的增量备份实现原理
下面提到的都是全量备份的形式,尽管咱们在拷贝的时候能够通过--single-transaction拷贝一致性的视图,尽管拷贝那一刻的数据记录是全量并且残缺的,然而此时数据库仍然是存在还在执行的增量数据的,那么这部分数据应该如何备份呢?
应用Mysqldump的进行增量备份首先须要理解增量备份的细节,所以这里就轮到Binlog日志上场了,Binlog的备份蕴含上面几个小点:
- Binlog 忠诚记录mysql变动,全量增量备份和还原过程。
- Mysqldump通常只能全量备份,所以借助Binlog作为增量备份。
- 要害:Mysqldump备份,切换新的Binlog文件,之后拷贝binlog文件作为增量备份,留神全量备份和增量备份文件的不同。
- 采纳从零开始还原,采纳全量还原 + Binlog还原。
为什么不能同时增量和全量备份:
咱们能够把 Mysql记录日志的过程看作是在纸上写字,此时Mysql在最新的Binlog日志中记录内容,如果咱们把正在写的内容和之前的日志内容一并备份,就很可能导致备份出写了一半的数据,就如同咱们写字的时候忽然被抽中本子一样,这样就很有可能导致数据损坏。
Binlog 忠诚记录mysql变动,全量增量备份和还原过程。
实现增量备份的关键点在于如何给Binlog日志做切入点,做Mysqldump增量备份存在的最大问题是咱们无奈晓得以后的全量备份和增量数据的分界点。Binlog日志记录的是Mysql的变动内容比方CRUD的数据记录变动记录以及数据的构造的调整等等,并且和InnoDB的存储引擎的redo log
双写放弃事务一致性。
依据下面的内容介绍咱们晓得了Mysqldump只能全量备份,须要借助Binlog日志实现增量备份。
增量备份实现思路是在备份的时候将以后正在读写的Binlog日志停掉,并且将此文件进行拷贝,然而须要留神的是此时拷贝的是Binlog文件,和日常编写的逻辑SQL是不一样的,切记。
关键点:Mysqldump备份,Mysql服务器进行以后Binlog写入并且切换新的Binlog文件
Mysqldump提供了相似下面提到的操作,上面是Mysqldump全量备份+增量备份的操作流程:
-- --all-databases 所有数据库-- --single-transaction RR级别的备份,也就是确保一致性的视图(Innodb存储引擎)-- --master-data=[=Value](8.0.26改为--source-data命令) 将二进制日志文件的名称和地位写到输入端(注意一下,为下文的增量备份铺垫)-- --flush-logs 在备份之前刷新服务器的日志 Mysqldump -uroot -pxx --all-databases --master-data=2 --flush-logs --single-transaction > /Users/xxx/xxx/all_databases.sql
通过执行下面的命令之后首先会进行全量备份同时会把Binlog切换到下一份日志文件从新开始进行读写,此时就能够把这一份进行写入对binlog日志文件备份进去进行后续的增量备份还原,简而言之:Mysql备份的同时切换Binlog,并且把以后写了一部分的Binlog日志进行拷贝。
Mysql其实还有一种备份形式那就是Binlog手动增量备份,实现形式是间接应用命令把缓存的日志刷到磁盘中并且切换到下一个Binlog,它的命令格局如下:
mysqladmin -uroot -p123456 flush-logs
须要留神的是这里应用的是mysqladmin
工具,在执行命令之后咱们能够手动将所有的Binlog进行备份。
还原形式:全量还原 + Binlog还原,还原操作和增量全量备份形式对应,因为是Mysqldump全量+Binlog增量备份,所以同样须要先进行全量还原再增量还原。
复原全量备份:还原的操作最简略的形式是连贯服务器之后执行source xxx.sql
,而Binlog增量还原操作案例如下:
mysqlBinlog Mysql-bin.00002 ... | mysql -uroot -p123456
小结
Mysqldump
+Binlog
能够无效进行全量 + 增量备份。- Mysqldump实际上是对于Outfile工具的扩大和降级。
- Binlog备份,Binlog还原,Mysqldump备份能够看出不同组件的搭配。
- 从实践上来说Binlog能够还原到任意的时刻。
- Mysqldump 的参数较多,相熟和把握须要多加练习。
- 须要留神辨别mysqladmin、mysqlBinlog、mysqldump
XtraBackup物理备份
XtrqBackup尽管不是官网开发的工具,然而应用的频率却远高于mysqldump,物理备份绝对比mysql的逻辑备份来说更加牢靠,同时对于零碎的影响也要更小。
为什么须要物理备份通常具备上面的理由:
- 逻辑备份针对大数据量备份速度非常迟缓。
- 导出速度快不须要二次转化。
- 对于数据库的压力较小。
- 增量备份更加容易。
间接拷贝裸文件可行么?
咱们间接CV数据库的文件能够么?实践上是可行的然而实际操作会发现有很多问题,以Innodb的存储引擎的数据为例,它不仅波及Binlog文件,idb文件(数据库原始数据)以及frm文件,还包含独有的redo log和 undo log这些文件等,此时会发现如果要拷贝这些文件只能冷备,然而仅仅冷备还是不行的,因为这里还牵扯操作系统和数据库版本兼容等等问题,有非常显著的跨平台的问题。
从论断来看,间接拷贝裸文件实践上是可行的,然而实际上备份进去的数据可能齐全不可用,甚至可能无奈兼容。
如何实现物理+全量+热备?
实现思路如下:外围的思维是监听redo log
文件变动的同时,备份Idb
文件和备份过程中进行了改变的redo log
文件。
- 启动监听线程,收集redo log
- 备份idb文件,记录监听过程中新产生的redo log日志
- 备份idb实现,进行收集redo log日志
- 减少FTWRL锁拷贝元数据frm
FTWRL锁是啥?
FLUSH TABLES WITH READ LOCK
简称(FTWRL),该命令次要用于备份工具获取一致性备份(数据与Binlog位点匹配)。须要留神的是这个锁的粒度十分大,根本是锁住整个库的等级,如果是备份主库会导致整个主库“卡”住,从库则会导致线程期待。所需权限:
FLUSH_TABLES
和RELOAD
权限。因为这里讲的次要是备份的内容,想进一步理解FTWRL锁实现细节和应用教程能够参考上面的博客:
- FLUSH TABLE WITH READ LOCK详解 - 天士梦 - 博客园 (cnblogs.com)")
- MySQL 全局锁和表锁 - keme - 博客园 (cnblogs.com)")
留神在第四步给整个库加全局锁会有一段时间数据库是处于温备的状况的(不能进行读写)。
这里还存在一个问题,如何晓得哪些数据是增量数据?Xtrabackup的思路是在Mysql中每一个数据页存在一个LSN号码,在备份的时候能够通过这个LSN号确定哪个页存在变动,当进行过一次全量备份之后记录变动过数据的LSN号,在下一次备份能够间接找比上一次LSN号更大的值进行备份。
LSN(log sequence number):日志序列号,是一个始终递增的整形数字,在MySQL5.6.3版本后占8个字节。它示意事务写入到日志的字节总量。LSN次要用于产生crash时对数据进行recovery!每个数据页、重做日志、checkpoint都有LSN。
Xtrabackup介绍
在介绍Xtrabackup之前须要理解Mysql的ibbackup
,它是由Innodb官网开发,后续被改名为Mysql Enterprise Backup
,因为这个软件为免费软件用户并不多,所以后续呈现了齐全替代品Xtrabackup
并且被宽泛应用。
Xtrabackup是由percona开源的收费数据库备份软件,不同于Mysqldump这是一个第三方公司开发的软件,在后面提到的Mysqldump命令是逻辑备份,逻辑备份最大的问题是在数据量特大的状况下导出会非常迟缓并且非常影响数据库的读写性能,并且导出的时候须要对于数据库进行“RR级别”的锁定或者应用表锁(MyISAM),所以对于大数据量还是倡议应用物理备份的形式备份。
Xtrabackup装置实现后有4个可执行文件,其中2个比拟重要的备份工具是innobackupex、xtrabackup。上面是xtrabackup其余工具的大抵介绍:
1)xtrabackup 是专门用来备份InnoDB表的,和mysql server没有交互;
2)innobackupex 是一个封装xtrabackup的Perl脚本,反对同时备份innodb和myisam,但在对myisam备份时须要加一个全局的读锁。
3)xbcrypt 加密解密备份工具
4)xbstream 流传打包传输工具,相似tar
XtraBackup特点
- 备份速度快,简直不影响服务器的失常业务解决
- 压缩存储,节俭磁盘容量,同时能够存储到另一个服务器
- 还原速度很快,对于服务器的负载较小。
XtraBackup装置过程
Xtrabackup是没有windows和mac版本的,只有linux版本,所以须要做试验也只能应用linux零碎,所以这里简略记录一下如何装置:
下载地址:Percona Software downloads for databases
留神外面蕴含很多软件,这里找到如上截图所示的界面,依据本人的Mysql 版本下载:
- 8.0:对应Mysql8.0以上版本。
- 2.4:对应Mysql5.0 - Mysql5.7版本。
上面是xtrabackup的大抵安装操作流程:
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/6/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar[root@centos ~]# lltotal 703528-rw-r--r-- 1 root root 654007697 Sep 27 09:18 mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz-rw-r--r-- 1 root root 65689600 Nov 30 00:11 Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar[root@centos ~]# tar xf Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar[root@centos ~]# yum install percona-xtrabackup-24-2.4.9-1.el6.x86\_64.rpm -y[root@centos ~]# which xtrabackup /usr/bin/xtrabackup[root@centos ~]# innobackupex -vinnobackupex version 2.4.9 Linux (x86\_64) (revision id: a467167cdd4)#曾经装置实现
XtraBackup全量备份与复原
Xtrabackup装置实现之后,咱们能够应用上面的命令进行备份操作:
[root@centos ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456" --backup /root
执行实现之后,会在对应的目录外面新增一个日期文件目录,接着咱们须要同步log日志:
#应用此参数应用相干数据性文件放弃一致性状态[root@centos ~]#innobackupex --apply-log /root/(日期)/
最初咱们通过上面的命令对于备份文件进行复原:
[root@centos ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /root/(日期)/
Xtrabackup增量备份与复原
须要留神的是增量备份仅能利用于InooDB或XtraDB表,上面的命令用于创立增量备份的数据。
[root@Vcentos ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental /backup/ --incremental-basedir=/root/(日期)#--incremental /backup/ 指定增量备份文件备份的目录#--incremental-basedir 指定上一次全备或增量备份的目录
增量备份的复原命令:
[root@centos ~]# innobackupex --apply-log --redo-only /root/(日期)/[root@centos ~]# innobackupex --apply-log --redo-only /root/(日期)/ --incremental-dir=/backup/(日期)/
如果须要复原全副的数据,能够应用上面的命令解决:
[root@centos ~]#innobackupex --defaults-file=/etc/my.cnf --copy-back /root/(日期)/
增量备份合并至全量备份,能够应用上面的命令:
innobackupex --apply-log bakdir/xxx-xx-xx/ --incremental-dir=basedir/YYYY-YY-YY/
小结
- 物理备份是一种高效备份形式。
- XtraBackup 采纳备份idb + 备份期间监听改变redo log的形式实现全量热备+增量备份。
- XtraBackup 是罕用的Mysql物理备份工具。
- 物理备份最大毛病是备份之后的文件无奈间接浏览。
Mysql备份产生的翻新
从Mysqldump对于备份的改良过程中咱们能够从上面的形式进行思考:
- 间接复制磁盘:比复制数据文件更为间接,间接复制物理磁盘设施镜像备份。
- 多线程备份:通过多线程的形式放慢备份的速度。
- 备份工具治理:咱们能够发现传统备份都是小黑框,对于备份工具自身进行治理的软件是许须要的。
由此扩大出上面几个比拟非凡的备份形式扩大:
- Mylvmbackup:LVM备份磁盘。备份磁盘是一种物理温备的备份形式,备份磁盘自身是一种很好的思路扩大,然而备份磁盘同样有一个重大的问题,那就是兼容性的问题,所以这个备份工具应用了LVM逻辑卷进行磁盘治理。
- Mydumper:多线程备份。这个工具的应用频率甚至比Mysqldump还要高一些。Mydumper次要有上面的特点
1. 和Mysqldump相似的工具,2. 实现了多线程兵法备份还原,3. 速度更快。
- Zmanda Recovery Manager(ZRM):备份工具治理。提供了可视化的形式治理备份文件,相似于数据库管理工具中的navicat,这个工具的特点是集成Binlog和多种备份工具。
如何养成良好数据管理习惯
最初无论多少的备份软件其实最好的状况是备份的数据咱们永远也用不上,除开备份以外咱们还有其余的形式来避免数据失落,比方遵循上面的标准:
权限隔离
- 业务只有DML权限,删除尽量应用假删除
- 开发人员只领有只读账号,当然很多状况下略微大一些的公司都有明确的权限治理。
- DBA日常只应用只读账户,非凡操作再切换账号
- 永远不要应用root间接连客户端,禁用root连贯mysql
SQL 审计
- DBA环境上线之前审计SQL语句
- 开发批改数据须要DBA执行
- Inception 主动审核工具
伪删表
- 删表之前先改个名字,察看业务影响
删除过程应用脚本给非凡标记表名称删除,而不是手动操作
- 对于本地开发须要备份的表能够应用退出
_bak
进行标记。
- 对于本地开发须要备份的表能够应用退出
齐备过程
- 上线之前必须备份
总结
本节从Outfile这个古老的命令动手,介绍了mysqldump的命令前身以及对于outfile命令的改良优化,讲述如何通过mysqldump实现增量和全量备份,同时介绍了外部的细节。然而逻辑备份通常只实用于数据量不是很大并且零碎运行承受肯定提早响应对状况下能够这么做,一旦数据量过大并且要求疾速响应,如果想要热备不影响零碎,更加举荐Xtrabackup备份,这个工具能够说是运维备份Mysql DB的一大杀器,非常弱小并且非常好用,这里简略介绍了实现的细节,对于XtraBack的细节摸索这里就不做过多演示了,更倡议参考官网材料相熟工具的应用。
写在最初
本篇同样偏重实践为主,下一篇内容围绕整个课程的外围如何搭建“三高”架构进行解说。