二 数据库的备份与恢复

一 数据库的备份

1 普通备份
MySQL -uroot -p  数据库名.表名  < 路径可自定义
[root@es1 ~]# mysqldump -uroot -p  haha < /root/haha.sql
2 完全备份
 MySQL -uroot -p  --all-databases  > 路径可自定义  (可备份所有库)
[root@es1 ~]# mysqldump -uroot -p --all-databases > /root/alldb.sql
3 同时备份指定的多个库
 MySQL -uroot -p  -B  库1  库2  > 路径可自定义  (可备份所有库)
[root@es1 ~]# mysqldump -uroot -p -B mysql haha   > /root/haha+mysql.sql

 

二 使用binlog日志

binlog日志的介绍

转自https://www.cnblogs.com/kevingrace/p/6065088.html

一、binlog日志介绍
1. 什么是binlog
binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。

2. binlog作用
因为有了数据更新的binlog,所以可以用于实时备份,与master/slave主从复制结合。

3. binlog有关参数
log_bin
设置此参数表示启用binlog功能,并指定路径名称
log_bin_index
设置此参数是指定二进制索引文件的路径与名称
binlog_do_db
此参数表示只记录指定数据库的二进制日志
binlog_ignore_db
此参数表示不记录指定的数据库的二进制日志
max_binlog_cache_size
此参数表示binlog使用的内存最大的尺寸
binlog_cache_size
此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。
binlog_cache_use:使用二进制日志缓存的事务数量
binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量

max_binlog_size
Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束
sync_binlog
这个参数直接影响mysql的性能和完整性
sync_binlog=0
当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘 同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。
sync_binlog=n,在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。
Mysql中默认设置sync_binlog=0,即不作任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统绷Crash,在文件系统缓存中的所有Binlog信息都会丢失

1 修改配置文件启用binlog日志

[root@es1 ~]# vim /etc/my.cnf

[mysqld]

log-bin=mysql-bin    //启用二进制日志,并指定前缀
server_id=1
binglog_format=STATEMENT    ////在 Mysql5.7 中,binlog 日志格式默
认为 ROW,但它不记录 sql 语句上下文相关信息。需要将 binlog 日志格式修改为 STATEMENT

[root@es1 ~]# systemctl restart mysqld  #重启数据库

查看binlog日志文件

[root@es1 ~]# mysqlbinlog  --no-defaults /var/lib/mysql/mysql-bin.000001  

数据恢复(按日志名恢复)

#mysqlbinlog /logdir/plj.000001 | mysql -uroot -p123456

 数据恢复(按时间点)

[root@dbsvr1 ~]# mysqlbinlog \
 --start-datetime="190419 19:55:47" \   #开始时间点
 --stop-datetime="190419 20:06:39" \   # 结束时间点
 /var/lib/mysql/mysql-bin.000002 | mysql -u root -p

pos 点(偏移量)恢复

#mysqlbinlog --start-position= 数 字 1 --stop-position= 数 字 2 /logdir/plj.000001 | mysql -uroot -p123456

 三 XtraBackup 备分工具

1安装XtraBackup 备分工具

1 )查看软件包的描述信息

[root@es1 ~]# rpm -qpi percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm   查看软件包的描述信息

2 )安装依赖安装依赖包 perl-DBD-MySQL perl-Digest-MD5 libev 其中libev可在网上去下载

[root@es1 ~]# yum -y install perl-DBD-MySQL perl-Digest-MD5
[root@es1 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm   此包需要去网上找
[root@es1 ~]# rpm -ivh percona-xtrabackup-*.rpm

警告:percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
错误:依赖检测失败:
rsync 被 percona-xtrabackup-24-2.4.7-1.el7.x86_64 需要

 上面提示安装错误是缺少rsync软件依赖

[root@es1 ~]# yum -y install rsync  
[root@es1 ~]# rpm -ivh percona-xtrabackup-*.rpm
警告:percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:percona-xtrabackup-24-2.4.7-1.el7################################# [100%]

3)确认安装的主要程序/脚本  显示以下内容就表示成功了

[root@es1 ~]# rpm -ql percona-xtrabackup-24
/usr/bin/innobackupex
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/share/doc/percona-xtrabackup-24-2.4.7
/usr/share/doc/percona-xtrabackup-24-2.4.7/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz

2:使用 XtraBackup 执行数据库备份

如果需要查看XtraBackup的用法 

--host 主机名
--port 3306
--user 用户名
--password 密码
--databases="库名"
--databases="库 1 库 2"
--databases="库.表"
--no-timestamp 不用日期命名备份文件存储的子目录,使用备份的数据库名做备份目录名
--no-timestmap 不使用日期命名备份目
--redo-only      日志回滚合并(最后一次增量备份日志回滚不需要此项)--apply-log-only
--apply-log      准备还原(回滚日志)
--copy-back     恢复数据
--incremental 目录名      增量备份
--incremental--basedir=目录名    增量备份时指定上一次备份数据存储的目录名
--incremental-dir=目录名    准备恢复数据时,指定增量备份数据存储目录名
--export     导出表信息
import  导入表空间

  

innobackupex  --help可以查到详细用法,当然全英文,可用谷歌或百度翻译

完全备份   innobackupex --user=用户--password=密码   --databases=“库名” 备份路径

[root@es1 ~]# innobackupex --user=root --password=123456 /backup/mysql
[root@es1 ~]# ls /backup/mysql/2019-04-20_17-58-50/   #这就可以查询到你所有的备份内容了
backup-my.cnf ib_buffer_pool mysql sys xtrabackup_binlog_info xtrabackup_info
haha ibdata1 performance_schema xixihaha xtrabackup_checkpoints xtrabackup_logfile

增量备份

然后在数据库中添加一条记录在做一次备份
语法:innobackupex --user=用户 --password=密码   --databases=“库名”  --incremental 指定增量备份目录名 --incremental-basedir=/完全备份目录/  --no-timestamp
增量备份就上述公式可根据需求套用一些参数,第一次增量第二次增量没有去呗,就是需要指定不同的备份目录

 

数据恢复(恢复完全备份)

innobackupex  --user 用户名  --password  密码   --databases=“库名”   --apply-log   --redo-only  恢复完全备份的路径

数据恢复(恢复增量)

innobackupex  --user 用户名  --password  密码   --databases=“库名”   --apply-log   --redo-only  恢复完全备份的路径    --incremental-dir=“备份的增量目录”

导出信息表

innobackupex  --user 用户名  --password  密码   --databases=“库名”  --apply-log --export  /导出目录’

恢复某个表

首先要拷贝表信息文件到数据库文件存储目录 
然后再给数据库文件目录授权
mysql>system   chown  mysql:mysql    /var/lib/myql
mysql>alter table 库名.表名  import tablespace  导入表空间

 

posted @ 2019-04-19 20:46  传盛  阅读(299)  评论(0编辑  收藏  举报