0

0

MySQL常见备份与恢复方案

php中文网

php中文网

发布时间:2016-06-07 14:56:14

|

1300人浏览过

|

来源于php中文网

原创

MySQL 常见备份方案有以下三种: mysqldump + binlog lvm + binlog xtrabackup 本例为方便演示,数据库里面数据为空。下面开始动手 mkdir/opt/backup#创建备份目录mkdir-p/data/3309/{data,binlog}cd/usr/local/mysql/scripts/mysql_install_db--user=mysql-

mysql常见备份方案有以下三种:

       mysqldump + binlog

       lvm + binlog  

       xtrabackup

本例为方便演示,数据库里面数据为空。下面开始动手

mkdir /opt/backup                                #创建备份目录
mkdir -p /data/3309/{data,binlog}     
cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --datadir=/data/3309/data/ --basedir=/usr/local/mysql/ 
chown mysql.mysql -R /data/3309/ 
cp support-files/my-small.cnf /data/3309/my.cnf   #提供配置文件

vim /data/3309/my.cnf                             #编辑配置文件
[client]
#password       = your_password
port            = 3309
socket          = /tmp/mysql.sock4
# The MySQL server
[mysqld]
port            = 3309
socket          = /tmp/mysql.sock4
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
datadir = /data/3309/data
server-id       = 3309
log-bin=/data/3309/binlog/mysql-bin   #二进制日志位置
binlog_format=mixed               #二进制日志格式
log-error = /data/3309/mysql-err       #错误日志位置 
innodb_file_per_table = 1            #为每一个新数据表创建一个表空间文件
sync_binlog = 1                    #写二进制日志的时候,同步到磁盘上面

cp /data/3309/my.cnf /opt/backup/   #备份配置文件
mysqld_safe --defaults-file=/data/3309/my.cnf &  #启动mysql

1、利用mysqldump完全备份mysql,配合二进制日志备份实现增量备份

mysqldump 选项请参考http://wangweiak47.blog.51cto.com/2337362/1589304

1.1提供模拟数据

mysql -S /tmp/mysql.sock4   #连接mysql
mysql> use test;
Database changed
mysql> create table test (id int(2),comment char(30));  #创建表
Query OK, 0 rows affected (0.34 sec)
 
mysql> insert into test values (1,'yun zhonghe');  #插入数据
Query OK, 1 row affected (0.16 sec)

1.2全量备份:

mysqldump -S /tmp/mysql.sock4 -A -B -F -x --events --triggers --routines --master-data=2 > /opt/backup/all_data-`date +%F--%U`.sql

1.3 模拟数据发生改变

mysql> insert into test values (2,'yun zhonghe2');    #再插入一条数据。
Query OK, 1 row affected (0.11 sec)

1.4 增量备份

mysqladmin -S /tmp/mysql.sock4 flush-logs   #增量备份前,先滚动一下二进制日志。
cp `cat /data/3309/binlog/mysql-bin.index | tail -n 2 | head -n 1` /opt/backup/   #备份二进制日志

1.5 数据损坏

rm -rf /data/3309/
killall mysqld

1.6 恢复

上面已经提供了步骤,直接复制过来使用。


mkdir -p /data/3309/{data,binlog}
cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --datadir=/data/3309/data/ --basedir=/usr/local/mysql/
cp /opt/backup/my.cnf /data/3309/
chown mysql.mysql -R /data/3309/
mysqld_safe --defaults-file=/data/3309/my.cnf &    

mysql -S /tmp/mysql.sock4     #连接mysql查看数据
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show variables like 'sql_log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | OFF   |
+---------------+-------+
1 row in set (0.00 sec)
 
mysql> source /opt/backup/all_data-2015-10-01--39.sql
 
mysql> select * from test.test;   #还缺一个数据
+------+-------------+
| id   | comment     |
+------+-------------+
|    1 | yun zhonghe |
+------+-------------+
1 row in set (0.00 sec)  
 
mysql> source /tmp/incres-1.sql;
 
mysql> select * from test.test;   #数据已恢复
+------+--------------+
| id   | comment      |
+------+--------------+
|    1 | yun zhonghe  |
|    2 | yun zhonghe2 |
+------+--------------+
2 rows in set (0.00 sec)
 
mysql> set sql_log_bin = 1;  #打开二进制记录开关。

1.7小结,mysqldump适合于数据量较小的场合,它的优点是有众多选项,使用起来非常灵活,缺点是数据量一旦过大,非常耗时耗力。

 

2、使用lvm进行全备。

lvm快照卷原理参考

http://baike.baidu.com/link?url=iEpO_zm_AbHbk-ijQa8jNcFRoPPG2NdTYb_cRoQ7mjQb_ag9g-fL7yHPXV7Atp2j3J0L5xYynM9KKLIwycW_S_

2.1 数据接着上次继续开始。

2.2 全备。

需保证数据库存放在逻辑卷组上面,才行。

2.2.1首先锁表和滚动日志


mysql> flush table with read lock;
Query OK, 0 rows affected (0.02 sec)
 
mysql -S /tmp/mysql.sock4 -e 'show master status;' > /backup/master.info  #记录当前日志信息
mysqladmin -S /tmp/mysql.sock4 flush-logs   #滚动日志

2.2.2创建快照

lvcreate -s -n snap_data -L 500M /dev/vg_node5/mylv_data
  Logical volume "snap_data" created

2.2.3 解锁表

mysql> unlock tables;  
Query OK, 0 rows affected (0.00 sec)

2.2.4 复制快照卷数据到备份目录下

mkdir -p /backup/lvm
mount /dev/vg_node5/snap_data /mnt/lvm
cp -R /mnt/3309/* /backup/lvm

2.2.5 删除快照

umount /mnt
lvremove /dev/mapper/vg_node5-snap_data
Do you really want to remove active logical volume snap_data? [y/n]: y
  Logical volume "snap_data" successfully removed

2.3增量备份,只需和定时复制binlog到备份目录下面即可

2.4恢复,只需要直接拷贝备份目录下的文件即可

killall mysqld
rm -rf /data/3309/
cp -R /backup/lvm/ /data/3309/
chown mysql.mysql -R /data/3309/
mysqld_safe --defaults-file=/data/3309/my.cnf &
ss -tnl | grep 330
LISTEN     0      50                        *:3309                     *:* 
 
mysql> select * from test.test;   #数据未改变
+------+--------------+
| id   | comment      |
+------+--------------+
|    1 | yun zhonghe  |
|    2 | yun zhonghe2 |
+------+--------------+

2.5小结:

lvm实现物理备份速度相对mysqldump来比较快,实现也比较简单,是不错的选择。

家电小商城网站源码1.0
家电小商城网站源码1.0

家电公司网站源码是一个以米拓为核心进行开发的家电商城网站模板,程序采用metinfo5.3.9 UTF8进行编码,软件包含完整栏目与数据。安装方法:解压上传到空间,访问域名进行安装,安装好后,到后台-安全与效率-数据备份还原,恢复好数据后到设置-基本信息和外观-电脑把网站名称什么的改为自己的即可。默认后台账号:admin 密码:132456注意:如本地测试中127.0.0.1无法正常使用,请换成l

下载

缺点:数据目录必须存放在lvm卷组上面

 

3、使用xtrabackup实现热备。

请自行到官网下载并安装对应的rpm包。

使用方法参考:详细参考:

http://www.cnblogs.com/Amaranthus/archive/2014/08/19/3922570.html

3.1创建一个具有最小权限的用户

mkdir /backup/xtrabackup
mysql> grant RELOAD, LOCK TABLES, REPLICATION CLIENT on *.* to 'bkuser'@'localhost' identified by '123456';
mysql> flush privileges;

3.2完全热备。

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAMMERGECSVARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

innobackupex --user=bkuser --password=123456 --socket=/tmp/mysql.sock4 --defaults-file=/data/3309/my.cnf /backup/xtrabackup/ #相关选项自行help。
#nnobackupex: completed OK! #出现此选项代表备份完成。
ls /backup/xtrabackup/
2015-10-01_17-00-13

(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(5)backup-my.cnf —— 备份命令用到的配置选项信息;

3.3提供改变数据。

mysql> insert into test.test values (3,'yun zhonghe3');
Query OK, 1 row affected (0.03 sec)

3.4增量备份

innobackupex --user=bkuser --password=123456 --socket=/tmp/mysql.sock4 --defaults-file=/data/3309/my.cnf --incremental /backup/xtrabackup/ --incremental-basedir=/backup/xtrabackup/2015-10-01_17-00-13/

3.5 模拟数据损坏

rm -rf /data/3309/
killall mysqld

3.6增量备份恢复

innobackupex --apply-log --redo-only /backup/xtrabackup/2015-10-01_17-00-13/
innobackupex --apply-log --redo-only /backup/xtrabackup/2015-10-01_17-00-13/ --incremental-dir=/backup/xtrabackup/2015-10-01_17-15-00/

#注意,多实例的话,仍然需要备份配置文件,启动的时候需要binlog目录。


mkdir -p /data/3309/{data,binlog}
chown mysql.mysql -R /data/
cp /opt/backup/my.cnf /data/3309/
innobackupex --copy-back /backup/xtrabackup/2015-10-01_17-00-13/ --defaults-file=/opt/backup/my.cnf   #恢复数据。

3.6启动数据库查看。

mysqld_safe --defaults-file=/data/3309/my.cnf &
mysql -S /tmp/mysql.sock4
mysql> select * from test.test;   #数据修复完成。
+------+--------------+
| id   | comment      |
+------+--------------+
|    1 | yun zhonghe  |
|    2 | yun zhonghe2 |
|    3 | yun zhonghe3 |
+------+--------------+
3 rows in set (0.01 sec)

小结:

xtrabacup具有如下特点。

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

(3)能够基于压缩等功能节约磁盘空间和流量;

(4)自动实现备份检验;

(5)还原速度快;

因此建议学会熟练使用xtrabackup进行备份和还原。


热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

48

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

44

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

37

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

22

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

19

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

3

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

268

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

51

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

430

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.4万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 842人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号