美文网首页
mysql热备之mysqldump与xtrabackup

mysql热备之mysqldump与xtrabackup

作者: 华龙007 | 来源:发表于2018-05-03 16:57 被阅读0次

用mysqldump热备并恢复数据

#安装好mysql数据库.环境配置如下
]# vim /usr/local/mysql/etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
symbolic-links=0
explicit_defaults_for_timestamp=true
log_bin=master-log
server-id=1
[mysqld_safe]
log-error=/usr/local/mysql/logs/error.log
pid-file=/var/run/mysql/mysql.pid
#开始mysqldump热备
[root@node4 ~]# mysqldump -uroot -p112233 --single-transaction -R -E --triggers --master-data=2
--flush-logs --all-databases > /root/alldb-fullback-$(date +%F).sql
mysql> SHOW MASTER LOGS;    #查看二进制日志初始大小,0008 154
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| master-log.000001 |       177 |
| master-log.000002 |       202 |
| master-log.000003 |       671 |
| master-log.000004 |       177 |
| master-log.000005 |       202 |
| master-log.000006 |       202 |
| master-log.000007 |       686 |
| master-log.000008 |       154 |
+-------------------+-----------+
mysql> use hidb;    #删除两行
mysql> DELETE FROM students WHERE id=10;
mysql> DELETE FROM students WHERE id=20;
mysql> use mydb;    #删除mydb数据库tbll表
mysql> DROP TABLE tbll;
mysql> SHOW MASTER LOGS;    #继续查看二进制日志,增大到0008 889
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| master-log.000001 |       177 |
| master-log.000002 |       202 |
| master-log.000003 |       671 |
| master-log.000004 |       177 |
| master-log.000005 |       202 |
| master-log.000006 |       202 |
| master-log.000007 |       686 |
| master-log.000008 |       889 |
+-------------------+-----------+

[root@node4 ~]# less alldb-fullback-2018-04-22.sql   
 #查看之前备份的二进制日志,最后位置是0008 154
-- CHANGE MASTER TO MASTER_LOG_FILE='master-log.000008', MASTER_LOG_POS=154;
[root@node4 ~]# cp /data/mysql/master-log.000008 /root/   
 #拷贝0008二进制日志文件

[root@node4 ~]# systemctl stop mysqld;    
#停止mysql服务,并删除/data/mysql下所有数据库数据
[root@node4 ~]# cd /data/mysql/
[root@node4 mysql]# rm -rf ./*
###############
[root@node4 mysql]# cd /usr/local/mysql
#如果启动失败,到mysql安装目录再编译一次程序,就能正常启动了
[root@node4 mysql]# mysqld --initialize-insecure --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
###############
[root@node4 mysql]# systemctl start mysqld;    #重新启动数据库
[root@node4 mysql]# ls
#被删除的空文件中自动生成了一些文件,我们现在来恢复数据库,1.恢复数据库备份文件,2.二进制日志文件转成脚本运行
auto.cnf  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  ibtmp1  master-log.000001  master-log.000002  master-log.index  mysql  node4.magedu.com.pid  performance_schema  sys

[root@node4 ~]# cp alldb-fullback-2018-04-22.sql /tmp
#进入备份的文件夹拷贝文件到临时目录
[root@node4 ~]# mysqlbinlog master-log.000008 > /tmp/binlog.sql
#二进制日志生成脚本
mysql> SET @@session.sql_log_bin=OFF;
#登录数据库关闭二进制日志,不需记录恢复的过程
mysql> \. /tmp/alldb-fullback-2018-04-22.sql    #用备份恢复数据
mysql> USE hidb;    #查看刚刚删除两行数据的表,两行数据都在
mysql> SELECT * FROM students;
mysql> \. /tmp/binlog.sql    #读取二进制日志生成的脚本
mysql> use hidb;
mysql> SELECT * FROM students;    #在查看,两行数据已不再,数据库恢复成功
#################
数据库恢复成功后,首先要做的事是全量备份,并且自己上网找自动热备脚本复现;

用xtrabackup热备并恢复数据

#安装好mysql数据库.环境配置如下
]# vim /usr/local/mysql/etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
symbolic-links=0
explicit_defaults_for_timestamp=true
log_bin=master-log
server-id=1
[mysqld_safe]
log-error=/usr/local/mysql/logs/error.log
pid-file=/var/run/mysql/mysql.pid
#开始xtrabackup热备
[root@localhost ~]# yum install ./percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm
# 安装xtrabackup
[root@localhost ~]# innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --user=root -p112233 -Hlocalhost --socket=/tmp/mysql.sock /data/backup/
xtrabackup: Transaction log of lsn (2535718) to (2535727) was copied.
180503 02:23:29 completed OK!
#用indobackupex做全量备份,因数据库安装是自定义的目录,所以命令中带上目录
[root@localhost backup]# ll  #查看备份文件名
total 0
drwxr-x---. 5 root root 223 May  3 03:10 2018-05-03_03-10-29

mysql> CREATE DATABASE mydb;  #创建数据库,创建表,添加数据
mysql> use mydb;
mysql> CREATE TABLE tbl1(id INT,Name CHAR(30));
mysql> INSERT INTO tbl1 VALUES (2,'jerry');
mysql> INSERT INTO tbl1 VALUES (3,'lsh');

[root@localhost ~]# innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --user=root -p112233 -Hlocalhost --socket=/tmp/mysql.sock --incremental /data/backup/ --incremental-basedir=/data/backup/2018-05-03_03-10-29/
xtrabackup: Transaction log of lsn (2543740) to (2543749) was copied.
180503 03:17:14 completed OK!
#在全量备份的基础上制做增量备份
[root@localhost backup]# ll  #有两个备份,一个全量备份,一个增量备份
total 8
drwxr-x---. 5 root root  223 May  3 03:10 2018-05-03_03-10-29
drwxr-x---. 6 root root  261 May  3 03:17 2018-05-03_03-17-12
[root@localhost ~]# mysql -uroot -p112233 < hellodb.sql 
#往数据库中导入数据
mysql> SHOW DATABASES;  #导入成功
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
[root@localhost ~]# innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --user=root -p112233 -Hlocalhost --socket=/tmp/mysql.sock --incremental /data/backup/ --incremental-basedir=/data/backup/2018-05-03_03-17-12/
#针对第一个增量备份制作第二个增量备份
[root@localhost backup]# ll  #三个备份,一个全量,两个增量
total 0
drwxr-x---. 5 root root 223 May  3 03:10 2018-05-03_03-10-29
drwxr-x---. 6 root root 261 May  3 03:17 2018-05-03_03-17-12
drwxr-x---. 7 root root 276 May  3 03:31 2018-05-03_03-31-41
mysql> CREATE DATABASE lsh;
mysql> use lsh
mysql> CREATE TABLE a1(id INT,Name CHAR(30));
#此时在创建新数据库和表
[root@localhost 2018-05-03_03-31-41]# less xtrabackup_binlog_info 
master-log.000001       11058
#在二进制日志中查看第二次增量备份到哪个位置
[root@localhost mysql]# mysqlbinlog -j 11058 master-log.000001 > /data/backup/binlog.sql
#取出第二次增量备份之后的二进制日志,生成脚本。
[root@localhost backup]# ll  #三个备份,一个二进制脚本
total 4
drwxr-x---. 5 root root  223 May  3 03:10 2018-05-03_03-10-29
drwxr-x---. 6 root root  261 May  3 03:17 2018-05-03_03-17-12
drwxr-x---. 7 root root  276 May  3 03:31 2018-05-03_03-31-41
-rw-r--r--. 1 root root 1974 May  3 03:51 binlog.sql
[root@localhost backup]# scp -r 2018-05-03_03-10-29/ 2018-05-03_03-17-12/ 2018-05-03_03-31-41/ binlog.sql root@192.168.3.107:/data/backup
#把备份都拷贝到要恢复数据的节点107

xtrabackup热备之恢复数据

#节点107事先已经安装好数据库
[root@localhost mysql]# systemctl stop mysql
[root@localhost mysql]# rm -rf ./*
[root@localhost ~]# yum install ./percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm
#安装上xtrabackup工具来合并备份,恢复数据

[root@localhost backup]# innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --user=root -p112233 --apply-log --redo-only 2018-05-03_03-10-29/
#先把全量备份合并,提交事务不回滚,带上--redo-only参数是不回滚的意思
[root@localhost backup]# innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --user=root -p112233 --apply-log --redo-only 2018-05-03_03-10-29/ --incremental-dir=2018-05-03_03-17-12/
#再合并第一个增量备份,只提交不回滚
[root@localhost backup]# innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --user=root -p112233 --apply-log --redo-only 2018-05-03_03-10-29/ --incremental-dir=2018-05-03_03-31-41/
#合并第二个增量,只提交不回滚
[root@localhost backup]# innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --user=root -p112233 --apply-log 2018-05-03_03-10-29/
#最后再次合并全量备份,提交事务并且回滚,合并最后一个备份时,要进行回滚操作。
[root@localhost backup]# innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --user=root -p112233 --copy-back 2018-05-03_03-10-29/
#最后一步恢复数据库
[root@localhost mysql]# chown -R mysql.mysql /data/mysql/*
#更改数据库数据文件权限
[root@localhost backup]# systemctl start mysql
[root@localhost backup]# cp binlog.sql /tmp
#把二进制日志备份的脚本拷贝到临时目录下
mysql> \. /tmp/binlog.sql
#运行脚本恢复数据
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| lsh                |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
#用xtrabackup热备数据并成功恢复

相关文章

  • mysql热备之mysqldump与xtrabackup

    用mysqldump热备并恢复数据 用xtrabackup热备并恢复数据 xtrabackup热备之恢复数据

  • MySQL 物理备份: Innobackupex 和 xtrab

    MySQL 物理备份: Innobackupex 和 xtrabackup(热备) Percona XtraBac...

  • Xtrabackup 介绍

    Xtrabackup 介绍: Xtrabackup是Percona团队开发的用于MySQL数据库物理热备份的开源备...

  • MySQL备份之mysqldump与xtrabackup

    前言: 备份的种类:逻辑备份(mysqldump),物理备份(xtrabackup)。对于数据量小的库可以选择逻辑...

  • MySQL物理热备工具xtrabackup

    简介: mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的数据库而...

  • 【MySQL】xtrabackup安装使用

    前言:说到MySQL备份,主要采用的方法无非就是mysqldump/mydumper以及我们今天要说的热备利器xt...

  • Mysqldump备份数据库

    常用数据库备份工具:mysqldump:mysql工具包自带(数据库比较小)xtrabackup:比较好的备份工具...

  • MySQL 热备份之xtrabackup

    前言: 对于公司企业来说,数据丢失极有可能造成毁灭性的伤害,所以数据备份保存并且能够随时能进行恢复使用,对企业来说...

  • Mysql备份

    1) 使用mysqldump备份 2) 使用Xtrabackup备份,恢复

  • MySQL备份恢复

    1.生产中MySQL备份恢复的形式2.基于mysqldump备份及原理3.基于Xtrabackup备份及原理4.表...

网友评论

      本文标题:mysql热备之mysqldump与xtrabackup

      本文链接:https://www.haomeiwen.com/subject/cwwkrftx.html