正文
mysql怎么备份快照 mysql怎么备份数据库
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
mysql如何快速备份
来源:知乎
河南-老宋(志强)
问题描述的不是非常的清晰
使用mysqldump备份时一般会会加上--single-transaction参数,这里假设你是加了这个参数。
一 加速备份
1 加了single-transaction参数 备份时 需要先flush table with read lock 这个过程中会有一个锁表的过程,如果有事务或语句正在执行,没有结束,那么备份进程会一直等待,并且阻塞别的事务,那么也会影响业务。所以要先确认备份的时候没有大的事务在运行。
具体 single-transaction的加锁可以参考 我的博客:mysqldump备份时加single-transaction会不会加锁
2 mysqldump是单进程的,没有办法并行,但现在机器的瓶颈多是出现在IO方面,可以使用更了的IO设备加快速度
3 mysqldump时如果空间够的话,不要边压缩边备份
二 加速恢复
1 关闭binlog:不写入Binlog会大大的加快数据导入的速度
2 innodb_flush_log_at_trx_commit=0
3 更好的配置
建议:
一 如果非要使用逻辑备份,可以考虑mysqldumper, mysqlpump(5.7)这两个工具去备份,这两个在备份的时候支持并行操作,mysqldumper还可以对单表进行恢复,在只需要恢复单表的情况下,恢复速度会大大加快
二 使用物理备份 xtrabackup (open source),MEB(oracle提供,收费): 他们的备份原理是基于mysql crash recover, 备份速度 是和逻辑备份的相差不太大。但是恢复速度却有很大的提升。
逻辑备份 备出来的是sql语句文件,恢复时需要一条一条的执行sql,所以恢复很慢。
而物理备份和还原的速度 相当于直接copy文件,所以恢复的时候性能有很大的提升
并且这两个软件还支持并行,效果更好。
逻辑备份最大的优点是 备份好的文件经压缩后占用空间较小,最大缺点恢复太慢
物理备份可以很快的恢复,但是备份好的文件压缩后占用空间比逻辑备份要大。
使用云,你做为用户可以不用考虑这些事情。
附:xtrabackup的并行参数
Parallel local backups
Parallel compression
Parallel encryption
Parallel apply-log
Gary Chen
《MySQL DBA修炼之道》作者。从事数据库领域10多年。
1.一般来说,你只有靠更好的硬件. 软件没有大的变动的情况下不可能突破硬件瓶颈;
2. mysqldump默认的导出选项已经可以了,单进程的工具不要期望太多,TommyChiu介绍的工具可试试.;
3. 导出的时候观察下系统,如果是cpu瓶颈,你基本无解.如果是swap问题,看是否是因为内存不够;
4. 恢复的时候主要是一个参数:innodb_flush_log_at_trx_commit=2
TommyChiu
mk-parallel-dump 试试
mysql如何备份数据库
MySQL数据库可以使用mysqldump命令来实现备份,步骤如下:
1. 首先,你需要确保MySQL服务器中已存在要备份的数据库。
2. 然后,使用mysqldump命令来备份数据库:
mysqldump -u [username] -p[password] --all-databases [backup_file].sql
其中,-u参数表示MySQL的用户名,-p参数表示MySQL的密码,[database_name]表示要备份的数据库名,[backup_file].sql即为生成的备份文件。
3. 你还可以使用--all-databases参数来备份MySQL服务器中的所有数据库:
mysqldump -u [username] -p[password] --all-databases [backup_file].sql
4. 如果要定时备份MySQL数据库,可以使用crontab来指定备份的时间和频率。例如:
目前,比较好用的MySQL客户端工具推荐,根据从OS兼容性、收费模式、产品体验、云适配、功能完整度等角度,这里推荐的MySQL 图形化客户端工具 NineData。
NineData是一款非常有特色的数据库SQL开发产品,对MySQL常用功能支持非常完整,包括智能的SQL补全、SQL执行历史、结果集编辑、数据对比、结构对比、数据迁移与复制等。它采用SaaS架构模式,用户不仅可以免费使用,而且无需下载安装,上手比较简单。NineData产品更新迭代比较敏捷,对于开发者的新需求响应比较迅速。另外,该产品在多云适配上是其重要的强项,支持多种连接和访问云数据库的方式,对阿里云、腾讯云、华为云、AWS等都有比较好的支持。另外,也适配国内比较流行的PolarDB、GaussDB、TDSQL等数据库。
MySQL使用LVM快照实现备份
新建一个lvm磁盘,这里我建的lv为mydatalv,挂载到了/data下
[root@localhost
~]#
lvs
LV
VG
Attr
LSize
Pool
Origin
Data%
Meta%
Move
Log
Cpy%Sync
Convert
mydatalv
mydata
-wi-ao----
1.00g
[root@localhost
~]#
df
-h
文件系统
容量
已用
可用
已用%
挂载点
/dev/mapper/mydata-mydatalv
976M
2.6M
907M
1%
/data
将原数据库文件复制到/data目录下
[root@localhost
~]#
cp
-a
/var/lib/mysql
/data/
修改配置文件,将mysql数据库文件放在lvm盘中,二进制文件放在非lvm盘的/var/lib/mysql/目录下
[root@ns1
~]#
vim
/etc/my.cnf
[mysqld]
log_bin=/var/lib/mysql/mysql-bin
datadir=/data/mysql
[root@localhost
~]#
service
mariadb
restart
[root@localhost
~]#
ls
/data/mysql
aria_log.00000001
ibdata1
ib_logfile1
mysql-bin.000001
mysql-bin.000003
performance_schema
aria_log_control
ib_logfile0
mysql
mysql-bin.000002
mysql-bin.index
test
可以看到重启后数据库文件已存放在了/data/mysql目录中了
对mysql进行锁表备份
[root@localhost
~]#
mysql
-e
'flush
tables
with
read
lock;'
锁表
[root@localhost
~]#
mysql
-e
'flush
logs;'
对日志进行滚动,
[root@localhost
~]#
mysql
-e
'show
master
status;'
/root/back.$(date
+%F+%T)
[root@localhost
~]#
ls
back.2016-07-13+10:14:29
对lv创建快照
[root@localhost
~]#
lvcreate
-L
1G
-n
mysqlback
-p
r
-s
/dev/mydata/mydatalv
释放锁
[root@localhost
~]#
mysql
-e
'unlock
tables;'
在别的磁盘上创建备份目录,只读挂载快照后备份至备份目录
[root@localhost
~]#
mkdir
/myback
[root@localhost
~]#
mount
-r
/dev/mydata/mysqlback
/mnt
[root@localhost
~]#
cp
-a
/mnt/mysql
/myback
修改表内容,然后删除掉数据库文件内容即/data/mysql中的内容
[root@localhost
~]#
mysql
MariaDB
[hellodb]
use
hellodb;
MariaDB
[hellodb]
insert
into
classes
(class,numofstu)
values
('xxoo',39);
[root@localhost
~]#
rm
-rf
/data/*
修改配置文件中二进制日志和数据库文件的位置
[root@localhost
~]#
vim
/etc/my.cnf
[mysqld]
log_bin=/data/mysql/mysql-bin
datadir=/data/mysql
利用/myback/中的内容还原
[root@localhost
~]#
cp
-a
/myback/*
/data/
[root@localhost
~]#
service
mariadb
restart
利用二进制日志还原快照后的操作,由下面这个文件来查看快照执行时二进制日志的位置
[root@localhost
~]#
cat
back.2016-07-13+10\:14\:29
File
Position
Binlog_Do_DB
Binlog_Ignore_DB
mysql-bin.000014
245
将000014中245之后的操作做成sql文件,进行还原
[root@localhost
~]#
mysqlbinlog
--start-position=245
/var/lib/mysql/mysql-bin.000014
binlog.sql
[root@localhost
~]#
mysql
/root/binlog.sql
查看恢复情况
[root@localhost
~]#
mysql
MariaDB
[(none)]
use
hellodb;
MariaDB
[hellodb]
select
*
from
classes;
+---------+----------------+----------+
|
ClassID
|
Class
|
NumOfStu
|
+---------+----------------+----------+
|
1
|
Shaolin
Pai
|
10
|
|
2
|
Emei
Pai
|
7
|
|
3
|
QingCheng
Pai
|
11
|
|
4
|
Wudang
Pai
|
12
|
|
5
|
Riyue
Shenjiao
|
31
|
|
6
|
Lianshan
Pai
|
27
|
|
7
|
Ming
Jiao
|
27
|
|
8
|
Xiaoyao
Pai
|
15
|
|
9
|
xxoo
|
39
|
+---------+----------------+----------+
9
rows
in
set
(0.00
sec)
mysql怎么备份快照的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql怎么备份数据库、mysql怎么备份快照的信息别忘了在本站进行查找喔。