初识MariaDB之3——MariaDB备份与还原

一、基础知识

数据的重要性无需多说,需要强调的是备份不是目的,能恢复才是目的,以下就Mariadb的一些概念进行说明。

1.存储引擎的分类

Mariadb5.1以后的版本,默认使用支持事务的InnoDB存储引擎,之前的MyISAM存储引擎不支持事务,所谓事务型存储引擎,必须满足ACID原则:

A:atom(原子性),即一个事务中所有的操作必须全部完成执行或不执行

C:consistent(一致性),一个事务从开始到结束状态必须保持一致

I:isolation(隔离性),相同的数据不允许多个事务同时访问

D:durability (持久性),一经修改永久保存

2.事务隔离级别

InnoDB存储引擎分为4种隔离级别:

read-uncommitted:读未提交,可以读取其他会话未提交的事务,称为脏读

read-committed:读提交,可以读取其他会话已提交的事务,解决了脏读,引发不可重读

repeatable-read:可重读(默认),通过MVCC多版本机制让已发起的事务在提交前读取到的数据不发生变化,即使有其他会话已提交了事务,解决了不可重读,引发幻读

serializable:串行提交,在每个读的行上施加共享锁,在写的行上施加排他锁,解决了幻读,但是降低了并发

3.锁机制

行锁和表锁:依据粒度不同进行的划分,行锁的并发能力更强

读锁和写锁:读锁又称共享锁,施加读锁后所有事务只能进行读操作,不能再进行写操作;写锁又称排他锁,施加写锁后除当前事务外的其他事务不能进行读写操作

InnoDB存储引擎的行锁其实是加在索引上的

4.备份方式

数据库按照备份方法分为物理备份和逻辑备份,按照服务运行的状态又可以分为冷备和热备,对于不支持事物的MyISAM存储引擎,可以采用温备的方式进行(前提是必须使用lvm2或者Btree文件系统)。

物理备份:基于文件系统层的备份,优点是速度快,缺点是收到文件系统的约束

逻辑备份:备份时将数据库抽取为sql语句,优点是不受操作系统约束,可移植性强,缺点是当数据库较大时速度慢

二、使用工具

1.mysqldump

--single-transaction 只对InnoDB引擎有效,用于保护数据的一致性,备份发起前,创建一个数据快照,直到备份结束都不会读取备份开始后提交的任何事务

--quick 配合--single-transaction加速大空间表备份

--all-databases(-A) 备份所有数据库

--where(-w) 按条件筛选要备份的数据

--databases(-B) 备份指定数据库,多个数据库之间用","分隔

--master-date=VALUE VALUE值有1|2两个值,如果是1会在备份出的文件添加一个CHANGE MASTER TO语句;如果是2会在备份出的文件添加一个CHANGE MASTER TO语句并注释,备份时建议使用该选项并将VALUE设置为2,原因是该参数备份时会携带当前时刻binlog日志的名称和位置,便于后期使用binlog恢复

需要注意的是:mysqldump如果不带-A|-B选项默认不备份数据结构,在恢复时需要先创建数据库和表结构。单表恢复时只需要指定库名,不需要指定表名。

2.mysqlbinlog

mysqlbinglog是一个客户端工具,它可以在其他终端以客户端的身份访问mysql服务器

--database=DATABASE 只适用于本地日志,查看二进制日志中指定数据库的信息(默认是所有库),导出二进制日志时建议使用该选项,否则还原时遇到该服务器上没有的数据库会报错,无法正常恢复

--start-position=N 查看指定位置以后的事务

--to-last-log(-t) 在MySQL服务器中请求的二进制日志结尾处不停止,而是继续打印直到最后一个二进制日志的结尾,如果发送给同一台服务器则会无限循环。需要同时使用--read-from-remote-server选项

--result-file=FILENAME 输出为指定文件,同重定向">"

三、操作步骤

本次实验操作系统版本为CentOS7.4,数据库版本为Mariadb5.5.6,为避免干扰,关闭selinux和iptables,172.16.10.30/24为数据库服务器,172.16.10.40/24为备用服务器

1.冷备

(1)停止172.16.10.30/24的MariaDB服务

systemctl stop mariadb.service

(2)使用scp命令将172.16.10.30/24服务器上的hellodb数据库拷到172.16.10.40/24服务器datadir目录下

scp -r hellodb [email protected]:/var/lib/mysql/

(3)修改拷贝后172.16.10.40/24服务器hellodb数据库的属主和属组

chown -R mysql.mysql /var/lib/mysql/hellodb

(4)启动172.16.10.40/24的MariaDB服务

systemctl start mariadb.service

2.热备

(1)备份172.16.10.30/24上的数据库

mysqldump -uroot -ppassword1! --database hellodb --master-data=2 --single-transaction --quick > /tmp/hellodb.sql

(2)根据/tmp/hellodb.sql中记录备份时使用的binlog及其位置将后续的sql语句备份到指定文件中,如果不止一个二进制日志后续以追加方式进行

mysqlbinlog --database hellodb --start-position=245  mysql-binlog.000005 > /tmp/binlog.sql

(3)将hellodb.sql和/tmp/binlog.sql传输到172.16.10.40/24服务器

scp -r {binlog.sql,hellodb.sql} [email protected]:/tmp/

(4)导入数据库过程无需记录二进制日志,把以先暂时关闭

MariaDB [hellodb]>set sql_log_bin=0

(5)在172.16.10.40/24服务器执行sql语句恢复数据库

mysql -uroot -p < hellodb.sql

mysql -uroot -p < binlog.sql

(6)开启二进制日志

MariaDB [hellodb]>set sql_log_bin=1

由于二进制日志的重要性,生产环境中建议将数据文件和二进制文件放在不同的磁盘上,如果有专门的日志服务器也可以远程同步二进制日志中的sql语句

mysqlbinlog  --read-from-remote-server --host=172.16.10.30 --port=3306  --user=root --password=password1! --start-position=733 --to-last-log  mysql-binlog.000005 --result-file=/tmp/bin_log.sql

3.温备

温备是针对不支持事务的MyISAM存储引擎采取的一种折中的备份方式,它通过lvm2的快照功能结合二进制日志,实现了几乎热备的效果

(1)将172.16.10.30/24服务器上的表同步到磁盘并且锁表

MariaDB [hellodb]> flush tables with read lock;

(2)刷新172.16.10.30/24服务器日志

MariaDB [hellodb]> flush logs;

(3)记录172.16.10.30/24服务器上当前二进制日志文件及位置

[[email protected] ~]# mysql -uroot -ppassword1! -e 'show master status;' > /tmp/position.txt

(4)为datadir目录所在的设备创建一个快照

[[email protected] ~]# lvcreate -L 1G -s -n mylv_snap /dev/myvg/mylv

(5)解除读锁

MariaDB [hellodb]> unlock tables;

(6)挂载快照

mount /dev/myvg/mylv_snap /mnt/

(7)将备份拷贝至172.16.10.40/24服务器,并修改属主和属组

[[email protected] mysql]#scp -r /mnt/hellodb [email protected]:/data/mysql

[[email protected] mysql]#chown -R mysq.mysq /data/mysql/

(8)导入数据库过程无需记录二进制日志,把以先暂时关闭

MariaDB [hellodb]>set sql_log_bin=0

(9)将172.16.10.30/24上的二进制文件同步至172.16.10.40/24

[[email protected] mysql]# mysqlbinlog  --read-from-remote-server --host=172.16.10.30 --port=3306  --user=root --password=password1! --start-position=245 --to-last-log  mysql-binlog.000006 --result-file=/tmp/bin_log.sql

(10)执行快照之后的sql语句

[[email protected] mysql]# mysql -uroot -p'password1!' < /tmp/bin_log.sql

(11)开启二进制日志

MariaDB [hellodb]>set sql_log_bin=1

(12)删除172.16.10.30/24上的快照,至此操作完成

[[email protected] mysql]#umount /mnt/

[[email protected] ~]# lvremove mylv_snap

补充说明:

mysql5.6以后的版本中可以将远程服务器上的服务器复制到本地,其中mysqldump命令中的-raw(以binlog形式将远程服务器的日志存储到本地)和--stop-never(连接远程mysql服务器读取日志,知道服务器关闭后才会退出或被kill掉)选项在mariadb10.1中未找到,不确定是否有该功能

原文地址:http://blog.51cto.com/arkling/2114460

时间: 2024-10-13 03:12:27

初识MariaDB之3——MariaDB备份与还原的相关文章

初识MariaDB之4——Xtrabackup备份与还原

一.基础知识 mysqldump是mysql自带的一个单线程的逻辑备份工具,当数据量很大时,使用mysqldump备份的时间会非常长,且无法做增量备份,xtrabackup是一款基于底层块复制.开源的备份工具,可以对数据库在线实现备份.xtrabackup支持对Innodb和Xtradb存储引擎的完全.增量和差异备份,对于不支持事物的MyISAM存储引擎只能完全备份. 二.备份工具 Xtrabackup工具用到的命令为xtrabackup和innobackupex,而innobackupex又是

Xtrabackup备份与还原

Xtrabackup之备份与还原 Xtrabackup是percona的一个开源项目,可以热备份innodb,XtraDB,和MyISAM(会锁表),可以看做是mysql商业备份工具InnoDB Hotbackup的免费替代品. ①xtrabackup只能备份InnoDB和XtraDB两种数据库表,支持在线热备份,可以在不加锁的情况下备份Innodb数据表,不过此工具不能操作MyiSAM引擎表 ②innobackupex是一个脚本封装,封装了xtrabackup,能同时处理Innodb和MyIS

MySQL之备份与还原

本章内容 备份和恢复简介 实验一:实现Mariadb的冷备份和恢复 实验二:实现基于LVM的备份还原,结合binlog恢复最新状态 mysqldump简介与用法 实验三:数据库数据文件损坏,如何还原最新状态? 实验四:误删除表,如何恢复最新状态? xtrabackup简介与用法 实验五: Xtrabackup完全备份及还原 实验六: Xtrabackup完全,增量备份及还原 实验七: Xtrabackup单表导出和导入 备份和恢复 为什么要备份 灾难恢复:硬件故障.软件故障.自然灾害.黑|客攻|

mysql数据库使用xtrabackup工具 实现备份和还原

下载xtrabackup工具包 percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm 工具包可以从官网下载https://www.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm 安装xtrabackup工具包(需要启用epel源

Centos7+Mariadb+Keepalived实现Mariadb(MYSQL)的高可用(HA)

我们前面几篇文章中有介绍了Keepalived的功能--HA,关于MySQL-HA,目前有多种解决方案,比如heartbeat.drbd.mmm.共享存储,但是它们各有优缺点.heartbeat.drbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,对于不会脚本语言的人来说,这无疑是一种脑裂问题:对于mmm,生产环境中很少有人用,且mmm 管理端需要单独运行一台服务器上,要是想实现高可用,就得对mmm管理端做HA,这样无疑又增加了硬件开支:对于共享存储,个人觉得MySQL数据还是放在本

mariadb multi-source replication(mariadb多主复制)

下文一起来看看mariadb multi-source replication(mariadb多主复制)例子,希望对各位有帮助. mariadb multi-source replication(mariadb多主复制)在mariadb-10.0里面加入了多主复制功能. 修改过的语法:针对每个复制线程会有一个对应的connection_name,而connection_name是default_master_connection变量的值,如果你要操作对应的复制线程,需要将这个变量设置为对应的复制

mysql备份和还原

MySQL 数据备份与还原 一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句.然后,将表中的所有记录转换成一条INSERT语句.然后通过这些语句,就能够创建表并插入数据. 1.备份一个数据库 mysqldump基本语法: mysqldump -u username -p dbname

mysql中的数据备份与还原

一.有三种备份方式: 1. 数据表文件备份 2. 单表数据备份 3. SQL备份 4. 增量备份 二.mysql中的存储引擎 主要有两种:myisam 和 innodb. -- 免费的 其他收费的还有:BDB, Memory, Archive innodb的存储方式:表结构单独存放,所有数据都存储在ibdata1文件中. myisam的存储方式:表.数据和索引全部单独分开存储. 二.数据表文件备份与还原 直接复制数据库目录下的文件夹复制对应的表结构和数据文件,还原的时候直接放回去即可. 但是此方

centos备份与还原

dump备份restore还原dd数据备份tar备份scpmkisofs镜像文件制作 dump备份 1.dump主要用于备份整个文件系统备份,虽然也可以备份单一目录,但是对目录文件支持不足,单一目录还是需要使用打包压缩的方式进行备份.  dump是功能上制定等级,也就是可以进行增量备份 dump等级分为0-9,10个等级,0为完全备份,1是在0的基础上惊醒增量备份,一次类推. 当待备份的数据为单一文件系统 可以利用了level 0~9进行备份,同时可以使用dump完整功能 当待备份的数据只是目录

【RMAN】利用备份片还原数据库(中)

[RMAN]利用备份片还原数据库 [RMAN]利用备份片还原数据库(上): http://blog.itpub.net/26736162/viewspace-1621581/ 在上一篇blog中我们介绍了采用dbms_backup_restore来找回控制文件并恢复整个数据库的方法,本篇blog我们介绍采用创建临时库来找回控制文件的方法. 1.1.1  方法二:尝试采用创建临时库来找回控制文件 由于RMAN必须工作在MOUNT模式,所有的数据文件都丢失,无法通过只重建控制文件将其启动到MOUNT