二 数据库的备份与恢复
一 数据库的备份
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 导入表空间