本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn

备份策略

针对不同的场景下, 我们应该制定不同的备份策略对数据库进行备份, 一般情况下, 备份策略一般为以下三种:

  • 直接cp,tar复制数据库文件
  • mysqldump 复制BIN LOGS
  • lvm2快照 复制BIN LOGS
  • xtrabackup
    以上的几种解决方案分别针对于不同的场景
  • 如果数据量较小, 可以使用第一种方式, 直接复制数据库文件
  • 如果数据量还行, 可以使用第二种方式, 先使用mysqldump对数据库进行完全备份, 然后定期备份BINARY LOG达到增量备份的效果
  • 如果数据量一般, 而又不过分影响业务运行, 可以使用第三种方式, 使用lvm2的快照对数据文件进行备份, 而后定期备份BINARY LOG达到增量备份的效果
  • 如果数据量很大, 而又不过分影响业务运行, 可以使用第四种方式, 使用xtrabackup进行完全备份后, 定期使用xtrabackup进行增量备份或差异备份

实战演练

cp复制数据文件备份及恢复

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.03 sec) mysql> create database test;
Query OK, 1 row affected (0.03 sec) mysql> use test
Database changed
mysql> show tables;
Empty set (0.00 sec) mysql> create table a(id int,name varchar(10));
Query OK, 0 rows affected (0.04 sec) mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| a |
+----------------+
1 row in set (0.00 sec) mysql> insert into a(id,name)values(1,'gao')
-> ;
Query OK, 1 row affected (0.01 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) mysql> select * from a
-> ;
+------+------+
| id | name |
+------+------+
| 1 | gao |
+------+------+
1 row in set (0.00 sec) [root@my57 mysql]# mkdir /backup [root@my57 mysql]# cp -a /data/mysql/data/* /backup/ [root@my57 mysql]# ls /backup/
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ibtmp1 my57.err my57.pid mysql mysqld_safe.pid performance_schema sys test xtrabackup_info [root@my57 mysql]# rm -rf /data/mysql/data/*
[root@my57 mysql]# service mysql restart ERROR! MySQL server PID file could not be found!
Starting MySQL... ERROR! The server quit without updating PID file (/data/mysql/data//my57.pid).
这时启动不了,我们再把备份文件拷贝回来,在启动就可以了。 cp -a /backup/* /data/mysql/data/

mysqldump的复制与恢复

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.02 sec) mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| a |
| b |
+----------------+
2 rows in set (0.00 sec)
mysql> select * from b;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec) # 记住备份前position的值
mysql> show master status
-> ;
+----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------+----------+--------------+------------------+-------------------+
| bin-log.000001 | 567 | | | |
+----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 

开始备份

[root@my57 data]# mysqldump --all-databases --lock-all-tables  > /backup/backup.sql

再创建一个数据库做增量测试

mysql> create database test1;
Query OK, 1 row affected (0.00 sec) mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
| test1 |
+--------------------+
6 rows in set (0.00 sec) # 再记下现在的position位置
mysql> SHOW MASTER STATUS;
+----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------+----------+--------------+------------------+-------------------+
| bin-log.000001 | 869 | | | |
+----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
备份二进制日志 cp bin-log.000001 /backup/

停止mysql在启动,编译安装的启动不了,必须重新初始化

[root@my57 data]# service mysql stop
Shutting down MySQL. SUCCESS! # 模拟删除数据文件
[root@my57 data]# rm -rf * # 编译安装的数据库删除数据文件后启动不了
[root@my57 data]# service mysql start
Starting MySQL... ERROR! The server quit without updating PID file (/data/mysql/data//my57.pid). # 重新初始化mysql
[root@my57 data]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql
2016-06-14T02:43:04.084864Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-06-14T02:43:04.084944Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2016-06-14T02:43:04.084952Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
2016-06-14T02:43:04.459619Z 0 [Warning] InnoDB: New log files created, LSN=45790
2016-06-14T02:43:04.502310Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2016-06-14T02:43:04.567746Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: b7fa4c2e-31d9-11e6-983a-080027fff0b0.
2016-06-14T02:43:04.571117Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2016-06-14T02:43:04.575259Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. # 启动
[root@my57 data]# service mysql start
Starting MySQL. SUCCESS! # 利用原来的别分还原,发现还原了 但是缺少test1
mysql> source backup.sql mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec) # 利用mysqlbinlog二进制恢复test1,这时上面的开始位置和结束位置就有用了
[root@my57 backup]# mysqlbinlog --start-position=567 --stop-position=869 /backup/bin-log.000001 |mysql -uroot -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
| test1 |
+--------------------+
6 rows in set (0.00 sec)
 

xtrabackup备份参考另外文章

mysql cp复制和mysqldump备份测试的更多相关文章

  1. MySQL运维之---mysqldump备份、select...into outfile、mysql -e 等工具的使用

    1.mysqldump备份一个数据库 mysqldump命令备份一个数据库的基本语法: mysqldump -u user -p pwd dbname > Backup.sql 我们来讲解一下备 ...

  2. MySQL入门篇之mysqldump备份和恢复

    一.备份单个数据库 1.备份命令:mysqldump MySQL数据库自带的一个很好用的备份命令.是逻辑备份,导出 的是SQL语句.也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备 ...

  3. mysql 表复制(表备份)

    复制一个表数据到新表,我们可以直接执行下面的语句 create table new_table LIKE old_table:--将表结构复制到新表 insert into new_table sel ...

  4. Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份 ...

  5. mysql的日志及利用mysqldump备份及还原

    日志文件:6类       一般查询日志:log,general_log,log_output       慢查询日志:       错误日志       二进制日志       中继日志       ...

  6. mysql数据库的维护,备份和复制

    在数据库运行时维护数据库 执行mysql数据库维护的方法之一就是连接mysql服务器,并告诉它做什么事, 如对myisam数据表进行检查或者修复, 可以使用check table tbname或rep ...

  7. Database基础(五):使用binlog日志、XtraBackup备份工具、MySQL AB复制

    一.使用binlog日志 目标: 利用binlog恢复库表,要求如下: 启用binlog日志 创建db1库tb1表,插入3条记录 删除tb1表中刚插入的3条记录 使用mysqlbinlog恢复删除的3 ...

  8. MySQL备份和恢复[3]-mysqldump备份工具

    mysqldump 概述 逻辑备份工具: mysqldump, mydumper, phpMyAdmin Schema和数据存储在一起.巨大的SQL语句.单个巨大的备份文件 mysqldump:是My ...

  9. windows环境设置mysql自动备份(测试成功)

    00.背景介绍 最近做了个小程序,使用的是mysql数据库,涉及到将程序数据备份的事:虽然大部分数据库客户端工具都具有备份功能,但并不能做到定期自动备份:在Windows环境下,手工备份MySQL是很 ...

随机推荐

  1. 邓_phpcms_数据库

    phpcms v9 数据表结构 在线版 PHPCMS V9 数据结构 (2010-12-28) 表 1 : v9_admin 管理员表 字段 类型 Null 默认 额外 注释 userid mediu ...

  2. ublime Text 3安装与使用

    ublime Text 3安装与使用 工具 2015-07-30 10:46 0 34 工欲善其事,必先利其器.好的工具帮助我们节省大量的工作时间,好用的插件使工具更强大. 1. 下载 可以从官网 h ...

  3. Java Reflection(getXXX和getDeclaredXXX)

    package com.sunchao.reflection; public class Person { private int age ; private String name; public ...

  4. Linux安装mysql 在/etc下没有my.cnf 解决办法

    进入 /usr/share/mysql  将my-medium.cnf 移动到etc 并且改名为my.cnf

  5. mysql-innoDB-事务

    事务的隔离级别: READ UNCOMMITTED(未提交读) 在这个级别,事务中的修改,即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据. READ COMMITTED(提交读) 一个 ...

  6. WebP 图片实践之路

    我们会从三部分来聊聊webp这个话题. 什么是webp,它有什么用? 使用webp的常规方法以及优劣. 我们是如何用上webp的. PS:如果是对webp有一定了解的朋友,建议直接看第三部分.因为是讲 ...

  7. linkin大话面向对象--类和对象

    我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...

  8. PHP获取字符串编码与转码

    (⊙o⊙)-编辑器保存的是utf8的文档取出来的字符串是gbk编码?问题很多,字符串转换为utf8的话在浏览器输出乱码 $e=mb_detect_encoding($d,array('GB2312', ...

  9. 重置CentOS 7的Root密码

    centos7与centos6有很多修改,不一样了,打算写几篇关于日常用到的改动 修改root密码 centos7的用户模式跟6有所不同 1 - 在启动grub菜单,选择编辑选项启动 2 - 按键盘e ...

  10. Go语言学习索引

    <Go并发编程实战>示例项目 项目地址: https://github.com/hyper-carrot/goc2p 项目安装: 用git clone获取项目,并将其根目录作为一个工作区. ...