文档章节

使用mysqldump对数据库作备份

x
 xiaomeila
发布于 2015/04/17 09:43
字数 1505
阅读 21
收藏 0
点赞 0
评论 0

xxx提出要求:对线上测试环境的mysql的所有数据库作备份


[root@BJVM-CM-94 data]# cd /app/mysql/data/

[root@BJVM-CM-94 data]# du -sh

2.9G.

经查看数据只有2.9G,数据容量不是很大,所以我选择使用mysqldump进行备份

备份时间只用了1-2s的时间

备份文件大小只有280M,是原文件的1/10

一般情况:原文件大小是备份文件的几十倍

[root@www ftp.scj.com]# ps -ef | grep mysql

root      5642  1211 20 11:16 pts/0    00:00:00 grep mysql

root     29558     1  0 Apr14 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/opt/mysql/data --pid-file=/opt/mysql/data/www.scj.com.pid

mysql    29758 29558  0 Apr14 pts/1    00:00:18 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql--datadir=/opt/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/opt/mysql/data/www.scj.com.pid --socket=/var/lib/mysql/mysql.sock


要求:每天凌晨1点完整备份一次

      保留三天的备份文件数据

      保留三天的二进制日志文件

      使用二进制日志文件进行备份之后数据的恢复





备份步骤:

  1. 修改mysql的配置文件:

    开启二进制日志文件

    vi /usr/local/mysql/my.cnf

    在[mysqld]下面添加一行:

    log-bin=/opt/mysql/binlog/mysql-binlog           (把二进制日志文件单独放到一个目录下)    

  2. 创建备份目录和二进制日志目录:

    mkdir -p /opt/mysql/{backup,binlog}

    cd /opt/mysql/


    chown -R mysql.mysql backup binlog                (修改权限)

    重启mysql服务: /etc/init.d/mysqld reload

    [root@www ~]# ls /opt/mysql/binlog/               (查看二进制文件是否生成)

    mysql-binlog.000001  mysql-binlog.index

    注意:只有当二进制日志文件生成后才可执行mysqldump,否则执行会失败;若reload后没有二进制日志文件生成,那就只有尝试:先stop掉mysql,再start起来

  3. 使用mysqldump作完整备份:

    备份除了Database|information_schema|mysql|test|performance_schema这几个库之外的所有库,使用--databases参数,切记

    mysql -u root -p123456 -e "show databases" | grep -Ev "Database|information_schema|mysql|test|performance_schema" |xargs mysqldump -uroot -p123456 --lock-all-tables --routines --events --triggers --master-data=2 --flush-logs --add-drop-database --add-drop-table --databases > /opt/mysql/backup/mysql_full_`date +%F-%H:%M:%S`.sql

    注意:执行此命令屏幕会输出一行:

          Warning: Using a password on the command line interface can be insecure.

          这句话的意思是:在命令行输入密码不安全,完全可以忽略此行,不用管(grep 本身也会忽略这句话)

-u                        #指定用户名

-p                        #指定用户密码

-h                        #指定主机地址

-A|--all-databases        #备份所有数据库

--databases               #备份指定数据库

--single-transcation      #基于此项可以实现对InnoDB表做热备份,但不需要使用

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

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

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

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

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

--triggers                #备份触发器

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

如下:

[root@www backup]# less mysql_full_2015-04-15-11-54-07.sql 

里面有一行:

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-binlog.000002', MASTER_LOG_POS=120;

备份后生成的二进制日志文件名及pos信号,之后所有的操作都将从120开始,记录到mysql-binlog.000002







恢复步骤:

假如,某一时刻运维人员误操作,执行了一个drop操作:

恢复开始:


首先使用全备份文件恢复到备份时的数据:

cd /opt/mysql/data

把除了information_schema|mysql|test|performance_schema这几个库之外的所有库,都临时移到一个目录里:

mv  $(mysql -u root -p123456 -e "show databases" | grep -Ev "Database|information_schema|mysql|test|performance_schema" |xargs) /tmp/mysql/linshi

找到最后一个全备份的文件:

cd /opt/mysql/backup

mysql -uroot -p123456 < mysql_full_2015-04-15-13-36-50.sql    (恢复到了作备份时的数据)


然后使用二进制日志文件恢复到执行drop时的数据:

cd /opt/mysql/binlog/

根据最后一个备份文件里的记录,找到二进制日志文件名和起始的pos信号:

[root@www backup]# less mysql_full_2015-04-15-11-54-07.sql 

里面有一行:

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-binlog.000002', MASTER_LOG_POS=120;

根据二进制日志文件找到执行drop时的pos信号(即:结束时的pos信号):

[root@www binlog]# mysqlbinlog mysql-binlog.000002 |less

# at 965

#150415 12:04:27 server id 1  end_log_pos 1060 CRC32 0xd681bd27         Query   thread_id=2     exec_time=1     error_code=0

SET TIMESTAMP=1429113867/*!*/;

drop database allen

/*!*/;

DELIMITER ;

找到执行drop的那个位置,如上,发现执行drop前的pos信号是965

使用mysqlbinlog 开始恢复:

mysqlbinlog --start-position=120 --stop-position=965 mysql-binlog.000002 |mysql -uroot -p123456

注意:pos信号120和日志文件名000002都是在备份文件里有记录的,这个需要记下来

注意:用mysqlbinlog命令去读取二进制日志文件时可能会报下面的错误:

      mysqlbinlog: unknown variable 'default-character-set=utf8'

      解决办法:只需要加上--no-defaults参数即可,即:

                mysqlbinlog --no-defaults mysql-binlog.000002 |less








使用脚本和计划任务实现自动备份:

vi /usr/local/mysql/run/mysql_backup_full.sh

#!/bin/bash


#这个脚本用来对数据库作全备份


user=root

password=123456

backupdir=/opt/mysql/backup/        #备份目录


#取一天前备份时生成的那个二进制日志文件

val_binlog=$(less /opt/mysql/binlog/mysql-binlog.index | awk -F"/" '{print $5}' |tail -n 2|head -n 1)


#创建备份目录

[ ! -d $backupdir ] && mkdir -p $backupdir


#备份除Database|information_schema|mysql|test|performance_schema这几个数据库之外的所有库

mysql -u $user -p$password -e "show databases" | grep -Ev "Database|information_schema|mysql|test|performance_schema" |xargs mysqldump -u $user -p$password --lock-all-tables --routines --events --triggers --master-data=2 --flush-logs --databases > ${backupdir}mysql_full_`date +%F-%H:%M:%S`.sql


#删除两天前的备份文件,即保留三个备份文件

find $backupdir  -type f -mtime +2 -exec rm -f {} \;


#删除两天前的二进制日志文件,即保留三个二进制日志文件

mysql -u $user -p$password -e "PURGE MASTER LOGS TO '$val_binlog'"

[root@www run]#chmod 700 /usr/local/mysql/run/mysql_backup_full.sh        (加上x执行权限)

注意:此脚本里面包含了mysql的root密码,为了安全,设置700权限,其他人都不可访问

[root@www run]#crontab -e                          (创建计划任务)

#分 时 日 月 周 用户名 命令

0 1 * * * cd /usr/local/mysql/run;./mysql_backup_full.sh

© 著作权归作者所有

共有 人打赏支持
x
粉丝 0
博文 7
码字总数 3591
作品 0
贵阳
命令行模式下备份、还原 MySQL 数据库的语句小结

为了安全起见,需要经常对数据库作备份,或者还原,学会在命令行模式下备份、还原数据库,还是很有必要 为了安全起见,需要经常对数据库作备份,或者还原。对于 MySQL 而言,最方便的方法可能...

Carl_
2015/02/02
0
0
MySQL数据库备份及恢复命令mysqldump,source的用法

转自:http://blog.csdn.net/bxbx258/article/details/2945832 还原一个数据库:mysql -h localhost -u root -p123456 www 备份一个数据库:mysqldump -h localhost -u root -p123456 www > d:......

sentu
06/28
0
0
最简便的备份MySql数据库方法

使用MYSQL进行数据库备份,又很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但有没有想过,MySQL会有更简捷的使用文件目录的备份方法,而且又快有好。 一、数据备份捷径 因为这...

xiahuawuyu
2012/05/07
0
0
MySQL之备份还原,主从复制,主主复制。

数据库作为我们的日常工作中不可缺少的部分,那它内部数据的重要性显而易见,所以数据安全至关重要。确保数据的安全,我们就必须做好数据备份。简单说几个MySQL常用的备份工具以及如何利用这...

chinahaike
2014/07/01
0
0
图文详解webERP4.05升级到4.06(2011年11月6日释出最新版)

图文详解webERP4.05升级到4.06 下面的内容中的图片不能正常显示,要看完整版请看:http://blog.sina.com.cn/s/blog_7cb52fa80100vhrr.html 共分三步来升级webERP * 备份数据库 * 备份现有的脚...

保定-粉刷匠
2011/11/07
425
0
MySQL管理工具

一、MySQL工具 二、mysqladmin工具 三、mysqldump工具(备份用) 一、MySQL工具 mysql是一个简单的命令行SQL工具,该工具支持交互式和非交互式运行 使用范例: 1、使用root账户连接服务器,默...

youshine
2015/07/14
0
0
MYSQL四种备份方法概述

Mysql数据库备份主要有4种方法: 1、mysqldump 2、直接拷贝(cp、tar,gzip,cpio) 3、sqlhotcopy 4、同步复制 1、mysqldump备份: mysqldump生成能够移植到其它机器的文本文件,缺省地,文件内容...

zbing3
2012/07/31
0
0
十三、MySQL数据备份与恢复

13.1、数据备份 数据备份:目的用于恢复;必须对备份数据做恢复测试。 备份类型: 物理备份和逻辑备份: 完全备份、增量备份和差异备份; 备份策略:选择备份方式;选择备份时间;考虑到恢复...

梦想成大牛
06/28
0
0
MYSQL5.6 mysqldump备份与恢复

MYSQL5.6学习——mysqldump备份与恢复 MYSQL备份 冷备份:停止服务进行备份,即停止数据库的写入 热备份:不停止服务进行备份(在线) l mysql的MyIsam引擎只支持冷备份,InnoDB支持热备份,...

xiaocao13140
05/29
0
0
mysql导出数据库命令:mysqldump

语法: 1. mysqldump [options] -all-databases 2. mysqldump [options] --databases database [database ...] 3. mysqldump [options] database [table] mysqldump可以导出mysql中的数据和表......

柳哥
2015/04/09
235
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

数据结构与算法2

一个数组的例子,实现查找,显示和删除的功能。 public class array {public static void main(String[] args){long[] arr;arr = new long[100];int nElems = 0;int j;...

沉迷于编程的小菜菜
17分钟前
0
0
Python3 基于 requests 批量下载图片

Python3 基于 requests 批量下载图片 import requestsheaders = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encod......

leeyi
17分钟前
0
0
Sparkstreaming and Kafka

简介 Kafka 0.10的Spark Streaming集成设计与0.8 Direct Stream方法类似。 它提供了简单的并行性,Kafka分区和Spark分区之间的1:1对应关系,以及对偏移量和元数据的访问。 但是,由于较新的...

刺猬一号
21分钟前
0
0
java获取当前时间所在一周的周一和周日日期

/** * 当前时间所在一周的周一和周日时间 * @param time 当前时间 * @return */ public static Map getWeekDate(String time) { Map map = new HashedMap(); SimpleDateFormat sdf = new Si......

小弱鸡
49分钟前
0
0
Redis数据的导出和导入(dump和load方式)

网上有些文章已经不再适用,本人也是踩了些坑,在此记录下。 迁移redis数据一般有如下3种方式: 第三方工具redis-dump,redis-load aof机制,需要开启aof功能 rdb存储机制 这里介绍第一种方式...

iplusx
54分钟前
2
0
ElasticSearch 高亮显示大文档搜索结果

2016年12月,我们开始研究Ambar——一个文档搜索系统。Ambar使用ElasticSearch作为核心搜索引擎。 在Ambar开发的过程中,我们处理了很多与ES相关的问题,我们想分享我们得到的宝贵经验。让我...

九州暮云
今天
1
0
Python 使用 pywifi 模块 破解wifi密码

git https://github.com/awkman/pywifi 常见常量 from pywifi import const# Define interface status.IFACE_DISCONNECTED = 0IFACE_SCANNING = 1IFACE_INACTIVE = 2IFACE_CONNEC......

阿豪boy
今天
2
0
phpstorm使用Iedis

phpstorm的redis插件Iedis是真好用 看了网上挺多的文章,但是由于我系统还是ubuntu,就有点尴尬了,现在破解之后,留个笔记,即使自己之后有需要也可以很快翻阅 先下载资源 资源下载 zip压缩...

贤郎--均灵
今天
0
0
第三章 spring-bean之FactoryBeanRegistrySupport(4)

前言 从FactoryBeanRegistrySupport类的名字可以看出FactoryBeanRegistrySupport负责FactoryBean的注册与支持。如果想知道FactoryBean相关的资料,请阅读spring-bean中关于FactoryBean的解读...

鸟菜啊
今天
0
0
CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部