首页 > 编程知识 正文

mysql如何备份,mysql数据库备份文件在哪里

时间:2023-05-06 20:24:10 阅读:156632 作者:1573

及时备份数据库有助于在数据库停机时及时使用备份数据进行恢复,以最大限度地减少数据库停机造成的影响。 上一页详细介绍了使用xtrabackup工具进行的物理备份和数据恢复。 此页面介绍如何使用mysqldump (MySQL附带的备份工具)执行逻辑备份和数据恢复。 如果您看过上一篇文章,请查看上一篇文章中关于使用xtrabackup备份和恢复数据的信息。 Mysql备份和恢复---物理备份。

前言

在上一篇文章中,在最后一步中成功将数据恢复到/var/lib/mysql目录,但可能存在最后一次重新启动数据库后仍无法启动的问题。 数据库日志通常包含路径/var/log/mysqld.log,通过搜索日志可以了解错误日志的原因。

2019-10-14t 0733604336022.351861 z0 [ error ] innodb : the innodb _ system datafile ' ibdata1' must be writable

2019-10-14t 0733604336022.351885 z0 [ error ] innodb : the innodb _ system datafile ' ibdata1' must be writable

2019-10-14t 0733604336022.351892 z0 [ error ] innodb : plugininitializationabortedwitherrorgenericerror

2019-10-14t 0733604336022.952508 z0 [ error ] plugin ' innodb ' initfunctionreturnederror。

2019-10-14t 0733604336022.952596 z0 [ error ] plugin ' innodb ' registrationasastorageeenginefailed。

2019-10-14t 0733604336022.952606 z0 [ error ] failedtoinitializebuiltinplugins。

2019-10-14t 0733604:22.952613 z0 [ error ] aborting

很明显,共享表文件ibdata1是不可写的,因此解决方案很简单。 将/var/lib/mysql下的文件权限更改为可写,然后使用命令。

chmod -R 777 /var/lib/mysql

然后,重新启动mysql服务,您会看到mysql服务已成功启动,备份数据已成功恢复。

物理备份和逻辑备份的区别

逻辑备份

好处:

备份到sql文件并恢复数据很简单。

逻辑备份与存储引擎无关,因此可以通用地进行备份。

有助于避免数据损坏。

坏处:

数据恢复速度慢。

如果数据库服务正常,则必须计划cpu进行恢复操作。

物理备份

好处:

易于进行跨平台、基于文件的物理备份。

数据恢复很快,实际上是将备份文件复制到原始路径。

坏处:

数据量大的话文件就大。

备份文件存储在磁盘的本地,如果磁盘有问题,备份文件很容易丢失。

mysqldump逻辑备份

mysql是mysql附带的一种简单的备份工具,由于其操作简单,并且与不同的存储引擎通用,所以很受欢迎。 逻辑备份实际上是将数据库中的数据拆分为一个sql文件,在恢复数据时只需使用图形工具导入此sql文件,或者在dos下使用source命令导入即可恢复数据首先让我们来看看mysqldump的基本语法。

mysqldump-uroot-proot-h 127.0.0.1-p 3306 test test.SQL

命令有几个参数。

- -所有数据库:备份所有数据库。

-t :不导出创建表的语句。

-d :不导出数据。

-R :导出存储过程和函数。

--default-character-set :指定代码

--result-file :指定导出文件的路径和文件名。

--skip-triggers :不导出触发器。

1 .备份前踩孔

如果系统中存在两个版本的mysql,则运行mysqldump命令将报告错误并显示以下错误消息:

mysqldump : couldn ' texecute ' setoption SQL _ quote _ show _ create=1' : youhaveanerrorinyoursqlsyntax; checkthemanualthatcorrespondstoyourmysqlserversionfortherightsyntaxtousenear ' option SQL _ quote _ show _ create=1' arved

首先使用mysql

dump --version命令查看mysqldump当前版本,看是否和mysql版本一致:

mysqldump Ver 10.13 Distrib 5.5.29, for Win64 (x86)

再使用rpm -qa | grep -i mysql命令查看mysql版本

mysql-community-libs-5.7.27-1.el7.x86_64

mysql-community-server-5.7.27-1.el7.x86_64

mysql57-community-release-el7-8.noarch

mysql-community-common-5.7.27-1.el7.x86_64

mysql-community-libs-compat-5.7.27-1.el7.x86_64

perl-DBD-MySQL-4.023-6.el7.x86_64

mysql-community-client-5.7.27-1.el7.x86_64

可以看到mysql版本与mysqldump版本不一致造成的报错原因,使用whereis mysqld查看mysql安装路径:

/usr/local/mysql/害怕的火/mysqld

然后将同处于害怕的火目录下的mysqldump拷贝到/usr/害怕的火/目录下覆盖旧版本的mysqldump即可解决版本不一致的问题:

cp /usr/local/mysql/害怕的火/mysqldump /usr/害怕的火/mysqldump

2. 数据备份

刚才说过了命令,我们使用mysqldump是可以进行多种不同方案的备份的。接下来我们简单看几种备案方案:

(1) 全库备份:使用全库备份会将所有数据库中的数据全部备份到同一个sql文件中。

mysqldump -uroot -proot -h49.235.28.88 -P3306 --all-databases> /usr/local/all.sql

(2) 备份单个数据库:将lxy数据库中的数据备份到sql文件lxy.sql中。

mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy> /usr/local/lxy.sql

(3) 备份lxy数据库中的users表到user_test.sql文件。

mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy users> /usr/local/user_test.sql

(4) 只备份lxy数据库的表结构,不备份数据到lxy1.sql文件中。

mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy -d> /usr/local/lxy1.sql

(5) 备份lxy数据库的表结构和存储过程,不备份数据到lxy2.sql中。

mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy -d -R> /usr/local/lxy2.sql

(6) 不备份表结构,只备份数据到lxy3.sql。

mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy -t> /usr/local/lxy3.sql

数据恢复

表级恢复

(1) 登录mysql,选择对应的数据库,然后设置编码。

(2) 使用source命令导入备份数据。

source /usr/local/all.sql

单库恢复

(1) 登录Mysql,删除要恢复的旧数据库。

(2) 使用source命令导入备份数据。

全库恢复

(1) 退出mysql,使用mysql命令恢复数据。

mysql < /usr/local/all.sql -p

然后在控制台输入密码,密码不会显示别以为没有输入成功。

mysqldump全量备份 + mysql害怕的火log增量备份

刚才已经将mysql全量备份及数据恢复的方式讲完了,可以发现mysqldump的使用方式很简单,但是使用mysqldump进行数据备份会存在一个问题:恢复数据时会丢失掉从备份点开始的更新数据,所以我们需要结合mysql害怕的火log进行二进制日志增量备份,首先修改/etc/my.cnf文件,在[mysqld]下启用二进制日志:

log_害怕的火=mysql-害怕的火

开启二进制日志,数据库的任何更新操作都会记录到二进制日志中。接下来看下mysqldump全量备份 + mysql害怕的火log增量备份如何进行操作:

首先进行全量备份,添加--flush-logs参数生成新的二进制日志文件:

mysqldump --single-transaction --flush-logs --master-data=2 > /usr/local/all1.sql

所以说实际上备份有两个文件:mysqldump全量备份生成的/usr/local/all1.sql以及二进制日志文件/var/lib/mysql/mysql-害怕的火.000003文件。所以恢复数据时,我们需要分成两部分去进行恢复数据:

先恢复全量备份的数据:

mysql < /usr/local/all1.sql -p

然后输入密码确认恢复数据。

然后恢复增量备份:

mysql害怕的火log /var/lib/mysql/mysql-害怕的火.000003 | mysql -p

这样就可以将数据恢复到恢复点时的数据。而且mysql害怕的火log可以通过时间间隔来精确地恢复某个时刻的数据,我们看看bonlog几个可传参数:

--start-datetime:从某个时间点开始恢复数据

--stop-datetime:恢复截止到某个时间内的数据

--start-position:开始恢复数据的位置信息,位置信息可以从日志文件的log_pos中获取。

--end-position:截止恢复数据的位置信息,位置信息可以从日志文件的log_pos中获取。

比如我们需要恢复2019-01-01到2019-09-09的数据,我们在恢复增量日志时就可以这么书写mysql害怕的火log命令:

mysql害怕的火log --start-datetime="2019-01-01 00:00:00" --stop-datetime="2019-09-09 23:59:59" /var/lib/mysql/mysql-害怕的火.000003 | mysql -p

欢迎关注公众号:程序猿舒适的太阳。

欢迎关注公众号:程序猿舒适的太阳。文章原创于微信公众号,本平台不定时更新。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。