MySQL备份工具之mysqldump

前言: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。喜欢技术的一块儿来交流吧

相关文章
相关标签/搜索