MySQL常见备份方案有以下三种:

mysqldump + binlog

lvm + binlog

xtrabackup

本例为方便演示,数据库里面数据为空。下面开始动手

mkdir /opt/backup                                #创建备份目录
mkdir -p /data//{data,binlog}
cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --datadir=/data//data/ --basedir=/usr/local/mysql/
chown mysql.mysql -R /data//
cp support-files/my-small.cnf /data//my.cnf #提供配置文件 vim /data//my.cnf #编辑配置文件
[client]
#password       = your_password
port            = 3309
socket          = /tmp/mysql.sock4
# The MySQL server
[mysqld]
port            = 3309
socket          = /tmp/mysql.sock4
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
datadir = /data/3309/data
server-id       = 3309
log-bin=/data/3309/binlog/mysql-bin   #二进制日志位置
binlog_format=mixed               #二进制日志格式
log-error = /data/3309/mysql-err       #错误日志位置 
innodb_file_per_table = 1            #为每一个新数据表创建一个表空间文件
sync_binlog = 1                    #写二进制日志的时候,同步到磁盘上面 cp /data/3309/my.cnf /opt/backup/   #备份配置文件
mysqld_safe --defaults-file=/data/3309/my.cnf &  #启动mysql

1、利用mysqldump完全备份mysql,配合二进制日志备份实现增量备份

mysqldump 选项请参考http://wangweiak47.blog.51cto.com/2337362/1589304

1.1提供模拟数据

mysql -S /tmp/mysql.sock4   #连接mysql
mysql> use test;
Database changed
mysql> create table test (id int(),comment char()); #创建表
Query OK, rows affected (0.34 sec) mysql> insert into test values (,'yun zhonghe'); #插入数据
Query OK, row affected (0.16 sec)

1.2全量备份:

mysqldump -S /tmp/mysql.sock4 -A -B -F -x --events --triggers --routines --master-data= > /opt/backup/all_data-`date +%F--%U`.sql

1.3 模拟数据发生改变

mysql> insert into test values (,'yun zhonghe2');    #再插入一条数据。
Query OK, row affected (0.11 sec)

1.4 增量备份

mysqladmin -S /tmp/mysql.sock4 flush-logs   #增量备份前,先滚动一下二进制日志。
cp `cat /data//binlog/mysql-bin.index | tail -n | head -n ` /opt/backup/ #备份二进制日志

1.5 数据损坏

rm -rf /data//
killall mysqld

1.6 恢复

上面已经提供了步骤,直接复制过来使用。

mkdir -p /data//{data,binlog}
cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --datadir=/data//data/ --basedir=/usr/local/mysql/
cp /opt/backup/my.cnf /data//
chown mysql.mysql -R /data//
mysqld_safe --defaults-file=/data//my.cnf & mysql -S /tmp/mysql.sock4 #连接mysql查看数据
mysql> set sql_log_bin=;
Query OK, rows affected (0.00 sec) mysql> show variables like 'sql_log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin | OFF |
+---------------+-------+
row in set (0.00 sec) mysql> source /opt/backup/all_data-----.sql mysql> select * from test.test; #还缺一个数据
+------+-------------+
| id | comment |
+------+-------------+
| | yun zhonghe |
+------+-------------+
row in set (0.00 sec) mysql> source /tmp/incres-.sql; mysql> select * from test.test; #数据已恢复
+------+--------------+
| id | comment |
+------+--------------+
| | yun zhonghe |
| | yun zhonghe2 |
+------+--------------+
rows in set (0.00 sec) mysql> set sql_log_bin = ; #打开二进制记录开关。

1.7小结,mysqldump适合于数据量较小的场合,它的优点是有众多选项,使用起来非常灵活,缺点是数据量一旦过大,非常耗时耗力。

2、使用lvm进行全备。

lvm快照卷原理参考

http://baike.baidu.com/link?url=iEpO_zm_AbHbk-ijQa8jNcFRoPPG2NdTYb_cRoQ7mjQb_ag9g-fL7yHPXV7Atp2j3J0L5xYynM9KKLIwycW_S_

2.1 数据接着上次继续开始。

2.2 全备。

需保证数据库存放在逻辑卷组上面,才行。

2.2.1首先锁表和滚动日志

mysql> flush table with read lock;
Query OK, rows affected (0.02 sec) mysql -S /tmp/mysql.sock4 -e 'show master status;' > /backup/master.info #记录当前日志信息
mysqladmin -S /tmp/mysql.sock4 flush-logs #滚动日志

2.2.2创建快照

lvcreate -s -n snap_data -L 500M /dev/vg_node5/mylv_data
Logical volume "snap_data" created

2.2.3 解锁表

mysql> unlock tables;
Query OK, rows affected (0.00 sec)

2.2.4 复制快照卷数据到备份目录下

mkdir -p /backup/lvm
mount /dev/vg_node5/snap_data /mnt/lvm
cp -R /mnt//* /backup/lvm

2.2.5 删除快照

umount /mnt
lvremove /dev/mapper/vg_node5-snap_data
Do you really want to remove active logical volume snap_data? [y/n]: y
Logical volume "snap_data" successfully removed

2.3增量备份,只需和定时复制binlog到备份目录下面即可

2.4恢复,只需要直接拷贝备份目录下的文件即可

killall mysqld
rm -rf /data//
cp -R /backup/lvm/ /data//
chown mysql.mysql -R /data//
mysqld_safe --defaults-file=/data//my.cnf &
ss -tnl | grep
LISTEN *: *:* mysql> select * from test.test; #数据未改变
+------+--------------+
| id | comment |
+------+--------------+
| | yun zhonghe |
| | yun zhonghe2 |
+------+--------------+

2.5小结:

lvm实现物理备份速度相对mysqldump来比较快,实现也比较简单,是不错的选择。

缺点:数据目录必须存放在lvm卷组上面

3、使用xtrabackup实现热备。

请自行到官网下载并安装对应的rpm包。

使用方法参考:详细参考:

http://www.cnblogs.com/Amaranthus/archive/2014/08/19/3922570.html

3.1创建一个具有最小权限的用户

mkdir /backup/xtrabackup
mysql> grant RELOAD, LOCK TABLES, REPLICATION CLIENT on *.* to 'bkuser'@'localhost' identified by '123456';
mysql> flush privileges;

3.2完全热备。

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

innobackupex --user=bkuser --password= --socket=/tmp/mysql.sock4 --defaults-file=/data//my.cnf /backup/xtrabackup/ #相关选项自行help。
#nnobackupex: completed OK! #出现此选项代表备份完成。
ls /backup/xtrabackup/
--01_17--

(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(5)backup-my.cnf —— 备份命令用到的配置选项信息;

3.3提供改变数据。

mysql> insert into test.test values (,'yun zhonghe3');
Query OK, row affected (0.03 sec)

3.4增量备份

innobackupex --user=bkuser --password= --socket=/tmp/mysql.sock4 --defaults-file=/data//my.cnf --incremental /backup/xtrabackup/ --incremental-basedir=/backup/xtrabackup/--01_17--/

3.5 模拟数据损坏

rm -rf /data//
killall mysqld

3.6增量备份恢复

innobackupex --apply-log --redo-only /backup/xtrabackup/--01_17--/
innobackupex --apply-log --redo-only /backup/xtrabackup/--01_17--/ --incremental-dir=/backup/xtrabackup/--01_17--/

#注意,多实例的话,仍然需要备份配置文件,启动的时候需要binlog目录。

mkdir -p /data//{data,binlog}
chown mysql.mysql -R /data/
cp /opt/backup/my.cnf /data//
innobackupex --copy-back /backup/xtrabackup/--01_17--/ --defaults-file=/opt/backup/my.cnf #恢复数据。

3.6启动数据库查看。

mysqld_safe --defaults-file=/data//my.cnf &
mysql -S /tmp/mysql.sock4
mysql> select * from test.test; #数据修复完成。
+------+--------------+
| id | comment |
+------+--------------+
| | yun zhonghe |
| | yun zhonghe2 |
| | yun zhonghe3 |
+------+--------------+
rows in set (0.01 sec)

小结:

xtrabacup具有如下特点。

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

(3)能够基于压缩等功能节约磁盘空间和流量;

(4)自动实现备份检验;

(5)还原速度快;

因此建议学会熟练使用xtrabackup进行备份和还原

MySQL常见备份方案的更多相关文章

  1. mysql 数据库备份方案及策略

    由于mysql存在多种数据库备份方式,而且各有利弊,对于我们初学者来说,选择合适的备份方式确实有些困难.个人觉得,首先要基于公司的需求,考虑能够容忍丢失多少数据.花多少人力时间成本等,这是我们制定备份 ...

  2. 原创|高逼格企业级MySQL数据库备份方案,原来是这样....

    很多人,这里说的是运维工程师们,一提到写某某方案,很是头疼.不是上某度一统搜索,就是同样一句话在N个群全部群发一遍:“有没有某某方案,可以共享一下的吗??求助,各位大佬们”,估计十有八九,全部石沉大海 ...

  3. 高逼格企业级MySQL数据库备份方案,原来是这样....

    很多人,这里说的是运维工程师们,一提到写某某方案,很是头疼.不是上某度一统搜索,就是同样一句话在N个群全部群发一遍:“有没有某某方案,可以共享一下的吗??求助,各位大佬们”,估计十有八九,全部石沉大海 ...

  4. mysql异地备份方案经验总结

    Mysql 数据库异地备份脚本 实验环境:关闭防火墙不然不能授权登录 Mysql-server:192.168.30.25 Mysql-client:  192.168.30.24 实验要求:对mys ...

  5. mySQL 增量备份方案(转)

    1.在 /etc/my.cnf 下面设置开启bin-log 编辑 vim /etc/my.cnf [mysqld] binlog_format       = MIXED                ...

  6. mySQL 增量备份方案

    1.在 /etc/my.cnf 下面设置开启bin-log 编辑 vim /etc/my.cnf [mysqld] binlog_format       = MIXED                ...

  7. MySQL 常见面试知识点

    之前简单总结了一下MySQL的场景面试知识点 1.讲下MVCC原理 2.MySQL高可用架构介绍 3.OSC(在线更改表结构)原理 4.MySQL性能调优有哪些关键点/经验 5.MySQL在线备份方案 ...

  8. 五大常见的MySQL高可用方案

      1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 1.1 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据 ...

  9. 五大常见的MySQL高可用方案【转】

    1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中 ...

随机推荐

  1. (NO.00002)iOS游戏精灵战争雏形(五)

    完成了精灵自己移动之后,我们开始着手实现按住精灵拖动的功能. 要想处理触摸事件,我们需要做2件事: 1.在类的初始化中打开触摸接收属性 2.实现触摸处理回调方法 我们依次来做这2件事. 首先要搞清楚在 ...

  2. (NO.00001)iOS游戏SpeedBoy Lite成形记(十八)

    现在需要实现具体的游戏逻辑大致如下: 玩家点击某条赛道选择一个选手,然后会弹出菜单窗口让玩家输入压赌的金额,如果输入的金额值非法,则在GameInterface下部的状态栏中显示提示,要求玩家重新输入 ...

  3. Aliyun上Linux服务器挂载数据盘及速度测试

    原始文档来自于阿里云官方文档:  Linux 系统挂载数据盘 铁锚 于 2013年12月19日 根据自己的需要进行整理 操作系统: CentOS 6.3, 平台  : 阿里云 ECS 云服务器 1. ...

  4. XBMC源代码分析 3:核心部分(core)-综述

    前文分析了XBMC的整体结构以及皮肤部分: XBMC源代码分析 1:整体结构以及编译方法 XBMC源代码分析 2:Addons(皮肤Skin) 本文以及以后的文章主要分析XBMC的VC工程中的源代码. ...

  5. libgdx 1.4.1发布

    (转载自http://www.libgdx.cn/topic/4/libgdx-1-4-1%E5%8F%91%E5%B8%83) libgdx从未停止进步的脚步.10月10日,libgdx1.4.1发 ...

  6. 《java入门第一季》之面向对象(一个易错面试题)

    这个面试题有点难度,有一些饶.不明白可以在下面讨论.还是值得搞懂的. / * 看程序写结果: A:成员变量的问题 int x = 10; //成员变量x是基本类型 Student s = new St ...

  7. 销售订单-修改量-高级定价关联sql

    修改量消耗明细 --修改量消耗明细 SELECT t.name, t.comments, t.version_no, cux_rebate_pub.get_hou_name(p_organizatio ...

  8. LeetCode之“动态规划”:Unique Binary Search Trees && Unique Binary Search Trees II

    1. Unique Binary Search Trees 题目链接 题目要求: Given n, how many structurally unique BST's (binary search ...

  9. "《算法导论》之‘字符串’":字符串匹配

    本文主要叙述用于字符串匹配的KMP算法. 阮一峰的博文“字符串匹配的KMP算法"将该算法讲述得非常形象,可参考之. 字符串‘部分匹配值’计算 KMP算法重要的一步在于部分匹配值的计算.模仿& ...

  10. Gradle 1.12用户指南翻译——第三十八章. Eclipse 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...