mysql Backup &recovery

Wesley13
• 阅读 700

如果您要在MySQL数据库中存储任何您不想丢失的内容,那么定期备份数据以保护数据免受损失非常重要。本教程将向您展示两种简单的方法来备份和恢复MySQL数据库中的数据。您还可以使用此过程将数据移动到新的Web服务器。

从命令行备份(使用mysqldump)

如果您具有对Web服务器的shell或telnet访问权限,则可以使用mysqldump命令备份MySQL数据。此命令连接到MySQL服务器并创建SQL转储文件。转储文件包含重新创建数据库所需的SQL语句。这是正确的语法:

$ mysqldump --opt -u [uname] -p [pass] [dbname]> [backupfile.sql]

  • **[uname]**您的数据库用户名
  • **[pass]**数据库的密码(注意-p和密码之间没有空格)
  • **[dbname]**数据库的名称
  • **[backupfile.sql]**数据库备份的文件名
  • [--opt] mysqldump选项

例如,要使用用户名“root”并且没有密码将名为“Tutorials”的数据库备份到文件tut_backup.sql,您应该完成以下命令:

$ mysqldump -u root -p Tutorials> tut_backup.sql

此命令将“Tutorials”数据库备份到名为tut_backup.sql的文件中,该文件将包含重新创建数据库所需的所有SQL语句。

使用mysqldump命令,您可以指定要备份的数据库的某些表。例如,要从“Tutorials”数据库中仅备份php_tutorials和asp_tutorials表,请完成以下命令。每个表名必须用空格分隔。

$ mysqldump -u root -p教程php_tutorials asp_tutorials> tut_backup.sql

有时需要一次备份多个数据库。在这种情况下,您可以使用--database选项,后跟要备份的数据库列表。每个数据库名称必须用空格分隔。

$ mysqldump -u root -p --databases教程文章评论> content_backup.sql

如果要一次备份服务器中的所有数据库,则应使用--all-databases选项。它告诉MySQL转储它在存储中的所有数据库。

$ mysqldump -u root -p --all-databases> alldb_backup.sql

mysqldump命令还有一些其他有用的选项:

--add-drop-table:告诉MySQL在转储中的每个CREATE TABLE之前添加DROP TABLE语句。

--no-data:只转储数据库结构,而不转储内容。

--add-locks:添加您可以在转储文件中看到的LOCK TABLES和UNLOCK TABLES语句。

mysqldump命令有优点和缺点。使用mysqldump的优点是它易于使用,它可以解决您的表锁定问题。缺点是命令锁定表。如果你的表的大小非常大,mysqldump可以锁定用户很长一段时间。

使用Compress备份MySQL数据库

如果你的mysql数据库非常大,你可能想要压缩mysqldump的输出。只需使用下面的mysql backup命令并将输出传递给gzip,然后您将获得输出为gzip文件。

$ mysqldump -u [uname] -p [pass] [dbname] | gzip -9> [backupfile.sql.gz]

如果要提取.gz文件,请使用以下命令:

$ gunzip [backupfile.sql.gz]

恢复MySQL数据库

上面我们将Tutorials数据库备份到tut_backup.sql文件中。要重新创建Tutorials数据库,您应该遵循以下两个步骤:

  • 在目标计算机上创建适当命名的数据库
  • 使用mysql命令加载文件:

$ mysql -u [uname] -p [pass] [db_to_restore] <[backupfile.sql]

看看如何将tut_backup.sql文件恢复到Tutorials数据库。

$ mysql -u root -p Tutorials <tut_backup.sql

要恢复压缩备份文件,您可以执行以下操作:

gunzip <[backupfile.sql.gz] | mysql -u [uname] -p [pass] [dbname]

如果需要还原已存在的数据库,则需要使用mysqlimport命令。mysqlimport的语法如下:

mysqlimport -u [uname] -p [pass] [dbname] [backupfile.sql]

使用PHPMyAdmin备份和恢复

由于许多Web服务提供商使用它,因此假设您安装了phpMyAdmin。要使用PHPMyAdmin备份MySQL数据库,只需按照以下几个步骤操作:

  • 打开phpMyAdmin。
  • 通过单击屏幕左侧列表中的数据库名称来选择数据库。
  • 单击“导出”链接。这应该会显示一个新的屏幕,显示View dump of database(或类似的东西)。
  • 在“导出”区域中,单击“全选”链接以选择数据库中的所有表。
  • 在SQL选项区域中,单击右侧选项。
  • 单击“另存为文件”选项和相应的压缩选项,然后单击“转到”按钮。应出现一个对话框,提示您在本地保存文件。

恢复数据库很容易,也可以备份。进行以下操作:

  • 打开phpMyAdmin。
  • 创建一个适当命名的数据库,然后通过单击屏幕左侧列表中的数据库名称来选择它。如果要在现有数据库上重写备份,请单击数据库名称,选中表名旁边的所有复选框,然后选择“删除”以删除数据库中的所有现有表。
  • 单击SQL链接。这应该会显示一个新屏幕,您可以在其中键入SQL命令或上载SQL文件。
  • 使用浏览按钮查找数据库文件。
  • 单击“Go”按钮。这将上载备份,执行SQL命令并重新创建数据库。

MySQL备份软件

如果您管理多个MySQL服务器,则可以考虑使用MySQL备份的商业解决方案。一种解决方案可能是Backup Bird。它是一个完整的云服务器备份服务,可监控每个备份的进度并备份您的文件以及数据库。

原文链接:http://webcheatsheet.com/sql/mysql_backup_restore.php

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这