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的主要内容,如果未能解决你的问题,请参考以下文章