【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
前言:
一直使用mysqldump进行数据备份,但是对这个工具一直感觉很陌生。今天我就具体的撕一撕关于备份那些事
一、我们为什么要备份?
做灾难恢复:比如操作系统故障、电源故障、硬件有问题、一个不经意的bug导致数据损坏等意想不到的灾难
需求改变:删除数据后想恢复或者要把数据还原到以前
测试需要 :测试需要,可能会定期将线上环境同步到测试环境
备份的目的就是为了恢复。同时没有备份的后果也是很严重的:数据会丢失、业务停掉、用户丢失、甚至项目不存在、you get out
二、备份需要考虑的因素有哪些
在线备份还是离线备份
在线备份要考虑:锁的时间、备份时间、备份时业务和负载
是逻辑备份还是物理备份
逻辑备份要考虑:备份时系统开销。备份前后数据一致性(浮点数有可能恢复后数据不一样)。逻辑备份需要加载和解释语句,转化为存储过程,建索引,所以会很慢。
物理备份要考虑:innodb的原始文件通常比逻辑备份要大的多。物理备份不总是可以跨平台、操作系统、版本。大小写敏感、浮点格式可能会遇到麻烦
备份什么
非显著数据:二进制日志和innodb事务日志
代码:如触发器和存储过程
服务器配置:最好备份中带有服务器配置或者有单独的服务器配置信息
三、备份的类型有那几种?
1、根据在线还是离线
冷备(cold backup):需要关mysql服务,读写请求均不允许状态下进行;
温备(warm backup): 服务在线,但仅支持读请求,不允许写请求;
热备(hot backup):备份的同时,业务不受影响。
PS:
这种类型的备份取决于业务需求,而不是备份工具
MyISAM不支持热备,innoDB支持热备,但是需要特殊的工具
2、根据备份的范围
完全备份:full backup,备份全部字符集。
增量备份: incremental backup 上次完全备份或增量备份以来改变了的数据,不能单独使用,要借助完全备份,备份的频率取决于数据的更新频率。
差异备份:differential backup 上次完全备份以来改变了的数据。
建议的恢复策略:
完全+增量+二进制日志
完全+差异+二进制日志
3、根据备份数据或文件
物理备份:直接备份数据文件
优点:
备份和恢复操作都比较简单,能够跨mysql的版本、平台和操作系统
恢复速度快,不需要执行任何SQL和构建索引
缺点:
innodb的原始文件通常比逻辑备份要大的多。物理备份不总是可以跨平台、操作系统、版本。大小写敏感、浮点格式可能会遇到麻烦
mysql>check tables;检测表是否可用
逻辑备份: 备份表中的数据和代码
优点:
l 查看和恢复都很简单,可以使用编辑器或者sed、grep等命令操作
l 可以远程备份和恢复,可以在云平台上恢复
l 备份非常灵活,可选参数很多,比如用where限制备份
l 与存储引擎无关,可以在innoDB引擎备份,在MyISAM引擎恢复,工作量少
l 有助于避免数据损坏,当磁盘驱动器有故障需要恢复时,逻辑备份就很最重要了
缺点:
l 备份或恢复都需要mysql服务器进程参与,消耗系统资源,可能会出现挤压内存和性能抖动等
l 逻辑备份在某些场景下比数据库文件本身大(例,一个整型需要4字节存储,但是用ASCII写入时,可能需要12个字符)
l 逻辑备份需要加载和解释语句,转化为存储过程,建索引,所以会很慢。
l 备份的时候不能有DDL操作,
四、常用的备份工具有哪些?备份的对象是什么
官方的工具:mysqldump、mysqlpump
Percona工具:xtrabackup、mydumper(mysql5.7才有的)
商业备份工具:Innobase:提供了商业备份工具为Innobackup,可以实现InnoDB的热备支持增量备份;但是对于MyISAM不支持增量备份,只能实现完全备份,属于物理备份,速度比较快。
备份的对象主要有:数据、配置文件、代码:存储过程,存储函数,触发器、os相关的配置文件、复制相关的配置、二进制日志
五、MySQL备份之into outfile和load data
主要用于单表或者单列,部分字段导出导入
##注意存放目录一定要有mysql启动的权限(也可以单列导出、导入)
mysql> select * from test01 into outfile '/data/mysql/mysql3306/test01.sql';
Query OK, 3 rows affected (0.06 sec)
##恢复
mysql> load data infile '/data/mysql/mysql3306/test01.sql' into table test01;
Query OK, 3 rows affected (0.08 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
##导出cvs格式文件
mysql> select * from test01 into outfile '/data/mysql/mysql3306/test01.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
Query OK, 3 rows affected (0.00 sec)
案例:有时候有excel打开的时候会出现乱码,
解决导出csv中文乱码问题:
将csv用txt打开,另存为,选择utf8编码即可。
解决导入问题:
mysql安装目录下的my.ini,增加如下参数:
[client]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
重启mysql服务。
##导入cvs格式文件
mysql> LOAD DATA INFILE '/data/mysql/mysql3306/456.cvs.csv' INTO TABLE test01 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
[root@mysql-01 ~]# iconv -f GBK -t utf-8 abc.txt -o def.txt 格式转换
注释:
FIELDS TERMINATED BY ',' 字段间分割符
OPTIONALLY ENCLOSED BY '"' 将字段包围 对数值型无效
LINES TERMINATED BY '\n' 换行符
以上备份需要file权限
六、MySQL备份之mysqldump
1、创建备份需要的账号
create user 'bkuser'@'localhost' identified by 'bkzhishuedu';
root@localhost [(none)]>grant reload, lock tables, process, replication client on *.* to 'bktom'@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
flush privileges;
2、数据表都是innodb的表全备
从库执行:
[root@mysql-02 ~]# mysqldump -uroot -p123456 --single-transaction --dump-slave=2 --events --routines --triggers --hex-blob --quick --databases pbs > dump.sql
GTID:
[root@mysql-02 ~]# mysqldump -uroot -p123456 --single-transaction --dump-slave=2 --events --routines --triggers --hex-blob --set-gtid-purged=OFF --databases pbs > dump.sql
主库执行:
[root@mysql-01 ~]# mysqldump -uroot -p123456 --single-transaction --master-data=2 --events --routines --triggers --hex-blob --quick --databases pbs > dump.sql
GTID:
[root@mysql-01 ~]# mysqldump -uroot -p123456 --single-transaction --master-data=2 --events --routines --triggers --hex-blob --set-gtid-purged=OFF --databases pbs > dump.sql
TIPS:
数据表有MyIsam表,先lock tables,然后再flush tables,确保数据索引都刷新到磁盘,然后再备份呢
3、用mysqlbinlog做增备
这个很简单就是把binlog文件拷贝一份,到时候可以按需要恢复。
参考文档:
http://www.cnblogs.com/wenanry/archive/2010/05/18/1737939.html
http://www.jb51.net/article/41570.htm
https://my.oschina.net/jettyWang/blog/719731
https://my.oschina.net/abcijkxyz/blog/721858
为了方便大家交流,本人开通了微信公众号,和QQ群291519319。喜欢技术的一起来交流吧
来源:oschina
链接:https://my.oschina.net/u/3023401/blog/806696