当前位置: 首页 > 后端技术 > Node.js

Mysql备份与恢复(二)---逻辑备份

时间:2023-04-03 19:45:36 Node.js

及时的数据库备份可以帮助我们在数据库异常宕机时及时利用备份的数据进行恢复,将数据库宕机的影响降到最低。上一篇文章详细讲解了使用xtrabackup工具进行物理备份和数据恢复。本文主要讲一下如何使用mysql自带的备份工具mysqldump进行逻辑备份和数据恢复。看过上一篇的可以先查看上一篇关于使用xtrabackup进行数据备份与恢复的文章:Mysql备份与恢复(一)---物理备份。上篇文章可能有问题。最后一步成功将数据恢复到/var/lib/mysql目录,但是重启后数据库无法启动。数据库日志的一般存放路径为:/var/log/mysqld.log。定位日志后可以查看错误日志原因:2019-10-14T07:43:22.351861Z0[ERROR]InnoDB:Theinnodb_systemdatafile'ibdata1'mustbewritable2019-10-14T07:43:22.351885Z0[ERROR]InnoDB:innodb_system数据文件'ibdata1'必须是可写的2019-10-14T07:43:22.351892Z0[错误]InnoDB:插件初始化因错误而中止一般错误2019-10-14T07:43:22.952508Z0[错误]插件'InnoDB'初始化函数错误。2019-10-14T07:43:22.952596Z0[错误]插件'InnoDB'注册为存储引擎失败。2019-10-14T07:43:22.952606Z0[错误]无法初始化内置插件.2019-10-14T07:43:22.952613Z0[ERROR]Aborting很明显是因为共享表文件ibdata1不可写,所以解决方法很简单:将/var/lib/mysql下的文件权限改为可写,使用命令:chmod-R777/var/lib/mysql然后重启mysql服务,可以发现mysql服务已经成功启动,备份的数据也已经成功恢复。物理备份和逻辑备份的区别。逻辑备份的优点:备份成sql文件,数据恢复非常简单。逻辑备份与存储引擎无关,可用于通用备份。帮助避免数据损坏。缺点:数据恢复较慢。当要求数据库服务正常时,安排cpu执行恢复操作。物理备份的优点:容易跨平台,基于文件的物理备份。恢复数据非常快,其实就是将备份文件复制回原来的路径。缺点:如果数据量大,文件会很大。备份文件本地存储在磁盘上。如果磁盘出现故障,备份文件可能会丢失。mysqldump逻辑备份mysqldump是mysql自带的一个简单的备份工具。因其操作简单、与不同存储引擎通用而广受欢迎。逻辑备份其实就是把数据库的数据分割成一个sql文件,然后在恢复数据的时候,只需要用图形化工具导入这个sql文件或者在DOS下使用source命令就可以恢复数据了。首先我们看一下mysqldump的基本语法:mysqldump-uroot-proot-h127.0.0.1-P3306testtest>test.sql该命令还有几个参数可以传递:--all-databases:返回启动所有数据库。-t:不导出创建表的语句。-d:不导出数据。-R:导出存储过程和函数。--default-character-set:指定编码方式--result-file:指定导出文件路径和文件名。--skip-triggers:不导出触发器。1、备份前,如果系统中有两个mysql版本,执行mysqldump命令会报错。报错信息如下:mysqldump:Couldn'texecute'SETOPTIONSQL_QUOTE_SHOW_CREATE=1':你的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在第1行(1064)的'OPTIONSQL_QUOTE_SHOW_CREATE=1'附近使用的正确语法首先使用mysqldump--version命令检查mysqldump的当前版本,看它是否一致使用mysql版本:mysqldumpVer10.13Distrib5.5.29,适用于Win64(x86)然后使用rpm-qa|grep-imysql命令查看mysql版本mysql-community-libs-5.7.27-1.el7.x86_64mysql-community-server-5.7.27-1。el7.x86_64mysql57-community-release-el7-8.noarchmysql-community-common-5.7.27-1.el7.x86_64mysql-community-libs-compat-5.7.27-1.el7.x86_64perl-DBD-MySQL-4.023-6.el7.x86_64mysql-community-client-5.7.27-1.el7.x86_64可以看到mysql版本和mysqldump版本不一致导致报错的原因。使用whereismysqld查看mysql安装路径:/usr/local/mysql/bin/mysqld然后将bin目录下的mysqldump复制到/usr/bin/目录下覆盖旧版本的mysqldump,解决版本不一致的问题:cp/usr/local/mysql/bin/mysqldump/usr/bin/mysqldump2.数据备份刚才说的命令,我们用的是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-P3306lxy>/usr/local/lxy.sql(3)将lxy数据库中的users表备份到user_test.sql文件中。mysqldump-uroot-proot-h49.235.28.88-P3306lxyusers>/usr/local/user_test.sql(4)只备份lxy数据库的表结构,不备份lxy1.sql的数据文件。mysqldump-uroot-proot-h49.235.28.88-P3306lxy-d>/usr/local/lxy1.sql(5)备份lxy数据库的表结构和存储过程,不备份lxy2的数据.sql。mysqldump-uroot-proot-h49.235.28.88-P3306lxy-d-R>/usr/local/lxy2.sql(6)不备份表结构,只备份lxy3.sql的数据。mysqldump-uroot-proot-h49.235.28.88-P3306lxy-t>/usr/local/lxy3.sql数据恢复表级恢复(1)登录mysql,选择对应的数据库,然后设置编码。(2)使用source命令导入备份数据。source/usr/local/all.sql单库恢复(1)登录Mysql,删除要恢复的旧数据库。(2)使用source命令导入备份数据。全库恢复(1)退出mysql,使用mysql命令恢复数据。mysql/usr/local/all1.sql所以实际上备份的文件有两个:mysqldump全量备份生成的/usr/local/all1.sql和二进制日志文件/var/lib/mysql/mysql-bin.000003文件。所以,在恢复数据的时候,我们需要分两部分恢复数据:首先恢复全量备份数据:mysql