设为首页 加入收藏

TOP

mysql数据备份三部曲(一)
2018-12-24 14:07:45 】 浏览:329
Tags:mysql 数据备份三部曲

1,前言

数据备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。传统的数据备份主要是采用内置或外置的磁带机进行冷备份。但是这种方式只能防止操作失误等人为故障,而且其恢复时间也很长。随着技术的不断发展,数据的海量增加,不少的企业开始采用网络备份。网络备份一般通过专业的数据存储管理软件结合相应的硬件和存储设备来实现。

2,数据备份分类

1)物理备份

物理备份简称冷备:就是直接拷贝,打包如:cp,tar

特点:

备份时数据库的版本要一致

操作系统要一样,不可跨平台

不适合innodb存储引擎的数据库备份

备份时间长,冗余备份,浪费存储空间

....

2)逻辑备份

逻辑备份就是对数据库对象(如用户、表、存储过程等)利用EXPORT,mysqldump等工具进行导出工作,可以利用IMPORT,mysql等工具把逻辑备份文件导入到数据库.

3,数据备份策略

完全备份:

备份所有数据.

增量备份:

备份上次备份后,备份所有新产生的数据.

差异备份:

备份完全备份后,备份所有新产生的数据.

4,部曲一-->mysqldump备份与恢复

用mysqldump备份,mysql来恢复数据

命令:

mysqldump -u 用户名 -p'密码' 库名 > /路径/xxx.sql #备份数据

mysql -u 用户名 -p'密码' 库名 < 路径/xxx.sql #恢复数据

备份数据库名表示方式:

--all-databases | -A 所有数据库

数据库名        单个数据库

数据库名 表名 单张表

-B 数据库1 数据库2 ....  多个数据

单个数据库

[root@mysql-50 ~]# mysqldump -uroot -p123456 db2 >/data/db2.sql

mysql>drop database db2;

mysql>create database db2;

[root@mysql-50 ~]# mysql -uroot -p123456 db2 < /data/db2.sql

提示:恢复单个整个数据库要先新建数据库,需要先建数据库

多个数据库

[root@mysql-50 ~]# mysqldump -uroot -p123456 -B db3 db4 >/data/db3-db4.sql

mysql>drop database db3;

mysql>drop database db4;

[root@mysql-50 ~]# mysql -uroot -p123456 < /data/db3-db4.sql

恢复全部数据库

[root@mysql-50 ~]# mysqldump -uroot -p123456 -A > /data/alldb.sql

[root@mysql-50 ~]# mysql -uroot -p123456 < /data/alldb.sql

缺点:

锁表

不能实现实时备份

效率较低,备份和还原速度慢

备份过程中,数据插入和更新操作会被挂起(锁表)

4,部曲二-->mysqlbinlog工具

--binlog日志

采用binlog日志的好处:

记录除查询之外的所有sql命令

可用于数据恢复

配置mysql主从同步的必要条件

可以达到实时增量备份

1)启用日志文件

[root@mysql-50 ~]# mkdir /mysqllog

[root@mysql-50 ~]# chown -R mysql:mysql /mysqllog

[root@mysql-50 ~]# vim /etc/my.cnf

[mysqld]

#log_bin  #开启日志,使用默认,默认位置mysql的初始化目录,名称为主机名称

#log_bin=jluo        #开启日志,并指定日志名称

log_bin=/mysqllog/mysql   #开启日志,并指定日志位置和名称

server_id=50 #mysql5.7必须写,且id号不能重复

#Max_binlog_size=数字m #修改日志大小,(默认1G),满后自动新建另一个

binlog_format="mixed"

#statement:每一条修改数据的sql命令都记录在binlog日志中

#row:不记录sql语句上下文相关信息,仅保存哪条记录被修改

#mixed:是以上两种格式的混合使用

[root@mysql-50 ~]# systemctl restart mysqld

[root@mysql-50 ~]# ls /mysqllog/

mysql.000001 mysql.index   #第一个文件是日志文件,第二个是日志索引文件

2)手动生成新的日志文件

重启mysql服务

执行sql操作 mysql>flush logs;

Mysqldump --flush-logs

Mysql -uroot -p密码 -e ‘flush logs’ #-e 后面不能跟太复杂的命令

例子:

mysqldump --flush-logs -uroot -p123456 db4 > /data/db4.sql

3)清理Binlog日志

mysql> show master status;   #查看当前使用的日志文件

删除早于指定版本的binlog日志

Purge master logs to “binlog文件名”;

删除所有binlog日志,重建新日志

Reset master;

提示:

不介意使用系统命令删除,使用mysql命令删除

例子:

mysql> purge master logs to "mysql.000004"; #删除指定文件之前的,不包括此文件

mysql> reset master;  #重建新日志

4)mysqlbinlog工具

格式:

Mysqlbinlog  [选项]  binlog日志文件名

常用选项

--start-datetime=”yyyy-mm-dd hh:mm:ss”  #开始于时间点

--stop-datetime=”yyyy-mm-dd hh:mm:ss”  #结束于时间点

--start-position=数字         #开始位置(偏移量)

--stop-position=数字         #结束偏移量

例子:

mysql> create table t1 (id int);

mysql> insert into t2 values (1);

mysql> insert into t2 values (2);

mysql> insert into t2 values (3);

[root@mysql-50 mysqllog]# mysqlbinlog mysql.000001 | grep create

#181121 11:31:34 server id 50 end_log_pos 123 CRC32 0x9834a147 Start: binlog v 4, server v 5.7.17-log created 181121 11:31:34 at startup

create table t1 (id int)

[root@mysql-50 mysqllog]# mysqlbinlog mysql.000001 | grep insert

insert into t1 values(1)

insert into t1 values(2)

insert in

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇goldengate合并应用进程 下一篇mysql通过命令行创建表

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目