逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。

mysqldump

mydumper

使用mysqldump实现逻辑备份

语法:

# mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql

关于数据库名:

-A, --all-databases 所有库

school 数据库名

school stu_info t1 school数据库的表stu_info、t1

-B, --databases bbs test mysql 多个数据库

关于其它参数说明:

--single-transaction     #基于此项可以实现对InnoDB表做热备份

-x, --lock-all-tables         #执行备份时为所有表请求加锁 MyISAM

-l, --lock-tables

-E, --events               #备份事件调度器代码

--opt                     #同时启动各种高级选项

-R, --routines             #备份存储过程和存储函数

-F, --flush-logs              #备份之前刷新日志

--triggers                #备份触发器

--master-data=2        #备库,该选项将会记录binlog的日志位置与文件名并追加到文件中,如果为1将会输出CHANGE MASTER命令,主从下有用

注意:-B 作用:创建数据库和切换到数据库,恢复时不用创建数据库和删表。备份多个库,-B 数据库1 数据库2 .

-d只备份库结构,不包含数据内容

备份:mysqldump -u 用户名 -p 数据库名 表名 > 备份的文件名

备份多个表:mysqldump -u 用户名 -p 数据库名 表名1 表名2 > 备份的文件名

示例:

备份jiaowu数据库,名字为hei.sql

显示数据库

[root@wei ~]# mysql -uroot -proot -e 'show databases;'



备份数据库

[root@wei ~]# mysqldump -uroot -proot jiaowu >hei.sql

==备份==

[root@localhost ~]# mysqldump -uroot -proot --single-transaction --master-data=2 company > /tmp/company_`date +%F-%H-%M`.sql
[root@localhost ~]# mysqldump -uroot -proot --single-transaction --master-data=2 school > /tmp/school_`date +%F-%H-%M`.sql
[root@localhost ~]# mysqldump -uroot -proot --single-transaction --master-data=2 school |gzip > /tmp/school_`date +%F-%H-%M`.gz
[root@localhost ~]# mysqldump -uroot -proot --routines --events --triggers --master-data=2 --flush-logs --all-databases > /backup/all_`date +%F`.sql



==恢复==

[root@localhost ~]# mysql -uroot -p888 -e 'create database school'
[root@localhost ~]# mysql -uroot -p888 school < /tmp/school_2015-09-14-15-40.sql
root@(school)> source /tmp/school_2015-09-14-15-40.sql
[root@localhost tmp]# gunzip -fc school_2015-09-14-15-09.gz | mysql -uroot -p888 school

==增量备份==

增量备份前提:

1)my.cnf,是要开启MySQL log-bin日志功能,重启MySQL      log_bin = /data/mysql/data/mysql-bin

2)存在一个完全备份,生产环境一般凌晨某个时刻进行全备

示例:

mysqldump -uroot -p --default-character-set=gbk --single-transaction -F -B school |gzip > /server/backup/school_$(date +%F).sql.gz

InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性

增量备份--恢复过程

1、检查凌晨备份

2、检查全备后的所有binlog # ls -lrt /usr/local/mysql/data/mysql-bin.*

3、立即刷新并备份出binlog mysqladmin -uroot -p flush-logs

cp /usr/local/mysql/data/mysql-bin.000004 /server/backup/

提示:根据时间点及前一个binlog可以知道发现问题时刻前binlog日志为mysql-bin.000004

4、恢复binlog生成sql语句mysqlbinlog mysql-bin.000004 > bin.log

5、恢复凌晨备份

6、恢复增量备份

mysqlbinlog增量恢复方式

基于时间点恢复

1)指定开始时间到结束时间 myslbinlog mysqlbin.000008 --start-datetime=’2014-10-45 01:10:46’ --stop-datetime=’2014-10-45 03:10:46’-r time.sql

2)指定开始时间到文件结束 myslbinlog mysqlbin.000008 --start-datetime=’2014-10-45 01:10:46’ -d esen -r time.sql

3)从文件开头到指定结束时间 myslbinlog mysqlbin.000008 --stop-datetime=’2014-10-45 03:10:46’ -d esen -r time.sql

基于位置点的增量恢复

1)指定开始位置到结束位置 myslbinlog mysqlbin.000008 --start-position=510 --stop-position=1312 -r pos.sql

2)指定开始位置到文件结束 myslbinlog mysqlbin.000008 --start-position=510 -r pos.sql

3)从文件开始位置到指定结束位置 myslbinlog mysqlbin.000008 --stop-position=1312 -r pos.sql

==恢复binlog==

单库?全库

[root@localhost ~]# mysqlbinlog -d school localhost-bin.000002 --start-position=11574908 > school-bin.sql
[root@localhost ~]# mysqlbinlog -d school localhost-bin.000003 >> school-bin.sql
[root@localhost ~]# mysqlbinlog -d school localhost-bin.000004 >> school-bin.sql
[root@localhost ~]# mysql -uroot -p888 school < school-bin.sql

实现自动化备份(数据库小)

备份计划:

1. 什么时间 2:00

2. 对哪些数据库备份

3. 备份文件放的位置

备份脚本:

[root@yang ~]# vim /mysql_back.sql
#!/bin/bash
back_dir=/backup
back_file=`date +%F`_all.sql
user=root
pass=123 if [ ! -d /backup ];then
mkdir -p /backup
fi # 备份并截断日志
mysqldump -u${user} -p${pass} --lock-all-tables --routines --events --triggers --master-data=2 --flush-logs --all-databases > /$back_dir/$back_file # 只保留最近一周的备份
cd $back_dir
find . -mtime +7 -exec rm -rf {} \;

手动测试:

[root@yang ~]# chmod a+x /mysql_back.sql
[root@yang ~]# chattr +i /mysql_back.sql
[root@yang ~]# /mysql_back.sql

配置cron:

[root@yang ~]# crontab -e
0 2 * * * /mysql_back.sql

Mydumper介绍

Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具。开发人员主要来自MySQL,Facebook,SkySQL公司。目前已经在一些线上使用了Mydumper。

Mydumper主要特性:

• 轻量级C语言写的

• 执行速度比mysqldump快10倍

• 事务性和非事务性表一致的快照(适用于0.2.2以上版本)

• 快速的文件压缩

• 支持导出binlog

• 多线程恢复(适用于0.2.1以上版本)

• 以守护进程的工作方式,定时快照和连续二进制日志(适用于0.5.0以上版本)

• 开源 (GNU GPLv3)

#wget https://launchpadlibrarian.net/225370879/mydumper-0.9.1.tar.gz
# yum -y install glib2-devel mysql-devel zlib-devel pcre-devel
[root@localhost ~]# tar xf mydumper-0.9.1.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/mydumper-0.9.1/
# cmake .
# make
# make install

mydumper参数介绍:

-d, --directory 导入备份目录

-q, --queries-per-transaction 每次执行的查询数量, 默认1000

-o, --overwrite-tables 如果表存在删除表

-B, --database 需要备份的库

-T, --tables-list 需要备份的表,用,分隔

-o, --outputdir 输出目录

-s, --statement-size Attempted size of INSERT statement in bytes, default 1000000

-r, --rows 试图分裂成很多行块表

-c, --compress 压缩输出文件

-e, --build-empty-files 即使表没有数据,还是产生一个空文件

-x, --regex 支持正则表达式

-i, --ignore-engines 忽略的存储引擎,用,分隔

-m, --no-schemas 不导出表结构

-k, --no-locks 不执行临时共享读锁 警告:这将导致不一致的备份

-l, --long-query-guard 长查询,默认60s

--kill-long-queries kill掉长时间执行的查询(instead of aborting)

-b, --binlogs 导出binlog

-D, --daemon 启用守护进程模式

-I, --snapshot-interval dump快照间隔时间,默认60s,需要在daemon模式下

-L, --logfile 日志文件

-h, --host

-u, --user

-p, --password

-P, --port

-S, --socket

-t, --threads 使用的线程数,默认4

-C, --compress-protocol 在mysql连接上使用压缩

-V, --version

-v, --verbose 更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

mydumper输出文件:

metadata:元数据 记录备份开始和结束时间,以及binlog日志文件位置。

table data:每个表一个文件

table schemas:表结构文件

binary logs: 启用--binlogs选项后,二进制文件存放在binlog_snapshot目录下

daemon mode:在这个模式下,有五个目录0,1,binlogs,binlog_snapshot,last_dump。

备份目录是0和1,间隔备份,如果mydumper因某种原因失败而仍然有一个好的快照,

当快照完成后,last_dump指向该备份。

mydumper用例

==备份==

#export LD_LIBRARY_PATH="/usr/local/mysql/lib:$LD_LIBRARY_PATH"
[root@localhost ~]# mydumper -h localhost -u root -p 123456 -t 6 -S /tmp/mysql.sock -B uplook -o /mysqlbackup/
[root@localhost ~]# ls /mysqlbackup/
metadata uplooking.Student-schema.sql uplook-schema-create.sql uplook.Student.sql
uplooking-schema-create.sql uplooking.Student.sql uplook.Student-schema.sql ** (mydumper:5247): CRITICAL **: Error connecting to database: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

解决方法:建立软连接

ln -sv /tmp/mysql.sock /var/lib/mysql/mysql.sock

[root@localhost ~]# cat /mysqlbackup/metadata
[root@localhost ~]# cat /mysqlbackup/metadata
Started dump at: 2017-08-05 15:48:09
Finished dump at: 2017-08-05 15:48:09

==恢复==

[root@localhost ~]# mysql -uroot -p -e 'drop database uplook;'
[root@localhost ~]# myloader -h localhost -u root -p 123456 -S /tmp/mysql.sock -d /mysqlbackup/ -o -B uplook

MySQL数据逻辑备份的更多相关文章

  1. mysqldump常用于MySQL数据库逻辑备份

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...

  2. MySQL定时逻辑备份

    当项目数据量不大时,备份可以采用逻辑备份. 数据库可以搭建一主一从,从库每天凌晨三点全量逻辑备份. 然后同时记录二进制文件,用来进行基于时间点的数据恢复. 其他备份方案详见我的思维导图:MySQL备份 ...

  3. mysql数据的备份

    一.备份方式 1.备份:逻辑备份(mysqldump,mydumper).物理备份(xtrabackup.tar.cp.rsync)    2.冗余:主备模式.数据库集群 二.备份对象 1.数据(库. ...

  4. Centos中MySQL数据的备份和恢复

    1.MySQL数据备份 MySQL在Centos备份中用到了mysqldump这个文件,首先得把它找出来: [root@instance-3snz20bz ~]# whereis mysqldump ...

  5. MySQL数据物理备份之xtrabackup

    percona-xtrabackup 它是开源免费的支持MySQL 数据库热备份的软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份.它不暂停服务创建Innodb热备份: 为mysql ...

  6. MySQL数据物理备份之lvm快照

    使用lvm快照实现物理备份 优点: 几乎是热备(创建快照前把表上锁,创建完后立即释放) 支持所有存储引擎 备份速度快 无需使用昂贵的商业软件(它是操作系统级别的) 缺点: 可能需要跨部门协调(使用操作 ...

  7. mysql 数据表备份导出,恢复导入操作实践

    因为经常跑脚本的关系, 每次跑完数据之后,相关的测试服数据库表的数据都被跑乱了,重新跑脚本恢复回来速度也不快,所以尝试在跑脚本之前直接备份该表,然后跑完数据之后恢复的方式,应该会方便一点.所以实践一波 ...

  8. linux 命令行对mysql数据进行备份和还原

    一.备份 1.进入mysql目录 cd /var/lib/mysql (进入mysql目录,根据安装情况会有差别) 2.备份 mysqldump -u root -p密码 数据库名 数据表名 > ...

  9. mysql数据定期备份删除

    1.这里只写备份mysql的数据库的方法,全备份,包括定时删除. 准备工作,弄一个文件夹存数据库备份数据 第一步:编写shell 脚本,命名为shell.sh #备份数据库 backupdir=/we ...

随机推荐

  1. JDOJ 1162 是否闰年

    1162: 是否闰年 https://neooj.com:8082/oldoj/problem.php?id=1162 题目描述 输入一个年份year,求year是否是闰年,如果是闰年输出L,否则输出 ...

  2. Emu8086三种格式的代码-(顺序,分支,循环)

    这个学期准备考研,于是就没有怎么听别的课,现在临近期末,汇编成了个难题.下面是我学校的实验报告 做一个复习的记录吧,下面的代码都是在Emu8086上运行出来的代码 下面先介绍一下,汇编里面的格式问题 ...

  3. Oracle工具PLSQL

    2018版的PLSQL美化工具在Tools中的PL/SQL Beautifier中 如下:

  4. 关于c# 中读取系统内存大小的问题。

    在程序中,调用WMI的时候,出现一个问题,就是我系统有插了两条内存条,共4G.然而自己只能在程序中查到安装内存为2G,感觉有点不淡定.这是之前的代码. static ManagementObjectS ...

  5. [THUPC2018]生生不息(???)

    SB题,写来放松身心. 首先 $n,m\le 5$,这是可以打表的. 本地怎么对于一个 $n,m$ 求答案?此时虽然复杂度不需要太优,但是还是得够快. 一个想法是枚举每个初始状态,不停模拟.因为总状态 ...

  6. Npcap环境配置(Winpcap后继者) pcap的一种

    Npcap是基于Winpcap和Libpcap的,Winpcap已多年无人维护,其官网也推荐Windows XP之后的用户转移到Npcap上.Npcap基于WINPCAP,Winpcap基于libpc ...

  7. 首次体验MangoDB

    Author:SimpleWu MongoDB官方网:https://www.mongodb.com/ MongoDB中文网:http://www.mongodb.org.cn/ 什么是MongoDB ...

  8. 推荐一款运动步行App爱步行

    推荐一款运动步行App爱步行 1 介绍 爱步行,是一款倡导健步运动.绿色生活.提升散步乐趣的APP,让大众在享受运动的同时,让用户的每一步都能产生价值.爱步行以步数为基础,用户在每天的行走过程中,可以 ...

  9. 初始socket模块和巧解粘包问题

    1.什么是socket? 两个进程如果需要进行通讯最基本的一个前提能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大 ...

  10. zipfile

    zipfile是一个用于处理zip压缩格式的文件的模块, 主要会用到它的ZipFile类 import zipfile zipfile.is_zipfile('myzip.zip')) # 判断一个文 ...