L008-oldboy-mysql-dba-lesson08
L008-oldboy-mysql-dba-lesson08
xtrabackup安装
[root@web01 installer]#
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.3/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.3-1.el6.x86_64.rpm
[root@web01 installer]# wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm
[root@web01 installer]# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
[root@web01 installer]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
[root@web01 installer]# rpm -ivh percona-xtrabackup-24-2.4.3-1.el6.x86_64.rpm
# yum localinstall -y percona-xtrabackup-24-2.4.3-1.el6.x86_64.rpm
[root@web01 installer]# innobackupex --defaults-file=/var/lib/mysql/my.cnf
[root@web01 installer]# mysqladmin -uroot -ptestpassword shutdown
[root@web01 ~]# vi /var/lib/mysql/my.cnf #添加
[mysqld]
####################################
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_buffer_pool_size = 384M
innodb_buffer_pool_instances = 4
default_storage_engine = innodb
innodb_log_file_size = 100M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
#transaction-isolation = READ-UNCOMMITTED
log_bin_trust_function_creators = 1
wait_timeout=20
[root@web01 mysql]# pwd
/var/lib/mysql
[root@web01 mysql]# mv ib_logfile* ../ #必须得把这个数据文件移走才能启动成功
[root@web01 installer]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/var/lib/mysql/my.cnf &
[root@web01 mysql]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword /mysql_backup/ #全备完毕
[root@web01 mysql]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --stream=tar /mysql_backup/ 1>/mysql_backup/20160614_all.tar.gz | gzip /mysql_backup/20160614_all.tar.gz 2>/mysql_backup/innobackupex.log #加上tar流的备份
#给数据库添加一些数据
[root@web01 ~]# mysql -uroot -ptestpassword
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| mywebsite |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.05 sec)
mysql> use test;
Database changed
mysql> create table mytest(id int);
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| mytest |
+----------------+
1 row in set (0.00 sec)
mysql> select unix_timestamp(now());
+-----------------------+
| unix_timestamp(now()) |
+-----------------------+
| 1465872984 |
+-----------------------+
1 row in set (0.02 sec)
mysql> insert into mytest values(unix_timestamp(now()));
mysql> insert into mytest values(unix_timestamp(now()));
mysql> insert into mytest values(unix_timestamp(now()));
mysql> insert into mytest values(unix_timestamp(now()));
mysql> insert into mytest values(unix_timestamp(now()));
mysql> insert into mytest values(unix_timestamp(now()));
mysql> insert into mytest values(unix_timestamp(now()));
mysql> insert into mytest values(unix_timestamp(now()));
mysql> insert into mytest values(unix_timestamp(now()));
mysql> select * from mytest ;
+------------+
| id |
+------------+
| 1 |
| 1465873375 |
| 1465873378 |
| 1465873378 |
| 1465873379 |
| 1465873380 |
| 1465873427 |
| 1465873428 |
| 1465873429 |
| 1465873430 |
| 1465873431 |
| 1465873431 |
+------------+
mysql> insert into mytest select * from mytest; #大批量插入
mysql> insert into mytest select * from mytest;
mysql> insert into mytest select * from mytest;
mysql> insert into mytest select * from mytest;
mysql> insert into mytest select * from mytest;
#下面小段是为了修复数据库,无此问题的可以忽略。
[root@web01 mysql]# mysqladmin -uroot -ptestpassword shutdown
[root@web01 mysql]# cd ..
[root@web01 lib]# ls ib*
ib_logfile0 ib_logfile1
[root@web01 lib]# rm -rf ib*
[root@web01 lib]# cd mysql/
[root@web01 mysql]# find . -name "*.ibd"
./test/mytest.ibd
[root@web01 mysql]# find . -name "*.ibd" | sed 's/^/mv /g' | sed 's/$/ ..\/mybackup\//g'
[root@web01 mysql]# vi aa.txt
mv ./test/mytest.ibd ../mybackup/
-----------------------------------------------------
:%s/ibd/frm/g #替换掉
[root@web01 mysql]# cat aa.txt | bash
[root@web01 mysql]# mysqld_safe --defaults-file=/var/lib/mysql/my.cnf &
#备份
[root@web01 mysql_backup]# mkdir -p /mysql_backup/xtrabackup/base
[root@web01 mysql_backup]# mkdir -p /mysql_backup/xtrabackup/detla
[root@web01 xtrabackup]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword /mysql_backup/xtrabackup/base/ #第一次全量备份
mysql> insert into mytest select * from mytest; #全备完之后对表插入一些数据
mysql> insert into mytest select * from mytest;
mysql> insert into mytest select * from mytest;
[root@web01 mysql]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --incremental --incremental-basedir=/mysql_backup/xtrabackup/base/2016-06-14_11-56-26/ /mysql_backup/xtrabackup/detla/ #增量备份
[root@web01 xtrabackup]# cat base/2016-06-14_11-56-26/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 61510896
last_lsn = 61510896
compact = 0
recover_binlog_info = 0
[root@web01 xtrabackup]#
[root@web01 xtrabackup]#
[root@web01 xtrabackup]#
[root@web01 xtrabackup]# cat detla/2016-06-14_12-50-38/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 61510896
to_lsn = 241364779
last_lsn = 241364779
compact = 0
recover_binlog_info = 0
[root@web01 xtrabackup]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword /mysql_backup/xtrabackup/base/ #第二次全量备份
[root@web01 mysql]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --apply-log --redo-only /mysql_backup/xtrabackup/base/2016-06-14_12-57-21/ #恢复到第二次的全量备份
[root@web01 mysql]# chown -R mysql:mysql /var/lib/mysql #可以不执行,但是建议执行此命令。
[root@web01 mysql]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --apply-log --redo-only /mysql_backup/xtrabackup/base/2016-06-14_11-56-26/ #先执行恢复第一全量备份的prepare
[root@web01 mysql]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --apply-log --redo-only /mysql_backup/xtrabackup/base/2016-06-14_11-56-26/ --incremental-dir=/mysql_backup/xtrabackup/detla/2016-06-14_12-50-38/ #恢复第一次全量备份+增量备份
#已经恢复完了,现在在插入一些数据。
mysql> insert into mytest select * from mytest;
[root@web01 mysql]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --incremental --incremental-basedir=/mysql_backup/xtrabackup/base/2016-06-14_12-57-21/ /mysql_backup/xtrabackup/detla/ #基于第二次全量的增量备份
[root@web01 mysql]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --apply-log --redo-only /mysql_backup/xtrabackup/base/2016-06-14_12-57-21/ #先执行恢复第二次全量备份的prepare
[root@web01 mysql]# innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --apply-log --redo-only /mysql_backup/xtrabackup/base/2016-06-14_12-57-21/ --incremental-dir=/mysql_backup/xtrabackup/detla/2016-06-14_13-15-21/ #恢复第二次全量备份+增量备份
#常用的xtrabackup备份脚本
[root@web01 xtrabackup]# ls
01_full_backup.sh 03_restore_full_backup.sh 05_copy_back.sh detla
02_incremental_backup.sh 04_restore_incremental_backup.sh base
[root@web01 xtrabackup]# cat 01_full_backup.sh
#!/bin/bash
innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword /mysql_backup/xtrabackup/base/
[root@web01 xtrabackup]#
[root@web01 xtrabackup]# cat 02_incremental_backup.sh
#!/bin/bash
filename=$1
if [ -z $filename ];then
exit 0
fi
innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --incremental --incremental-basedir=/mysql_backup/xtrabackup/base/$filename/ /mysql_backup/xtrabackup/detla/
[root@web01 xtrabackup]#
[root@web01 xtrabackup]# cat 03_restore_full_backup.sh
#!/bin/bash
filename=$1
if [ -z $filename ];then
exit 0
fi
innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --apply-log --redo-only /mysql_backup/xtrabackup/base/$filename
[root@web01 xtrabackup]#
[root@web01 xtrabackup]#
[root@web01 xtrabackup]# cat 04_restore_incremental_backup.sh
#!/bin/bash
innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --apply-log --redo-only /mysql_backup/xtrabackup/base/XXXXXXXXXX/ --incremental-dir=/mysql_backup/xtrabackup/detla/XXXXXXXXXXX
[root@web01 xtrabackup]#
[root@web01 xtrabackup]#
[root@web01 xtrabackup]# cat 05_copy_back.sh
#!/bin/bash
innobackupex --defaults-file=/var/lib/mysql/my.cnf --user=root --password=testpassword --copy-back /mysql_backup/xtrabackup/base/XXXXXXXX
[root@web01 xtrabackup]#
[root@web01 xtrabackup]#
#模拟数据库备份恢复
[root@web01 lib]# pwd
/var/lib
[root@web01 lib]# mysqladmin -uroot -ptestpassword shutdown
[root@web01 lib]# tar zcf mysql_20160614.tar.gz mysql/
[root@web01 mysql]# mysqld_safe --defaults-file=/var/lib/mysql/my.cnf &
#模拟在线业务环境
mysql> show global variables like '%binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.00 sec)
mysql> set global binlog_format=statement;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> show global variables like '%binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)
[root@web01 lib]# vi /var/lib/mysql/my.cnf
#####################
#binlog_format=mixed
binlog_format=statement
[root@web01 lib]# mysqladmin -uroot -ptestpassword shutdown
[root@web01 mysql]# mysqld_safe --defaults-file=/var/lib/mysql/my.cnf &
mysql> use test;
mysql> create table t5(id int);
insert into t5 values(111111);
insert into t5 values(222222);
insert into t5 values(333333);
insert into t5 values(444444);
mysql>
create table t6(id int);
insert into t6 values(111111);
insert into t6 values(2222222);
insert into t6 values(333333);
insert into t6 values(444444);
mysql> drop table t5; #突然出现了一张表被删掉的认为误操作
mysql>
insert into t6 values(555555);
insert into t6 values(666666);
insert into t6 values(777777);
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000021 | 126 |
| mysql-bin.000022 | 37754479 |
| mysql-bin.000023 | 1932 |
| mysql-bin.000024 | 298 |
| mysql-bin.000025 | 1779 |
| mysql-bin.000026 | 4778 | #查一下最新的binlog点
+------------------+-----------+
mysql> show global variables like '%binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)
[root@web01 mysql]# mysqlbinlog mysql-bin.000027 |less #确定删表操作的大概时间点,进入binlog进行查看。
#搜索DROP 找到那个删除的点
[root@web01 lib]# mysqladmin -uroot -ptestpassword shutdown
[root@web01 lib]# mv mysql mysql_temp #临时备份一下
[root@web01 lib]# tar zxf mysql_20160614.tar.gz #恢复之前的备份
[root@web01 lib]# mysqld_safe --defaults-file=/var/lib/mysql/my.cnf &
[root@web01 mysql_temp]# pwd
/var/lib/mysql_temp
[root@web01 mysql_temp]# mysqlbinlog --start-position=3005 --stop-position=4647 mysql-bin.000026 >my.sql #3005是全备恢复的点,4647是DROP之的前一个点
[root@web01 mysql_temp]# mysqlbinlog --start-position=4778 --stop-position=5339 mysql-bin.000026 >my1.sql #4778是DROP之后的一个点,5339是最后的一个点
[root@web01 mysql_temp]# mysql -uroot -ptestpassword < my.sql
mysql> select * from t5; #验证
+--------+
| id |
+--------+
| 111111 |
| 222222 |
| 333333 |
| 444444 |
+--------+
4 rows in set (0.00 sec)
mysql> select * from t6;
+---------+
| id |
+---------+
| 111111 |
| 2222222 |
| 333333 |
+---------+
3 rows in set (0.00 sec)
[root@web01 mysql_temp]# mysql -uroot -ptestpassword < my1.sql #到此可以对外提供服务了
mysql> select * from t6; #验证
+---------+
| id |
+---------+
| 111111 |
| 2222222 |
| 333333 |
| 555555 |
| 666666 |
| 777777 |
+---------+
6 rows in set (0.00 sec)
[root@web01 mysql]# mysqlbinlog --base64-output='DECODE-ROWS' --verbose mysql-bin.000026
备份恢复步骤:
1.做了一个全量的备份,有一个postion
mysql-bin文件名,大小。
例如:mysql-bin.000042 2068
2.找到drop table t5的语句的前后的postion
drop table t5;前面一个位置:3178
后面开的是位置:3282
3.停止线上服务,用1的备份替代上线的数据。
4.利用mysqlbinlog --start-postion=2068 --stop-postion=3178 导出一个my.sql
5.利用mysqlbinlog --start-postion=3282 导出一个my2.sql文件。
6.把my.sql和my2.sql按次序导入恢复的全量mysql中。
7.对外提供服务。
L008-oldboy-mysql-dba-lesson08的更多相关文章
- 我心中的MySQL DBA
原文网址链接:http://wangwei007.blog.51cto.com/68019/1718311 MySQL是一个跨平台的开源关系型数据库管理系统,目前MySQL被广泛地应用在Interne ...
- 招聘前端、Java后端开发、测试、Mysql DBA
公司介绍: http://www.lagou.com/gongsi/43095.html http://www.yamichu.com 简历发到: zhuye@yamichu.com 招聘职位: JA ...
- MySQL DBA的个人修养
做为一个MySQL DBA,必须具有以下的素质: 一, 身体素质 DBA必须接收和处理各种报警,不论是中午在吃饭或者凌晨三点已经进入深度睡眠.接到报警需要立即进入应急状态,找到电脑,联上网络,快速定位 ...
- MySQL DBA面试全揭秘
来源:http://ourmysql.com/archives/1426 本文起源于有同学留言回复说想了解下MySQL DBA面试时可能涉及到的知识要点,那我们今天就来大概谈谈吧. MySQL DBA ...
- Mysql DBA 20天速成教程,DBA大纲
Mysql DBA 20天速成教程 基本知识1.mysql的编译安装2.mysql 第3方存储引擎安装配置方法3.mysql 主流存储引擎(MyISAM/innodb/MEMORY)的特点4.字符串编 ...
- MySQL DBA教程:Mysql性能优化之缓存参数优化
在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感 ...
- MySQL DBA修炼秘籍
0.导读 本文主要写给那些立志成为MySQL DBA,以及正在学习MySQL的同行们,结合个人及业内其他同行的职业发展经历给大家一些参考,如何成为合格的MySQL DBA. 1.什么是MySQL DB ...
- “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX
"快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...
- 【转】MYSQL DBA知识了解-面试准备
http://www.itpub.net/forum.php?mod=viewthread&tid=1825849 公司招聘MySQL DBA,也面试了10个2年MySQL DBA工作经验的朋 ...
- MySQL DBA工作角色和职责介绍
MySQL DBA分架构DBA,运维DBA和开发DBA三种角色,职责介绍如下:
随机推荐
- 和Timesten有个约会--Timesten技术专栏系列(一)
作者: 三十而立 时间:2009年10月03日 12:08:42 本文出自 “inthirties(三十而立)”博客,转载请务必注明作者和保留出处http://blog.csdn.net/inthir ...
- swift3.0 coredata 的使用
//swift3.0在语法上有很大的改变,以简单的增删改查为例,如下: //User类如下: import Foundation import CoreData extension User { @n ...
- WEB服务器、应用程序服务器、HTTP服务器区别(转)
WEB服务器.应用程序服务器.HTTP服务器有何区别?IIS.Apache.Tomcat.Weblogic.WebSphere都各属于哪种服务器,这些问题困惑了很久,今天终于梳理清楚了: Web服务器 ...
- debian之source.list详解
之前安装的是debian sarge(内核是2.4.7),不太想更新,但是发现原来的源/ect/apt/source.lists如下,但是用apt-get update,发现大都已经不可用了.怎么办, ...
- 小白日记37:kali渗透测试之Web渗透-手动漏洞挖掘(三)-目录遍历、文件包含
手动漏洞挖掘 漏洞类型 #Directory traversal 目录遍历[本台机器操作系统上文件进行读取] 使用者可以通过浏览器/URL地址或者参数变量内容,可以读取web根目录[默认为:/var/ ...
- Asp.Net 之 WebService部署到服务器后出现" The test form is only available for requests from the local machine "
最近由于任务需要开发了一个WebService, 部署到服务器以后,出现上述问题,网上查找到如下解决方案: 问题原因: 从 NET Framework 1.1 起定义了一个名为 HttpPostLoc ...
- 关于Linux的总结(三)
1.man_page.txt 1.内部命令:echo 查看内部命令帮助:help echo 或者 man echo 2.外部命令:ls 查看外部命令帮助:ls --help 或者 man ls 或者 ...
- [未完成]关于Eclipse4RCP书中内容总结
原文地址http://www.vogella.com/tutorials/EclipseRCP/article.html Table of Contents 1. Eclipse 4 1.1. Wha ...
- centos 安装ss-QT5
方法一(DNF指令): 1.如果未安装DNF,请跳转至:http://dev.fjuts.com:83/blog/index.PHP/Linux/261.html2.添加shadowsocks 的 c ...
- 【Knockout】五、创建自定义绑定
概述 除了上一篇列出的KO内置的绑定类型(如value.text等),你也可以创建自定义绑定. 注册你的binding handler ko.bindingHandlers.yourBindingNa ...