备份之前:
最初的二进制信息:
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 69417 |
| mysql-bin.000002 | 1388213 |
| mysql-bin.000003 | 120 |
+------------------+-----------+
3 rows in set (0.00 sec)
导入库信息:
source /tmp/estore.sql;
再次查询二进制日志信息:
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 69417 |
| mysql-bin.000002 | 1388213 |
| mysql-bin.000003 | 964116 |
+------------------+-----------+
3 rows in set (0.00 sec)
然后开始备份:
#mysqldump --all-databases --flush-logs --lock-all-tables --master-data=2 > /backup/all.sql
查看备份完成后的二进制日志信息:
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 69417 |
| mysql-bin.000002 | 1388213 |
| mysql-bin.000003 | 964163 |
| mysql-bin.000004 | 120 |
+------------------+-----------+
4 rows in set (0.00 sec)
在all.sql中也可以查看:
less all.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=120;
备份:
备份的时候,不能在该服务器上把所有的数据文件都删除后仔导入备份的sql,这样备份并不能成功
现在将导出的sql复制到另一台数据库做测试
scp /backup/all.sql 192.168.223.128:/tmp
然后在备份机上导入备份的数据(导入数据的时候可以在打开的session连接中暂时关闭sql_log_bin=0,不记录二进制日志,导完数据之后再开启)
source /tmp/all.sql;
验证:
mysql> show tables;
+------------------------+
| Tables_in_estore |
+------------------------+
| cart |
| goods |
| orderitems |
| orders |
| province_city_district |
| user |
+------------------------+
6 rows in set (0.00 sec)
mysql> select count(*) from province_city_district;
+----------+
| count(*) |
+----------+
| 3522 |
+----------+
1 row in set (0.00 sec)
以上的完全备份就是每周日的凌晨三点执行,然后进行每天凌晨三点的模拟备份
在刚刚备份的那台主机上新增操作,记录二进制日志
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)
mysql> use mydb;
Database changed
mysql> create table student(sid int,sname char(30));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into student values (1,'wadeson');
Query OK, 1 row affected (0.00 sec)
mysql> insert into student values (2,'jsonhc');
Query OK, 1 row affected (0.01 sec)
假设上述就是今天的所有的操作记录,然后根据二进制信息,进行今天的备份:
由于进行的完全备份时候的二进制position为:
| mysql-bin.000004 | 120 |
所以今天凌晨三点的备份则为:
先查看凌晨三点时刻的二进制信息:
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 69417 |
| mysql-bin.000002 | 1388213 |
| mysql-bin.000003 | 964163 |
| mysql-bin.000004 | 779 |
此时,备份语句则为:
mysqlbinlog mysql-bin.000004 --start-position=120 --stop-position=779 > /backup/monday.sql
这就是假设的monday到星期二凌晨三点的操作
将备份的增量数据传送到测试机:
scp /backup/monday.sql 192.168.223.128:/tmp
然后进行测试:
mysql> source /tmp/monday.sql;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| estore |
| mydb |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql> use mydb;
Database changed
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| student |
+----------------+
1 row in set (0.00 sec)
mysql> select * from student;
+------+---------+
| sid | sname |
+------+---------+
| 1 | wadeson |
| 2 | jsonhc |
+------+---------+
2 rows in set (0.00 sec)
注意:每一次进行备份的时候,同时保存备份时刻的二进制日志信息
查看此时的二进制:
[root@wadeson ~]# mysql -e "show master status\G"|grep File|awk -F": " '{print $2}'
mysql-bin.000004
[root@wadeson ~]# mysql -e "show master status\G"|grep Position|awk -F": " '{print $2}'
在mysql5.6版本时候,执行mysql有关密码的脚本时,都会提醒:
[root@wadeson scripts]# sh bakcup_mysql.sh
Warning: Using a password on the command line interface can be insecure.
解决办法:
[root@wadeson ~]# mysql_config_editor set --login-path=root --host=localhost --user=root --password
Enter password: 这里输入root的密码
[root@wadeson ~]# mysql_config_editor print --all 打印已经设置的
[local]
user = username
password = *****
host = localhost
[root]
user = root
password = *****
host = localhost
由于这里使用的是root夫人用户执行mysqldump脚本,如果用其他的用户,上述命令修改对应的地方就行
[root@wadeson scripts]# mysql --login-path=root -e "show master status;"
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
然后在外面执行语句就不会有提醒了
现在执行脚本:完全备份
#!/bin/bash
MYSQL_CMD="/usr/local/mysql/bin/mysql"
MYSQLDUMP="/usr/local/mysql/bin/mysqldump"
DATE=`date +%F`
# backup mysql
${MYSQLDUMP} --login-path=root --all-databases --flush-logs --lock-all-tables --master-data=2|gzip > /backup/${DATE}.sql.gz
# save mysql-bin log
binlog=`${MYSQL_CMD} --login-path=root -e "show master status\G"|grep File|awk -F": " '{print $2}'`
pos=`${MYSQL_CMD} --login-path=root -e "show master status\G"|grep Position|awk -F": " '{print $2}'`
echo "$binlog" >> /backup/binlog/${DATE}.log
echo "$pos" >> /backup/binlog/${DATE}.log
执行完完全备份后,将二进制信息保存到一个日志文件中
增量备份脚本,将上面保存的二进制信息的log文件修改为23号,然后备份今天24号的增量
每一次完全备份后,都会刷新一下二进制日志,将此时的二进制信息写入到一个日志文件中,方便后面增量备份使用
执行得到的文件和binlog日志信息:进行增量备份
将上一次的binlog日志信息和这一次的binlog日志信息做对比
#!/bin/bash
MYSQL_CMD="/usr/local/mysql/bin/mysql"
MYSQLBINLOG="/usr/local/mysql/bin/mysqlbinlog"
DATE=`date +%F`
OLDDATE=`date +%F -d '-1 day'`
# get mysql-bin and position
binlog=`${MYSQL_CMD} --login-path=root -e "show master status\G"|grep File|awk -F": " '{print $2}'`
pos=`${MYSQL_CMD} --login-path=root -e "show master status\G"|grep Position|awk -F": " '{print $2}'`
old_binlog=`cat /backup/binlog/${OLDDATE}.log|sed -n '1p'`
old_pos=`cat /backup/binlog/${OLDDATE}.log|sed -n '2p'`
echo "$binlog" >> /backup/binlog/${DATE}.log
echo "$pos" >> /backup/binlog/${DATE}.log
# backup mysql
if [ $binlog = ${old_binlog} ];then
${MYSQLBINLOG} /data/mysql/${binlog} --start-position=${old_pos} --stop-position=$pos > /backup/${DATE}.sql
else
${MYSQLBINLOG} /data/mysql/${old_binlog} /data/mysql/${binlog} --start-position=${old_pos} --stop-position=$pos > /backup/${DATE}.sql
fi
[root@wadeson backup]# cat binlog/2017-08-23.log
mysql-bin.000010
120
[root@wadeson backup]# cat binlog/2017-08-24.log
mysql-bin.000010
568
- mysql5.7备份
一.备份准备&备份测试 1.备份目录准备 #mysql专用目录 mkdir /mysql #mysql备份目录 mkdir /mysql/backup #mysql备份脚本 mkdir /my ...
- Backup &recovery备份和还原
实践版本:MySQL5.7 备份类型(backup type)物理和逻辑备份(Physical Versus Logical Backup) 物理备份是指直接复制存储数据库内容的目录和文 ...
- java文件同步性能测试
2003同步速度
- MySQL 5.1.73升级为MySQL 5.5.35详解
一.前言 二.概述 三.安装MySQL 5.1.73 四.升级为MySQL 5.5.35 五.总结 注,测试环境 CentOS 6.4 x86_64,MySQL 版本(5.1.73.5.5.35)目前 ...
- MySql 主辅-一主多辅
MySql 主辅-一主多辅mysql tar源码包安装 骤及过程,以供参考 系统是centos6.x .注意:此安装是默认CentOS下已经安装了最新工具包,比如GNU make, GCC, Perl ...
- MySQL升级指南
一 .MySQL升级 1.官方升级策略 注意 升级过程中必须使用具有管理权限的MySQL帐户来执行SQL语句. 1.升级方法 逻辑升级: 涉及使用 mysqldump从旧的MySQL版本导出现有数据 ...
- MySQL5.6下使用xtrabackup部分备份恢复到MySQL5.7
现有需求:需要备份MySQL5.6环境下的部分表到MySQL5.7环境下并进行恢复 通过xtrabackup 实现部分备份有三种方式: 参考链接:http://blog.csdn.net/zhu197 ...
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复
centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复 有时候我们会碰到这样的业务场景: 1.将大的数据库恢复到本地进行业务测试 ...
- CENTOS6.6下mysql5.7.11的percona-xtrabackup安装与备份
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn Xtrabackup有两个主要的工具:xtrabackup.inno ...
随机推荐
- 《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
原创文章,欢迎转载.转载请注明:关东升的博客 MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,它最早出现在Smalltalk语言中.现在,很多计算 ...
- Jsp 公用标签库
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix=" ...
- HTTP Transaction Delays
w客户端.服务器超载 HTTP The Definitive Guide 与建立TCP连接以及传输请求和相应报文的时间相比,事务处理的时间是很短的.除非客户端或服务器超载或正在处理复杂的动态资源,否则 ...
- java中 synchronized 的使用,确保异步执行某一段代码。
最近看了个有关访问网络url和下载的例子,里面有几个synchronized的地方,系统学习下,以下内容很重要,记下来. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一 ...
- Django系列
1.Django框架 2.Django restframework 其他 django之contenttype
- ISO C++标准委员会不是一个一般意义上权力机构,基本上愿意交会费,愿意自己出时间,出酒店机票,出提案,就可以申请加入。
ISO C++标准委员会不是一个一般意义上权力机构,基本上愿意交会费,愿意自己出时间,出酒店机票,出提案,每年全世界参加会议被专家巨细靡遗地评头论足,就可以申请加入. 所以参加标准委员会背景各异,有人 ...
- (3.10)常用知识-T-SQL优化
关键字:SQL优化 总结: 1.书写问题 2.表连接方式 3.索引的抉择 4.执行计划之参数嗅探,使用提示强制执行计划 5.子查询与表连接的效率 6.临时表.CTE.表变量的选择 7.常用sp与sel ...
- 前端 javascript 数据类型 数组 列表
javascript数组相当于python的列表 创建列表 a = [1,2,3,4]; [1, 2, 3, 4] 获取列表长度 a = [1,2,3,4]; [1, 2, 3, 4] a.lengt ...
- 图书源代码下载: Modern Differential Geometry of CURVES and SURFACES with Mathematica
http://alpha01.dm.unito.it/personalpages/abbena/gray/ Contents 1. Curves in the Plane | 2. Famou ...
- 19.Eclipse 修改默认的keystore签名文件
Android开发中apk运行都需要签名,就算连接手机直接运行调试,apk都有签名,开发工具会有默认的debug_keyStore Eclipse ADT调试运行使用的是临时生成的Debug专用证书, ...