mysql之mysqldump备份恢复

mysql数据备份,其重要性不言而喻。大体上我们比较常用到的有mysqldump、Xtrabackup和用lvm快照来备份,或者是有专门的mysql复制备份服务器。

特性:

逻辑备份工具,比物理备份速度慢,但更灵活,可以修改一些信息,而且跨平台也简单。

如果数据量大于1G最好还是用物理备份。

单线程的备份工具,网上有一个多线程逻辑备份工具,叫做mysqldumper,有兴趣的朋友可以看看。

可以实现Innodb存储引擎的热备或MyISAM、Aria的温备。

自身不能实现增量或是差异备份,如果备份的是全部的库可以用备份二进制日志文件的方式来实现。

相当于是mysql的客户端,只要能够连到服务器就可以远程备份。

备份用户要有以下权限:

SELECT, RELOAD, SUPER, REPLICATION CLIENT

命令使用和常用选项:

mysqldump [options] [db_name [tbl_name ...]]

-A, --all-databases 备份所有库。
-B, --databases 指定要备份的库。
-F, --flush-logs 滚动二进制日志。更容易记录备份时二进制日志的位置。
-x, --lock-all-tables 锁定所有表。读锁。用于温备。用于不支持事务的存储引擎。
--single-transaction 创建一个大事务,以用于热备。只能用于事务存储引擎,如InnoDB。
--master-data[0|1|2]
同步二进制日志位置标记。0: 不记录,1:记录CHANGE MASTER语句

2:记录为注释的CHANGE MASTER语句

备份代码:
--events: 备份事件调度器代码
--routines: 备份存储过程和存储函数
--triggers:备份触发器

备份:

添加备份用户:

MariaDB [(none)]> GRANT SELECT, RELOAD, SUPER, REPLICATION CLIENT ON *.* TO ‘backup‘@‘localhost‘ IDENTIFIED BY ‘abcd1234‘;
Query OK, 0 rows affected (0.00 sec)

如我这里备份hellodb的库:

[[email protected] binlogs]# mysqldump -ubackup -p  --lock-all-tables --flush-logs --master-data=2 --all-databases >  /backup/`date +%Y%m%d_%H:%M`.full.sql
[[email protected] backup]# cd /backup
[[email protected] backup]# ls
20151107_22:29.full.sql

这个命令是直接输出到屏幕的,所以需要重定向到文件才行。

用head -n 30来查看备份文件,可以看到:

-- CHANGE MASTER TO MASTER_LOG_FILE=‘master-bin.000017‘, MASTER_LOG_POS=245;

这个就是由--master-data=2添加的信息,说明备份表的时候的二进制日志文件的位置。

这是一个新的二进制日志文件,是--flush-log的功能。这样在恢复或做二进制日志的增量备份也容易些。

因为有的的表是MyISAM的,所以用了--lock-all-tables做的锁定,实现温备。 如果备份单个库,表都是InnoDB的可以换成--single-transaction来生成大事务做热备。

注意用head或其它命令来查看一下文件是否是备份文件,万一是报错信息就哭了。

增量备份: 会了防止二进制日志的损坏。

因为二进制日志文件是全局的,所以如果备份了全部的库,可以用这个办法。如果有多个库而只备份了一个库或是只备份了一个表。那就麻烦了,一般来说最好不要这么干。

备份:

假如:因为数据的修改,000017日志里面有了很多信息,这时想做个增量备份的话,就可以直接FLUSH LOGS,来滚动日志。然后把原来的日志内容复制出去。

MariaDB [hellodb]> SHOW MASTER STATUS;        #查看当前使用的日志是否还是000017。
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000017 |     8012 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)    #如果日志不是000017,那就要复制17到现在这个日志文件了。

MariaDB [hellodb]> FLUSH LOGS;
Query OK, 0 rows affected (0.01 sec)

MariaDB [hellodb]> SHOW MASTER STATUS;    #一定要做好所使用的日志的记录
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000018 |      245 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

MariaDB [hellodb]>

发现使用的日志文件已经变了。这时我们就可以用mysqlbinlog来把日志文件的内容给复制出去了。

因为二进制日志文件是二进制的,要用这个命令才能打开日志。

[[email protected] binlogs]# ls        #二进制日志文件的目录
master-bin.000001  master-bin.000004  master-bin.000007  master-bin.000010  master-bin.000013  master-bin.000016  master-bin.index
master-bin.000002  master-bin.000005  master-bin.000008  master-bin.000011  master-bin.000014  master-bin.000017
master-bin.000003  master-bin.000006  master-bin.000009  master-bin.000012  master-bin.000015  master-bin.000018
[[email protected] binlogs]# mysqlbinlog --start-position=245 master-bin.000017 > /backup/`date +%Y%m%d_%H:%M`.1.sql
[[email protected] binlogs]# cd /backup
[[email protected] backup]# ls
20151107_22:29.full.sql  20151107_22:52.1.sql

恢复:

1、关闭sql_log_bin会话变量,暂时停止二进制日志的定入。恢复过程中的修改语句就不要写入日志了。

2、恢复完全备份。

3、恢复增量备份(没有增量备份就是完全备份之后的所有二进制日志了)

MariaDB [hellodb]> SET sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
MariaDB [hellodb]> source /backup/20151107_22:29.full.sql
MariaDB [hellodb]> source /backup/20151107_22:52.1.sql
MariaDB [hellodb]> SET sql_log_bin=1;

做及时点回原就再把增量备份之后的二进制日志文件恢复一下就可以了。用mysqldump做备份再做增量太麻烦了。一般如果二进制日志所在磁盘的安全性高也就不用做增量了,到时候再直接恢复二进制日志也一样。而且如果数据量大也就不用mysqldump备份了。



这二天上火,嘴角干裂加口腔溃疡,一冷鼻炎还犯了。我的天啊。

时间: 2024-12-26 10:06:18

mysql之mysqldump备份恢复的相关文章

mysql之 mysqldump 备份恢复详解

mysqldump 程序的实现原理是通过我们给的参数信息加上数据库中的系统表信息来一个表一个表获取数据然后生成 INSERT 语句再写入备份文件中的.这样就出现了一个问题,在系统正常运行过程中,很可能会不断有数据变更的请求正在执行,这样就可能造成在 mysqldump 备份出来的数据不一致.也就是说备份数据很可能不是同一个时间点的数据,而且甚至可能都没办法满足完整性约束.这样的备份集对于有些系统来说可能并没有太大问题,但是对于有些对数据的一致性和完整性要求比较严格系统来说问题就大了,就是一个完全

mysql使用mysqldump备份、恢复

  mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等 mysqldump 语法 :      默认配置读取路径:  /etc/mysql/my.cnf     /etc/my.cnf    ~/.my.cnf            Usage: mysqldump [OPTIONS] database [tables]           OR     mysqldump [OPTI

MySQL多字符集备份恢复测试

目的:测试单mysql实例在多字符集的数据库环境中备份恢复的乱码问题 准备工作: CREATE DATABASE `utf8_db` /*!40100 DEFAULT CHARACTER SET utf8 */; CREATE DATABASE `latin_db` /*!40100 DEFAULT CHARACTER SET latin1*/; CREATE TABLE utf8_db.`utab` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name

MySQL之Xtrabackup备份恢复数据库-简介

一.Xtrabackup介绍 1.Xtrabackup是什么 Xtrabackup 是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup 有两个主要的工具:xtrabackup.innobackupex xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表. innobackupex是参考了InnoDB Hotbackup的innoback脚

mysql全库备份恢复某个表

早上小红过来问我说网站的一个功能没了,看了下数据库,少了个表.好吧,心里mmp,开始恢复数据 环境: 全库备份 恢复某一个表 1.1 查看备份数据 [[email protected] mysql_backup]$ ls -lhtotal 16G-rw-r--r-- 1 root root 5.4G May 21 00:58 2018_05_21_00_30_01.all.sql.zip     ##找到了备份数据 1.2  查看备份文件类型 [[email protected] mysql_b

MySQL 数据恢复 全备份恢复以及增量恢复 (以手残删库为例)

数据恢复原理图 测试环境 MySQL5.5 1 首先新建数据库 lampol  数据表 test create database lampol; use lampol; create table test (id int(10),name varchar(10)); 2 插入数据信息 insert into test values(1,'lampol1'); insert into test values(2,'lampol2'); 3 插入后的信息 mysql> select * from l

centos6.5 mysql安装+远程访问+备份恢复+基本操作

参考博文: Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置 MySQL修改root密码的多种方法 MySQL的备份与还原 解决mysql导入还原时乱码的问题 Mysql开启远程连接方法 mysql 赋予用户权限 grant命令 Mysql数据库操作常用命令 一.安装 1.yum进行mysql的安装 我是通过yum的方式来进行mysql的数据库安装,首先我们可以输入 yum list | grep mysql 命令来查看yum上提供的mysql数据库可下载

MySQL 的mysqldump备份

来自<mysql技术内幕 innodb存储引擎> --single-transaction:只对innodb表有效 --lock-tables:对MyISAM表使用,但是对于innodb表不需要用这个参数,用single-transaction选项即可,但是数据库下既有MyISAM也有Innodb只能使用lock-tables,针对单个库 single-transaction和lock-tables互斥,搭主从,要用lock-tables不能用single-transaction,因为要停写,

mysql大数据备份及恢复(一)

Mysql大数据备份和恢复一 MySQL备份一般采取全库备份.日志备份:MySQL出现故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间:mysql的二进制日志记录着该数据库的所有增删改的操作日志还包括了这些操作的执行时间 Binlog的用途:主从同步.恢复数据库 使用binlog工具备份 查看binlog是否开启,因为默认是关闭的 从上图可知off为关闭状态,一般logbin为只读,在/etc/my.cnf下开启 重启数据库 重启后在目录下查看是否生成bin日志