mysql备份复制-2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql备份复制-2相关的知识,希望对你有一定的参考价值。

mysql简介-1
本篇将介绍备份恢复、主从、主主

4、mysql备份恢复

  mysql备份分为冷备和热备,使用冷备需要关闭服务器,在生产绝对不建议这么操作,热备又称为逻辑备份和裸文件备份,备份文件又可以分为全备和增量备份,逻辑备份对增量备份不是特别理想。

技术分享图片
技术分享图片

从这里开始我们准备两台机器: 系统Cenos7.4 mysql: 5.7

4.1、mysqldump备份操作

1、全备
备份: [[email protected] tmp]#  mysqldump -uroot -pxiong123 -A > 20180510.sql
恢复: [[email protected] tmp]#  mysql -uroot -pxiong123 < 20180510.sql

2、备份单个库
备份: [[email protected] tmp]# mysqldump -uroot -p extmail > extmail.20180510.sql
     备份文件头部: Host: localhost    Database: extmail
    先删除extmail这个库  mysql> drop database extmail;
    恢复操作: [[email protected] tmp]# mysql -uroot -pxiong123 extmail < extmail.20180510.sql 
            删除数据库,直接恢复会报这个错误,我们需要先创建这个库,然后再进行恢复
                    ERROR 1049 (42000): Unknown database ‘extmail‘
 完整单库恢复
    mysql> create database extmail;
    [[email protected] tmp]# mysql -uroot -pxiong123 extmail < extmail.20180510.sql 

   技术分享图片

3、备份库中的单个表
备份:语法: -u用户 -p密码 库名 表名 
            [[email protected] tmp]# mysqldump -uroot -p extmail alias > ext_alias.sql
恢复:
        1、删除  mysql> drop table extmail.alias;
        2、恢复 [[email protected] tmp]# mysql -uroot -pxiong123 extmail < ext_alias.sql
        3、查看 mysql> use extmail;
                      mysql> show tables;

4.2、xtrbackup

下载地址 - 点我下载 - 版本: percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm

4.2.1、功能

能实现的功能:
    非阻塞备份innodb等事务引擎数据库、
    备份myisam表会阻塞(需要锁)、
    支持全备、增量备份、压缩备份、
    快速增量备份(xtradb,原理类似于oracle:tracking 上次备份之后发生修改的page.)、
    percona支持归档redo log的备份、
    percona5.6+支持轻量级的backup-lock替代原来重量级的FTWRL,此时即使备份非事务引擎表也不会阻塞innodb的DML语句了、
    支持加密备份、流备份(备份到远程机器)、并行本地备份、并行压缩、并行加密、并行应用备份期间产生的redo日志、并行copy-back
    支持部分备份,只备份某个库,某个表
    支持部分恢复
    支持备份单个表分区
    支持备份速度限制,指备份产生的IO速度的限制
    支持point-in-time恢复
    支持compat备份,也即使不备份索引数据,索引在prepare时--rebuild-indexs
    支持备份buffer pool
    支持单表export, import到其它库
    支持 rsync 来缩短备份非事务引擎表的锁定时间

4.2.1、全备

yum安装  依赖包 libev、rsync
        [[email protected] tmp]# yum -y install percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm

前期准备:
1、创建一个用户备份的用户
         mysql> grant replication client, reload, lock tables, process on *.* to ‘xtrb‘@‘%‘ identified by ‘xtrb‘;
         mysql> flush privileges;

2、创建一个备份目录 /data/backup
                  [[email protected] mysql]# mkdir /data/backup
                  [[email protected] mysql]# chown mysql.mysql !$

3、创建一个数据库
mysql> create database test;
mysql> use test;
mysql> create table te1 (id int primary key auto_increment,name varchar(25));
mysql> insert into te1 (name) values (‘xiong1‘),(‘xddf2‘),(‘sa3‘);

   技术分享图片

备份:
1、全备
    [[email protected] mysql]#  innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 /data/backup/

技术分享图片

备份完成之后是直接以当前时间来命名
[[email protected] mysql]# ls /data/backup/
    2018-05-10_15-54-29
以下是备份的文件,需要将属主属组设置成mysql,方便恢复

技术分享图片

文件说明 重要
技术分享图片
技术分享图片

恢复操作
  恢复时需要加上 --apply-log参数,它的作用是回滚未提交的事务及同步已经提交的事务至数据文件,使数据文件保持一致性;

[[email protected] 2018-05-10_15-54-29]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --apply-log /data/backup/2018-05-10_15-54-29/
出现如下信息说明成功

技术分享图片

这时我们模拟数据挂掉了,直接干掉原先的mysql
1、先停掉它
    [[email protected] 2018-05-10_15-54-29]# service mysqld stop

2、弄走原先的数据文件
    [[email protected] 2018-05-10_15-54-29]# mv /data/mysql{,.bak}

3、恢复数据文件
    [[email protected] 2018-05-10_15-54-29]# pwd
    /data/backup/2018-05-10_15-54-29
    [[email protected] 2018-05-10_15-54-29]# mkdir /data/mysql
    [[email protected] 2018-05-10_15-54-29]# mv * /data/mysql
    [[email protected] 2018-05-10_15-54-29]# chown mysql.mysql /data/mysql -R

4、启动服务
    [[email protected] 2018-05-10_15-54-29]# service mysqld start

5、查看数据库
    mysql> show databases;
            Database: test   没问题

技术分享图片

4.2.2增量备份

1、先进行一次全备
    [[email protected] backup]#  innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 /data/backup/
2、插入新的数据
    mysql> insert into test.te1 (name) values (‘5sf‘),(‘adf‘),(‘555sf‘),(‘3adf‘),(‘5555sf‘),(‘3adadf‘),(‘55ad55sf‘),(‘3adadaf‘);

  技术分享图片

3、增量备份
[[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --no-timestamp --incremental /data/backup/2018-05-10_16-23-27-incre-1 --incremental-basedir /data/backup/2018-05-10_16-23-27/

技术分享图片
技术分享图片

4、增备的恢复
    4.1、先进行全备恢复
    4.2、再进行增备恢复  都需要加上 --redo-only
    --redo-only意味着只前滚xtrabackup日志中已经提交的事务,并不回滚那些没有提交的事务信息
    4.3、最后一个过程就是对整体的全备进行恢复,这时就可以去掉--redo-only了,意味着需要回滚那些还没有提交的事务

恢复步骤:
1、全备的恢复
[[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --apply-log --redo-only /data/backup/2018-05-10_16-23-27

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2597453
InnoDB: Number of pools: 1
180510 16:41:43 completed OK!

2、增备的恢复
[[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --apply-log --redo-only /data/backup/2018-05-10_16-23-27 --incremental-dir=/data/backup/2018-05-10_16-23-27-incre-1/

180510 16:42:43 [00]        ...done
180510 16:42:43 [00] Copying /data/backup/2018-05-10_16-23-27-incre-1//xtrabackup_info to ./xtrabackup_info
180510 16:42:43 [00]        ...done
180510 16:42:43 completed OK!

3、整体的全备恢复不加--redo-only
[[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --user xtrb --password xtrb --host 192.168.9.224 --apply-log /data/backup/2018-05-10_16-23-27

xtrabackup: using the following InnoDB configuration for recovery:
xtrabackup:   innodb_data_home_dir = .
xtrabackup:   innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup:   innodb_log_group_home_dir = .
xtrabackup:   innodb_log_files_in_group = 2      2个文件
xtrabackup:   innodb_log_file_size = 50331648  可以看到日志文件大小

InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2608421   
180510 16:43:51 completed OK!

4、测试恢复过程
[[email protected] data]# cd /data
[[email protected] data]# service mysqld stop
[[email protected] data]# mv mysql{,.bak}
[[email protected] data]# mkdir mysql
[[email protected] data]# mv backup/2018-05-10_16-23-27/* mysql/
[[email protected] data]# chown mysql.mysql mysql -R
[[email protected] data]# service mysqld start

技术分享图片

以上是关于mysql备份复制-2的主要内容,如果未能解决你的问题,请参考以下文章

mysql 自动备份脚本

mysql数据库备份,主从复制及半同步复制

MYSQL文件复制及备份

Mysql/MariaDB配置主从复制备份

mysql备份与主从复制

MySQL,简单了解下