用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热备数据并成功恢复
网友评论