mysql数据备份与恢复_MySQL数据备份与恢复
常见的MySQL管工具
mysql 命令行 跨平台 MySQL官方bundle包自带
MySQL-Workbench 图形 跨平台 MySQL官方提供
MySQL-Front 图形 Windows 开源,轻量级客户端软件
phpMyAdmin 浏览器 跨平台 开源,需LAMP平台
Navicat 图形 Windows 专业、功能强大、商业版
PhpMyAdmin部署思路:
1.安装httpd、mysql、php-mysql及相关包
2.启动httpd服务程序
3.解压phpMyAdmin包,部署到网站目录
4.配置config.inc.php,指定MySQL主机地址
5.创建授权用户
6.浏览器访问、登录使用
yum -y install httpd php php-mysql
tar -zxf phpMyAdmin-2.11.11-all-languages.tar.gz -C /var/www/html/
cd /var/www/html/
mv phpMyAdmin-2.11.11-all-languages/ phpmyadmin
chown -R apache:apache phpmyadmin/
cp phpmyadmin/config.sample.inc.php phpmysdmin/config.inc.php
vim /var/www/html/phpmyadmin/config.inc.php
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['blowfish_secret'] = '123456';
mysql>create database bbsdb;
mysql>grant all on bbsdb.* to admin@'localhost' identified by '654321';
systemclt start httpd
firefox http://localhost/phpmyadmin
MySQL数据备份与恢复
数据备份方式:
1.物理备份,冷备份:cp 、 tar 、 ....
例:物理备份与恢复
备份操作格式:
cp -rp /var/lib/mysql/数据库 备份目录/文件名
tar -zcvf xxx.tar.gz /var/lib/mysql/数据库/*
恢复操作格式:
cp -rp 备份目录/文件名 /var/lib/mysql/(默认存储路径)
tar -zxvf xxx.tar.gz -C /var/lib/mysql/数据库名/
2.逻辑备份,mysqldump 、mysql
原理:执行备份时,根据已有的库和表生成对应SQL命令,把生成的SQL命令存储到指定的备份文件里。
备份策略:
完全备份:备份所有数据(一台服务器,一个库,一张表)
增量备份:备份自上一次备份(包含完全备份、差异备份、增量备份)之后有变化的数据。
差异备份:备份自上一次完全备份之后有变化的数据。
例:逻辑备份及恢复
完全备份操作格式:
mysqldump -u用户名 -p密码 源库名 > 路径/xxx.sql
完全备份的恢复操作格式:
mysql -u用户名 -p密码 目标库名 < 路径/xxx.sql
库名的表示方式:
--all-databases 所有库
库名 指定的单个库
库名.表名 指定库的指定表
-B 库名1 库名2 .. 备份多个库
注意事项:
无论备份还是恢复,都要验证用户及权限。
例:
将所有的库备份为mysql-all.sql文件
mysqldump -u root -p 123456 --all-databases > alldb.sql
将userdb库备份为userdb.sql文件
mysqldump -u root -p 123456 userdb > userdb.sql
将备份文件userdb.sql恢复到userdb3库
mysql>create databases userdb3;
mysql -u roo -p 123456 userdb3 < userdb.sql
实时增量备份
binlog日志
类型:二进制日志,用途:记录所有更改数据的操作,
配置:
log_bin[=dir/name]
server_id=数字
max_binlog_size=数字m
启用binlog日志
采用binlog日志的好处
1.记录除查询之外的所有SQL命令。
2.用于数据恢复。
3.配置mysql主从同步的必要条件。
例:
vim /etc/my.cnf
[mysqld]
....
log_bin //启用binlog日志
server_id=100 //指定id值,id号不能重复(1-255)范围。
systemctl restart mysqld
binlog相关文件
默认日志文件名:
主机名-bin.index //记录已有的binlog日志文件名
主机名-bin.000001 //第1个二进制日志(达到500M存去下一条纪录)
主机名-bin.000002 //第2份二进制日志
....
手动生成新的日志文件
1.重启mysql服务
2.执行SQL操作 mysql > flush logs;(flush logs,切换到下一个binlog日志文件)
3.mysqldump --flush-logs
4.mysql -uroot -p密码 -e 'flush logs'
清理binlog日志
删除早于指定版本的binlog日志:
purge master logs to 'binlog文件名';
删除所有binlog日志,重建新日志:
reset master;
例:
mysql>purge master logs to 'mysql-bin.000003';
mysql>reset master;
分析binlog日志
查看日志当前记录格式:
mysql>show variables like 'binlog_format';
修改日志记录格式:
vim /etc/my.cnf
[mysqld]
....
binlog_format="mixed" 设置日志文件的记录格式
systemctl restart mysqld
三种记录格式:
1.statement: 每一条修改数据的sql命令都会记录在binlog日志中。
2.row: 不记录sql语句上下文相关信息,仅保存哪条记录被修改。
3.mixed: 是以上两种格式的混合使用。
binlog日志文件记录sql命令的方式:
1.时间点
2.pos点(偏移量)
查看有哪些bilog日志:
mysql>show master logs;
使用mysqlbinlog工具
格式:mysqlbinlog [选项] binlog日志文件名
常用选项:
1.时间点:
--start-datetime="yyyy-mm-dd hh:mm:ss"
--stop-datetime="yyyy-mm-dd hh:mm:ss"
2.pos点:
--start-position=数字
--stop-position=数字
例:
查看从2017年1月2日15:30开始的更改操作
mysqlbinlob --start-datetime="2017-01-01 15:30" /var/lib/mysql-bin.000001
....
at 318
解释:
server id 1 : 数据库主机的服务号;
end_log_pos 796 : sql结束时的pos节点
thread_id=11 : 线程号
binlog恢复数据
方式一:
基本思路:
1.使用mysqlbinlog提取历史SQL操作
2.通过管道交给mysql命令执行
例:
恢复第1份binlog日志的部分信息
mysqlbinlog --base64-output=decode-rows -v /var/lib/mysql/mysql-bin.000001
mysqlbinlog --start-position=296 --stop-position=1073 /var/lib/mysql-bin.000001 |mysql -uroot -p123456
方式二:
命令格式:
mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
参数解释:
IN 'log_name' :指定要查询的binlog文件名(不指定就是第一个binlog文件)
FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT [offset,] :偏移量(不指定就是0)
row_count :查询总条数(不指定就是所有行)
例:
mysql>show binlog events in 'mysql-bin.000002'\G;
MySQL备份工具
物理备份缺点:
1.跨平台性差
2.备份时间长、冗余备份、浪费存储空间
mysqldump备份缺点:
1.效率较低,备份和还原速度慢。
2.备份过程中,数据插入和更新操作会被挂起。
XtraBackup备份工具:
1.备份过程中不锁库表,适合生产环境。
2.由专业组织Percona提供(改进MySQL分支)。
主要含两个组件:
1.xtrabackup:C程序,支持InnoDB/XtraDB
2.innobackupex:以Perl脚本封装xtrabackup,还支持MyISAM
支持事务和事务回滚,要求存储引擎为innodb
事务日志文件:
ibdata
LSN 日志序列号
ib_logfile0 //SQL命令
ib_loggile1
....
安装XtraBackup
yum -y install perl-Digest-MD5.x86_64 rsync perl-DBD-MySQL
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
rpm -ql percona-xtrabackup-24
/usr/bin/innobackupex //备份innodb、xtrdb、myisam引擎的表
/usr/bin/xbcloud
....
/usr/bin/xtrabackup //备份innodb、xtrdb引擎的表
....
innobackupex基本选项
--host //主机名
--user //用户名
--port //端口号
--password //密码
--databases //数据库名(单个库:databases="库名",多个库:databases="库1 库2",单个表:databases="库.表")
--no-timestamp //不用日期命名备份文件存储的子目录名
--redo-only //日志回滚合并(最后一次增量备份日志回滚不需要此选项)
--apply-log //准备还原(回滚日志)
--copy-back //恢复数据
--incremental 目录名 //增量备份
--incremental-basedir=目录名 //增量备份时,指定上一次备份数据存储的目录名
--incremental-dir=目录名 //准备恢复数据时,指定增量备份数据存储的目录名
--export //导出表信息
import //导出表空间
XtraBackup完全备份
格式:innobackupex -user 用户名 --password 密码 --databases="系统库列表和存储数据库" 备份目录名 --no-timestamp
例:将所有库完全备份到 /backup
innobackupex --user root --password 123456 /backup --no-timestamp
XtraBackup完全恢复
完全恢复时要求空的库目录
rm -rf /var/lib/mysql
mkdir /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
格式:innobackupex -user 用户名 --password 密码 --databases="系统库列表和存储数据库" --copy-back 备份目录名
例:恢复所有数据
innobackupex --apply-log /backup
innobackupex --copy-back /backup
XtraBackup增量备份
必须先有一次完全备份
格式:innobackupex --user 用户名 --password 密码 databases="系统库列表和存储数据库" --incremental 目录名 --incremental-basedir="完全备份目录名" -no-timestamp
例:完全备份到/allbak、第一次增量备份到/new1、第二次增量备份到/new2
cp -rp /var/lib/mysql/mysql /root/mysql.bak //备份授权库
innobackupex --user root --password 123456 --databases="gamedb" /fullbak --no-timestamp //完全备份
innobackupex --user root --password 123456 --databases="gamedb" --incremental /new1 --incremental-basedir="/fullbak" --no-timestamp //第一次增量备份
innobackupex --user root --password 123456 --databases="gamedb" --incremental /new2 --incremental-basedir="/new1" --no-timestamp //第二次增量备份
XtraBackup增量恢复
rm -rf /var/lib/mysql
mkdir /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
格式:
1.innobackupex --user 用户名 --password 密码 --databases="系统库列表和存储数据库" --apply-log --redo-only 完全备份目录名
2.innobackupex --user 用户名 --password 密码 --databases="系统库列表和存储数据库" --apply-log --redo-only 完全备份目录名 --incremental-dir=增量备份目录名
3.innobackupex --user 用户名 --psssword 密码 --databases="系统库列表和存储数据库" --copy-back 完全备份目录名
例:恢复第一次增量备份到/new1、第二次增量备份到/new2的数据
rm -rf /var/lib/mysql
mkdir /var/lib/mysql
innobackupex --user root --password 123456 --databases="gamedb" --apply-log --redo-only /fullbak //恢复完全备份
innobackupex --user root --password 123456 --databases="gamedb" --apply-log --redo-only /fullbak --incremental-dir="/new1" //恢复增量
innobackupex --user root --password 123456 --databases="gamedb" --apply-log /fullbak --incremental-dir="new2" //恢复增量
innobackupex --user root --password 123456 --databases="gamedb" --copy-back /fullbak //拷贝文件
cp -r /root/mysql.bak /var/lib/mysql/mysql
chown -R mysql:mysql /var/lib/mysql
恢复完全备份文件中的单个表
格式:innobackupex innobackupex --user 用户名 --password 密码 --databases="系统库列表和存储数据库" --apply-log --export 完全备份目录名
例:完全备份数据库到/allbak目录
innobackupex --user root --password 123456 --databases="gamedb" /allbak --no-timestamp //完全备份
mysql>drop table gamedb.a;
innobackupex --user root --password 123456 --databases="gamedb" --apply-log --export /allbak //导出表信息
mysql>create table gamedb.a(id int); //创建表
mysql>alter table gamedb.a discard tablespace; //删除表空间
cp /allbak/gamedb/a.{ibd,cfg,exp} /var/lib/mysql/gamedb //拷贝表信息文件
chown mysql:mysql /var/lib/mysql/gamedb/a.* //修改所有者
mysql>alter table gamedb.a import tablespace; //导入表空间
mysql数据备份与恢复_MySQL数据备份与恢复相关推荐
- mysql 增量备份_MySQL增量备份与恢复(增量备份概述、特点,断点恢复实操)
一. MySQL 增量备份与恢复 使用 mysqldump 进行完全备份,备份的数据中有重复数据,备份时间与恢复时间过长.而增量备份就是自上一次备份之后增加或改变的内容. 1.1 增量备份的特点 增量 ...
- mysql导出数据 程序_MySQL数据导出与导入程序代码
Mysql Manual讲得很清楚.实现数据备份有两种方法,一是直接copy mysql data目录的数据文件.第二种就是mysqldmup. 第一方法,没什么可言,也就是写写脚本或是放置ftp上面 ...
- mysql decode语句_mysql数据灾难恢复方案
数据库备份:将数据库中存在的现有数据,进行存放成为副本数据,可以解决数据容灾,提高系统的高可用性和灾难恢复性,数据崩溃时,以最小代价重新恢复数据.数据备份的分类: 物理备份:指对数据库操作系统的物理文 ...
- mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)
SQL 包含以下 4部分:1数据定义语言(DDL):DROP.CREATE.ALTER 等语句.2数据操作语言(DML):INSERT(插入).UPDATE(修改).DELETE(删除)语句.3数据查 ...
- mysql数据库迁徙_mysql数据迁徙详解
数据迁徙是每个后端都会遇到的工作之一,本文介绍了一些常见的数据迁徙方法与工具 mysqldump:数据结构不变的数据迁徙 导出数据 mysqldump -u root -p DATABASE_NAME ...
- mysql数据库迁徙_Mysql数据迁徙方法工具解析
这篇文章主要介绍了mysql数据迁徙方法工具解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 数据迁徙是每个后端都会遇到的工作之一,本文介绍了一些 ...
- mysql插入性能_mysql 数据量大时插入和查询性能
现在mysql中有数据33.8w的数据,然后做查询和更新或插入操作,速度很慢,基本100条数据就要1.68s.好慢啊,我要测试一下,到底慢在哪?能不能提高点速度? 参考一篇博文:http://blog ...
- mysql行格式化_MySQL数据格式化语句
MySQL数据格式化语句 文件记录体格式 序号 域 名 长度 位 置 填写说明 1 记录体标记 www.2cto.com 2 1-2 填"50" 2 话单生成日期 8 3-10 Y ...
- 用mysql命令还原_mysql——数据还原——使用mysql命令还原
备份文件中通常包含create语句和insert语句,mysql命令可以执行备份文件中的create语句和insert语句: 通过create语句来创建数据库和表,通过insert语句来插入备份的数据 ...
最新文章
- 东大20春计算机应用基础在线作业1答案,东大20春学期《计算机应用基础》在线平时作业1答案...
- 美国滴滴打人上线,约架神器如何玩转暴力社区?
- Java黑皮书课后题第8章:*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点
- ZZULIOJ 1110: 最近共同祖先(函数专题)
- 线程池的参数及执行顺序
- redis desktop manager 集群_Redis Manager(2.0) —— Redis 运维利器
- 利用SQL SERVER 2008 的XML字段类型实现扩展属性
- adsl密码查看器,宽带密码查看器,无广告,绿色版
- 使用vue开发的网易云音乐播放器
- 12.SpringBoot集成微信公众号开发
- PPT的视频由于无编码解码器无法播放问题
- EZSP-UART 入门
- JavaEE初学之jsp+JavaBean实现页面简单计算器
- 谷歌扩展插件官方下载地址
- 解决 VUE 微信 IOS 路由跳转问题
- 通过WIFI信号跟踪三维人体姿态的新方法
- mysql -hlocalhost -uroot -p_MySQL数据库的操作(01)--- MySQL的安装以及与idea的连接
- 使用artisan命令创建控制器
- 无需代码即可训练和可视化口罩检测模型
- 开发者该如何抓住微信小游戏的风口?听Cocos创始人王哲详解(上篇)
热门文章
- 如何在log4j.properties文件中使用相对路径
- 让你的PHP4和PHP5共存
- java write int,void write(byte[] b, int off, int len)
- 对象 普通po转_厦门2020年转学怎么转?需要什么材料?你想知道的答案都在这!......
- 计算机与应用化学怎么投稿,计算机与应用化学杂志
- cdb内存 oracle,【CDB】怎样修改PDB的内存参数
- 图神经网络(一)图信号处理与图卷积神经网络(2)图信号与图的拉普拉斯矩阵
- 深度学习之卷积神经网络(1)什么是卷积
- 游戏开发需要具备哪些技术_短视频 SDK 开发 (一) 开发一款短视频 SDK 需要具备哪些知识?...
- 『设计模式』状态模式(不起花里胡哨的名字了)