MySQL常见备份方案
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常见备份方案的更多相关文章
- mysql 数据库备份方案及策略
由于mysql存在多种数据库备份方式,而且各有利弊,对于我们初学者来说,选择合适的备份方式确实有些困难.个人觉得,首先要基于公司的需求,考虑能够容忍丢失多少数据.花多少人力时间成本等,这是我们制定备份 ...
- 原创|高逼格企业级MySQL数据库备份方案,原来是这样....
很多人,这里说的是运维工程师们,一提到写某某方案,很是头疼.不是上某度一统搜索,就是同样一句话在N个群全部群发一遍:“有没有某某方案,可以共享一下的吗??求助,各位大佬们”,估计十有八九,全部石沉大海 ...
- 高逼格企业级MySQL数据库备份方案,原来是这样....
很多人,这里说的是运维工程师们,一提到写某某方案,很是头疼.不是上某度一统搜索,就是同样一句话在N个群全部群发一遍:“有没有某某方案,可以共享一下的吗??求助,各位大佬们”,估计十有八九,全部石沉大海 ...
- mysql异地备份方案经验总结
Mysql 数据库异地备份脚本 实验环境:关闭防火墙不然不能授权登录 Mysql-server:192.168.30.25 Mysql-client: 192.168.30.24 实验要求:对mys ...
- mySQL 增量备份方案(转)
1.在 /etc/my.cnf 下面设置开启bin-log 编辑 vim /etc/my.cnf [mysqld] binlog_format = MIXED ...
- mySQL 增量备份方案
1.在 /etc/my.cnf 下面设置开启bin-log 编辑 vim /etc/my.cnf [mysqld] binlog_format = MIXED ...
- MySQL 常见面试知识点
之前简单总结了一下MySQL的场景面试知识点 1.讲下MVCC原理 2.MySQL高可用架构介绍 3.OSC(在线更改表结构)原理 4.MySQL性能调优有哪些关键点/经验 5.MySQL在线备份方案 ...
- 五大常见的MySQL高可用方案
1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 1.1 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据 ...
- 五大常见的MySQL高可用方案【转】
1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中 ...
随机推荐
- aidl使用采坑记
什么是AIDL? AIDL是 Android Interface definition language的缩写,它是一种Android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口 A ...
- FFMPEG结构体分析:AVCodecContext
注:写了一系列的结构体的分析的文章,在这里列一个列表: FFMPEG结构体分析:AVFrame FFMPEG结构体分析:AVFormatContext FFMPEG结构体分析:AVCodecConte ...
- PS图层混合算法之四(亮光, 点光, 线性光, 实色混合)
亮光模式: 根据绘图色通过增加或降低"对比度",加深或减淡颜色.如果绘图色比50%的灰亮,图像通过降低对比度被照亮,如果绘图色比50%的灰暗,图像通过增加对比度变暗. 线性光模式: ...
- Android adb基本命令-cd,ls,目录相关命令
cd的命令 cd -:代表进入家目录,普通用户是/home/用户名,root用户是/root目录,-是家目录的代表 cd /:这是进入根目录,/是根目录的代表 cd .. :是返回上一级的目录 cd ...
- Spring 学习笔记 Bean的作用域
在配置文件中定义Bean时,用户不但可以配置Bean的属性值以及相互之间的依赖关系,还可以定义Bean的作用域.作用域将对Bean的生命周期和创建方式产生影响.在低版本的Spring中,仅有两个作用域 ...
- Log4j运用于代码中
在JAVA代码中,我们要打印输出语句的时候,我们经常会使用System.out.print(),但是在项目开发完后,这些代码就会影响项目的运行效率,所以Log4j就派上用场了.话不多说,直接上代码. ...
- Nginx常用模块安装命令
将目录切换至Nginx安装包目录下,使用./configure命令进行安装.一些第三方模块需要先下载过来,指定下解压后的目录即可. ./configure --prefix=/usr/local/ng ...
- AMDP + XLSX Workbench 报表开发模式
本文介绍了我和同事通过使用AMDP + XLSX Workbench缩短报表开发周期.分离数据查询处理逻辑和前端展示工作的经验.欢迎讨论. 前言 最近接到了一套人力资源报表的开发需求,需要以EXCEL ...
- IndexedDB,FileSystem- 前端数据库,文件管理系统
"我们不再需要下载并且安装软件.一个简单的web浏览器和一个可供使用的互联网就足以让我们在任何时间, 任何地点, 还有任何平台上使用任何web应用程序." web应用很酷, 但是相 ...
- Storm 提交多个流例程
1.拓扑(Topology): builder.setBolt(TRANSFORM_BOLT, new TransformationBolt(), 1).shuffleGrouping(MY_SPOU ...