文档章节

MySQL (二)

是江山
 是江山
发布于 2017/08/23 09:59
字数 2132
阅读 8
收藏 0
点赞 0
评论 0

#备份恢复

##备份指定库:

mysqldump -uroot -p123456 mysql > /tmp/mysqlbak.sql

##备份所有库:

mysqldump -uroot -p123456 -A > /tmp/mysql_all.sql

##恢复库

mysql -uroot -p123456 < /tmp/mysqlbak.sql

##备份指定表:

mysql -uroot -p123456 mysql user > /tmp/user.sql

##只备份表结构:

mysqldump -uroot -p123456 -d mysql > /tmp/mysql_tb.sql

##恢复表

mysql -uroot -p123456 mysql user < /tmp/user.sql

#innobackupex在线备份及恢复(全量和增量) ##简介

Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品。Xtrabackup由个部分组成:xtrabackup和innobackupex,其中xtrabackup工具用于备份innodb和 xtraDB引擎的表;而innobackupex工具用于备份myisam和innodb引擎的表,本文将介绍如何用innobackupex工具做全量和增量备份。

官网:http://www.percona.com/docs/wiki/percona-xtrabackup:start

##安装 声明:以下操作最好以mysql用户执行。 首先,通过wget下载源码tar包:

wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/source/percona-xtrabackup-2.1.5.tar.gz

安装依赖包:

yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel

解压缩tar:

tar -zxvf percona-xtrabackup-2.1.5.tar.gz
cd percona-xtrabackup-2.1.5

utils/build.sh脚本会根据指定的引擎版本,自动解压缩适当的MySQL源码包并进行编译,这是最简单的安装方式。当你在命令行下不带任何参数执行该脚本时,出现如下提示:

[mysql@epay100 ~/software/percona-xtrabackup-2.1.5 ]$ ./utils/build.sh
Build an xtrabackup binary against the specified InnoDB flavor.


Usage: build.sh CODEBASE
where CODEBASE can be one of the following values or aliases:
  innodb51         | plugin                build against InnoDB plugin in MySQL 5.1
  innodb55         | 5.5                   build against InnoDB in MySQL 5.5
  innodb56         | 5.6,xtradb56,         build against InnoDB in MySQL 5.6
                   | mariadb100
  xtradb51         | xtradb,mariadb51      build against Percona Server with XtraDB 5.1
                   | mariadb52,mariadb53
  xtradb55         | galera55,mariadb55    build against Percona Server with XtraDB 5.5

根据上面提示和你使用的存储引擎及版本,选择相应的参数即可。因为我用的是MySQL 5.6,所以执行如下语句安装:

./utils/build.sh innodb56

以上语句执行成功后,表示安装完成。最后,把生成的二进制文件拷贝到一个自定义目录下(本例中为/home/mysql/admin/bin/percona-xtrabackup-2.1.5),并把该目录放到环境变量PATH中。

cp ./innobackupex /home/mysql/admin/bin/percona-xtrabackup-2.1.5
cp ./src/xtrabackup_56 ./src/xbstream /home/mysql/admin/bin/percona-xtrabackup-2.1.5  

##全备及其恢复 ###全备: 执行如下语句进行全备:

innobackupex --defaults-file=/opt/mysql/my.cnf  --user=root --password=*** /backup/mysql/data

该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/backup/mysql/data),注意:如果不指定--defaults-file,默认值为/etc/my.cnf。 备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/backup/mysql/data/2013-10-29_09-05-25),在该目录下存放备份文件。

##恢复: 恢复之前,要先关闭数据库,并且删除数据文件和日志文件。

innobackupex --defaults-file=/opt/mysql/my.cnf --user=root --password=*** --use-memory=4G --apply-log /backup/mysql/data/2013-10-29_09-05-25
innobackupex --defaults-file=/opt/mysql/my.cnf --user=root --password=***  --copy-back /backup/mysql/data/2013-10-29_09-05-25

从什么可以看出,恢复分为两个步骤,第1步是apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录/backup/mysql/data/2013-10-29_09-05-25下的备份文件已经准备就绪。 第2步是copy-back,即把备份文件拷贝至原数据目录下。 恢复完成之后,一定要记得检查数据目录的所有者和权限是否正确。

###增量备份及其恢复 注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备。

###增量备份: 增量备份需要基于全备,先假设我们已经有了一个全备(/backup/mysql/data/2013-10-29_09-05-25),我们需要在该全备的基础上做增量备份。

innobackupex --defaults-file=/opt/mysql/my.cnf  --user=root --password=*** --incremental-basedir=/backup/mysql/data/2013-10-29_09-05-25 --incremental /backup/mysql/data

其中--incremental-basedir指向全备目录,--incremental指向增量备份的目录。 上面语句执行成功之后,会在--incremental执行的目录下创建一个时间戳子目录(本例中为:/backup/mysql/data/2013-10-29_09-52-37),在该目录下存放着增量备份的所有文件。 在备份目录下,有一个文件xtrabackup_checkpoints记录着备份信息,全备的信息如下:

backup_type = full-backuped
from_lsn = 0
to_lsn = 563759005914
last_lsn = 563759005914
基于该全备的增量备份的信息如下:
backup_type = incremental
from_lsn = 563759005914
to_lsn = 574765133284
last_lsn = 574765133284

从上面可以看出,增量备份的from_lsn正好等于全备的to_lsn。 那么,我们是否可以在增量备份的基础上再做增量备份呢?答案是肯定的,只要把--incremental-basedir执行上一次增量备份的目录即可,如下所示:

innobackupex --defaults-file=/opt/mysql/my.cnf  --user=root --password=*** --incremental-basedir=/backup/mysql/data/2013-10-29_09-52-37 --incremental /backup/mysql/data
它的xtrabackup_checkpoints记录着备份信息如下:
backup_type = incremental
from_lsn = 574765133284
to_lsn = 574770200380
last_lsn = 574770200950

可以看到,该增量备份的from_lsn是从上一次增量备份的to_lsn开始的。

##恢复:

增量备份的恢复比全备要复杂很多,第一步是在所有备份目录下重做已提交的日志,如:

innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

其中BASE-DIR是指全备目录,INCREMENTAL-DIR-1是指第一次的增量备份,INCREMENTAL-DIR-2是指第二次的增量备份,以此类推。 这里要注意的是:最后一步的增量备份并没有--redo-only选项!还有,可以使用--use_memory提高性能。 以上语句执行成功之后,最终数据在BASE-DIR(即全备目录)下。 第一步完成之后,我们开始第二步:回滚未完成的日志:

innobackupex --apply-log BASE-DIR

上面执行完之后,BASE-DIR里的备份文件已完全准备就绪,最后一步是拷贝:

innobackupex --copy-back BASE-DIR

同样地,拷贝结束之后,记得检查下数据目录的权限是否正确。

常见错误及解决方法 错误:

131028 17:45:57  innobackupex: Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup' (using password: NO).
innobackupex: Error: Failed to connect to MySQL server as DBD::mysql module is not installed at /home/mysql/admin/bin/percona-xtrabackup-2.1.5/innobackupex line 2913.

解决方法:

yum -y install perl-DBD-MySQL.x86_64

错误:

sh: xtrabackup_55: command not found
innobackupex: Error: no 'mysqld' group in MySQL options at /home/mysql/admin/bin/percona-xtrabackup-2.1.6/innobackupex line 4341.

解决方法:

cp xtrabackup_innodb55 xtrabackup_55

#实践 创建mysql用户

创建mysql用户:
mysql -uroot -p'123456'
Welcome to the MySQL monitor.
mysql> grant RELOAD, LOCK TABLES, REPLICATION CLIENT on *.* to 'bakuser'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.13 sec)
#该用户只需要有备份权限即可,所以在创建用户时只授予其部分权限
mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)
#刷新!
mysql> quit
Bye

备份

创建一个目录用于存放备份文件:

mkdir /data/backup

开始备份:

innobackupex --defaults-file=/etc/my.cnf --user=bakuser --password='123456' -S /tmp/mysql.sock /data/backup
##备份完成

说明:

  • -defaults-file:指定mysql的配置文件(该参数必须放在首位)
  • -user:指定用于备份的mysql用户
  • -password:mysql用户密码
  • -S:=socket,指定MySQL的socket文件(也可以使用-h,该参数非必须!)

查看备份文件:

[root@jiangshan]# cd /data/backup/ && ls
2017-08-23_08-49-22
[root@jiangshan]# # ls 2017-08-23_08-49-22/
backup-my.cnf  mysql               test                    xtrabackup_info
ibdata1        performance_schema  xtrabackup_checkpoints  xtrabackup_logfile
注: ibdata1为核心文件,其中存放的是:储存格式;INNODB类型数据状态下,ibdata用来储存文件的数据,而库名的文件夹里面的那些表文件只是结构而已。

恢复数据库

在恢复数据库之前需要先停止MySQL服务!

终止mysql服务:

[root@jiangshan]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!

恢复准备:

[root@jiangshan]# mv /data/mysql /data/mysql.bak
[root@jiangshan]# mkdir /data/mysql
[root@jiangshan]# chown mysql:mysql /data/mysql
#进行备份前将原/data/mysql中文件清空
#在此只为学习,所以只对该文件进行更名,然后重建该目录并更改权限

开始恢复:

匹配数据文件:

[root@jiangshan]# innobackupex --use-memory=256M --apply-log /data/backup/2017-08-23_08-49-22

说明: 进行数据库恢复时,先匹配用于恢复的数据文件。 --use-memory:指定执行数据库恢复操作时的运行内存(添加该选项的目的通过指定其运行内存来加快恢复速度,可不加该参数)。 --apply-log:指定要恢复的数据文件(来自备份文件)

恢复:

[root@jiangshan]# innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/2017-08-23_08-49-22/

至此,数据库恢复完成! 说明:

--copy-back:指定用于恢复的数据文件目录

#扩展 SQL语句教程

什么是事务?事务的特性有哪些?

根据binlog恢复指定时间段的数据

mysql字符集调整

使用xtrabackup备份innodb引擎的数据库

innobackupex 备份 Xtrabackup 增量备份

© 著作权归作者所有

共有 人打赏支持
是江山
粉丝 4
博文 44
码字总数 24060
作品 0
苏州
运维
ubuntu下mysql的一些相关常用命令

查看mysql状态,是否启动 sudo service mysql status 查看所有服务的状态: sudo service --status-all 启动mysql: 方式一:sudo /etc/init.d/mysql start 方式二:sudo start mysql 方式三:...

木子丰 ⋅ 2014/06/05 ⋅ 0

mysql常用脚本

一、启动MySQL服务 1、方式一 a、win+r:打开运行窗口 b、输入services.msc打开服务设置界面 c、找到MySQL的服务,启动或者停用 2、方式二 没测试通过 a、win+r:打开运行窗口 b、切换目录:...

Zero零_度 ⋅ 2015/08/19 ⋅ 0

centOs 6.x安装mysql-5.5.27

Remove old version yum remove mysql mysql-devel mysql-server mysql-libs - Download the needed packages from http://dev.mysql.com/downloads/mysql/#downloads Download URL varies d......

平衡的轨迹 ⋅ 02/27 ⋅ 0

mysqladmin: connect to server at ‘localhost’ failed 或没有生成mysql数据库实例

个人博客同步地址:www.imycloud.com mysql修改密码报错: #mysqladmin -uroot -p password 123456 ##因为是空密码“-p”后无需加旧密码,直接修改密码为:123456mysqladmin: connect to se...

tangwenjun ⋅ 2013/12/08 ⋅ 0

找回数据库密码

一、MySQL数据库忘记root密码 1.新装MYSQL 新装MYSQL默认搂ROOT密码为空 命令行:mysql -u root mysql mysql> update user set password=password('新密码') where user='root'; mysql> FLUS......

wdwnet ⋅ 2012/10/12 ⋅ 0

Access denied for user ''@'localhost' to database

提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'。前两天也出现过这个问题,网上找了一个比较流行的方法(见方法一),搞定了。今天又用这个试了试,...

Jerry- ⋅ 2015/05/05 ⋅ 0

Mysql导入导出数据库以及数据表

一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1、导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql /usr/local/mysql/bin/ mysqldump -u...

成越 ⋅ 2016/06/17 ⋅ 0

LAMP环境zabbix安装

LAMP编译安装 一、apache2.4x编译安装: (1.)apr编译安装: 1.所需软件包:apr-1.5.1.tar.gz; 2.安装依赖包: 3.编译安装: (2.)apr-util编译安装: 1.所需软件包:apr-util-1.5.4.tar....

MF在路上 ⋅ 2014/10/10 ⋅ 0

数据库的导入导出

一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1、导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql #/usr/local/mysql/bin/mysqldump -u...

charlesdong1989 ⋅ 2012/06/19 ⋅ 0

linux下mysql修改root密码

修改的用户都以root为列。一、拥有原来的myql的root的密码; 方法一:在mysql系统外,使用mysqladmin mysqladmin -u root -p password "test123" Enter password: 【输入原来的密码】 方法二...

jeffsui ⋅ 2015/01/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vuex学习

1、getters基本用法: 在store.js里面用const声明我们的getters属性。 const getters={ count:function (state) { return state.count +=100; }} export default new Vuex.S......

大美琴 ⋅ 34分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 46分钟前 ⋅ 0

G6 关系数据可视化图形库 简单使用

官网 https://antv.alipay.com/zh-cn/g6/1.x/index.html 效果 首先生成给定数目的小球,并设置随机的颜色 按照顺序,设置小球的角度以及坐标 设置定时器,每隔一定的时间修改小球的角度和坐标...

阿豪boy ⋅ 48分钟前 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 57分钟前 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

桥接设计模式

1、概述: 将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化 如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构 桥接模式将继承模式转化成关联关系,他降...

职业搬砖20年 ⋅ 今天 ⋅ 0

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 今天 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 今天 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部