前言:html
一直使用mysqldump进行数据备份,可是对这个工具一直感受很陌生。今天我就具体的撕一撕关于备份那些事mysql
1、咱们为何要备份? sql
作灾难恢复:好比操做系统故障、电源故障、硬件有问题、一个不经意的bug致使数据损坏等意想不到的灾难数据库
需求改变:删除数据后想恢复或者要把数据还原到之前服务器
测试须要 :测试须要,可能会按期将线上环境同步到测试环境微信
备份的目的就是为了恢复。同时没有备份的后果也是很严重的:数据会丢失、业务停掉、用户丢失、甚至项目不存在、you get out编辑器
2、备份须要考虑的因素有哪些ide
在线备份仍是离线备份函数
在线备份要考虑:锁的时间、备份时间、备份时业务和负载工具
是逻辑备份仍是物理备份
逻辑备份要考虑:备份时系统开销。备份先后数据一致性(浮点数有可能恢复后数据不同)。逻辑备份须要加载和解释语句,转化为存储过程,建索引,因此会很慢。
物理备份要考虑:innodb的原始文件一般比逻辑备份要大的多。物理备份不老是能够跨平台、操做系统、版本。大小写敏感、浮点格式可能会遇到麻烦
备份什么
非显著数据:二进制日志和innodb事务日志
代码:如触发器和存储过程
服务器配置:最好备份中带有服务器配置或者有单独的服务器配置信息
3、备份的类型有那几种?
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操做,
4、经常使用的备份工具备哪些?备份的对象是什么
官方的工具:mysqldump、mysqlpump
Percona工具:xtrabackup、mydumper(mysql5.7才有的)
商业备份工具:Innobase:提供了商业备份工具为Innobackup,能够实现InnoDB的热备支持增量备份;可是对于MyISAM不支持增量备份,只能实现彻底备份,属于物理备份,速度比较快。
备份的对象主要有:数据、配置文件、代码:存储过程,存储函数,触发器、os相关的配置文件、复制相关的配置、二进制日志
5、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权限
6、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。喜欢技术的一块儿来交流吧