`

备份和恢复MySQL DataBase

阅读更多

back windows_system mysql database:

------------------use help --------------------------
mysql -? | mysql --help
mysqldump -? | mysql --help

 

------------------dump sql script -------------------
mysqldump -u root -p mydb --default-character-set=utf8 > mydb.sql

mysqldump -u root -p mydb > mydb.sql

 

------------------import sql script -------------------


mysql -u root -p mydb default-character-set=utf8 < mydb.sql

mysql -u root -p mydb < mydb.sql

 

 

 

 

========================================================================

我有台机器上跑的是suse 8,想升级一下整个系统,上面的mysql有超过3个G的东东,在重装系统时难免要把数据库备份。我使用的是备份mysql数据库的常见工具,mysqldump。在备份时,我使用的语法如:
mysqldump --opt DWBdatabase >; DWBdatabase.sql 。

阅读mysql的手册才知道,其实--opt在4.1版本以上是默认打开的(As of MySQL 4.1, --opt is on by default, but can be disabled with --skip-opt)。在导入数据时我先用create database DWBdatabase,然后用mysql DWBdatabase <  DWBdatabase.sql 。这里有一点不方便的是,得先手工建立数据库然后才能导入,当有多个数据库要导入时比较麻烦。不过如果在导出时添加选项--database,即 mysqldump --opt --database DWBdatabase >; DWBdatabase.sql 就可以避免这样的麻烦而直接导入数据库。个人的感觉是,仔细阅读手册还是很有用的。总结一下常用用法:


mysqldump最常见的用法是:

shell>; mysqldump --opt -u user --password="password" db_name >; backup-file.sql
或者压缩备份文件:
#mysqldump --opt -u user --password="password" database | bzip2 -c >; database.sql.bz2

在dbname已经存在的情况下,读入备份文件恢复数据库,

shell>; mysql db_name < backup-file.sql (备注:建议使用--database选项)

或者

shell>; mysql -e "source /path-to-backup/backup-file.sql" db_name

mysqldump 还可以用于在两个mysql server之间复制数据:

shell>; mysqldump --opt db_name | mysql --host=remote_host -C db_name

也可以同时备份多个数据库:

shell>; mysqldump --databases db_name1 [db_name2 ...] >; my_databases.sql

如果想一次备份整个数据库使用 --all-databases 选项:

shell>; mysqldump --all-databases >; all_databases.sql

常见选项:
--add-drop-table:添加DROP TABLE语句
--add-locks:用LOCK TABLES 和 UNLOCK TABLES  语句封装插入每个表格的语句,能加速数据导入速度
--all-databases, -A: 备份所有数据库
--compress, -C:用于在两个server之间复制时压缩数据
--databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump 把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldum把每个名字都当作为数据库名。CREATE DATABASE IF NOT EXISTS db_name and USE db_name 会被添加到导出文件里。
--force, -f:即使发现sql错误,仍然继续备份
--host=host_name, -h host_name:备份主机名,默认为localhost
--no-data, -d:只导出表结构
--opt:等同于激活--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset这些选项
--password[=password], -p[password]:密码
--port=port_num, -P port_num:制定TCP/IP连接时的端口号
--protocol={TCP | SOCKET | PIPE | MEMORY}:制定连接所用的协议
--quick, -q:快速导出
--socket=path, -S path:当连接至localhost时,制定socket文件
--tables:覆盖 --databases or -B选项,后面所跟参数被视作表名
--user=user_name, -u user_name:用户名
--xml, -X:导出为xml文件

 

 

=========================================================================

 

  数据库备份是很重要的。如果定期做好备份,这样就可以在发生系统崩溃时恢复数据到最后一次正常的状态,把损失减小到最少。MySQLl提供了一个mysqldump命令,我们可以用它进行数据备份,下面假设要备份tm这个数据库:

  #mysqldump -u root -p tm > tm_050519.sql

  按提示输入密码,这就把tm数据库所有的表结构和数据备份到tm_050519.sql了,因为要总进行备份工作,如果数据量大会占用很大空间,这时可以利用gzip压缩数据,命令如下:

  #mysqldump -u root -p tm | gzip > tm_050519.sql.gz

  系统崩溃,重建系统时,可以这样恢复数据:

  #mysql -u root -p tm < tm_050519.sql

  从压缩文件直接恢复:

  #gzip < tm_050519.sql.gz | mysql -u root -p tm

  当然,有很多MySQL工具提供更直观的备份恢复功能,比如用phpMyAdmin就很方便。但我认为,mysqldump是最基本、最通用的。

 

 

========================================================================

最近在备份还原mysql 的时候发现,视图还原报错,无法创建视图,在网上查了下资料,找到以下信息:
1 、如果备份的数据库含有视图, 还原时需要把my.ini 中的character-set 改为latin1, 才能够还原视图。
2 、还原后, 需要把latin1 改为gb2312, 否则存储过程不能使用.
3 、存储过程不能随着数据库备份,对于存储过程的还原,还是通过手工复制SQL 语句,在QUERY 里执行。
感觉有点麻烦,于是又寻找其它方法,通过以下方法备份mysql 数据库后,再进行还原,就没有报错,视图也还原进去了:
#windows mysql 备份还原,可不用修改my.ini 来还原视图( 已验证)
mysqldump -uroot -p123 --default-character-set=gbk --opt --extended-insert=false --triggers -R --hex-blob -x db_name > f:\db.sql
 
mysql -uroot -p123 -f db_name < f:\db.sql
 
linux:
SQL 来备份 MyISAM 表:
/usr/local/mysql/bin/mysqldump -uroot -p123 --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob -x db_name > db_name.sql
 
使用以下 SQL 来备份 Innodb 表:
/usr/local/mysql/bin/mysqldump -uroot -p123 --default -character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob --single-transaction db_name > db_name.sql
 
参数注解:
mysqldump 是采用SQL 级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。现在来讲一下 mysqldump 的一些主要参数:
--compatible=name 它告诉 mysqldump ,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansimysql323mysql40postgresqloraclemssqldb2maxdbno_key_optionsno_tables_optionsno_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。
--complete-insert -c 导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。
--default-character-set=charset 指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。
--disable-keys 告诉 mysqldump INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。
--extended-insert = true|false 默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。
--hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARYVARBINARYBLOB
--lock-all-tables -x 在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction --lock-tables 选项。
--lock-tables 它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。
--no-create-info -t 只导出数据,而不添加 CREATE TABLE 语句。
--no-data -d 不导出任何数据,只导出数据库表结构。
--opt 这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。
--quick -q 该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。
--routines -R 导出存储过程以及自定义函数。
--single-transaction 该选项在导出数据之前提交一个 BEGIN SQL 语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB BDB 。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。
--triggers 同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。

 

分享到:
评论

相关推荐

    delphi备份和还原MySql数据库.zip

    在描述中提到的"delphi备份和还原MySql数据库.zip"源码,就是一个具体的实例,演示了如何在Delphi中实现对MySQL数据库的备份与恢复功能。 首先,我们需要理解备份和还原的基本概念。数据库备份是将数据库中的所有...

    mysql数据库备份和恢复工具

    对于开发和运维人员,有时还需要备份和恢复MySQL的配置文件、日志文件以及自定义存储过程等源码。这些可以通过常规的文件复制和粘贴操作完成,确保所有相关文件在备份和恢复过程中都得到妥善处理。 六、备份策略 ...

    C#实现备份、还原MySql数据库

    对于使用MySQL数据库的系统,定期备份和恢复数据库可以防止数据丢失,确保业务连续性。本篇将详细讲解如何使用C#语言来实现MySQL数据库的备份与还原功能,并探讨如何通过线程设置定时自动备份。 首先,我们需要了解...

    实验报告六 MYSQL备份与恢复.docx

    综上所述,通过对MySQL日志的管理和数据库的备份恢复操作的学习,可以帮助我们更好地维护数据库系统的稳定性和安全性。同时,通过数据的导出与导入操作,也可以方便地进行数据迁移等工作。这些操作对于数据库管理员...

    mysql运维必须熟练掌握备份和恢复的技术

    一、 备份恢复策略 在进行备份或恢复操作时需要考虑一些因素: 1. 确定要备份的表的存储引擎是事务型还是非事务型,两种不同的存储引擎备份方式在处理数据一致性方面是不太一样的。 2. 确定使用全备份还是增量...

    java备份与恢复mysql数据库源码

    在提供的压缩包`mysql_bak`中,可能包含了上述的Java源码和相关说明,你可以参考这些代码来理解和实现自己的数据库备份恢复功能。记得在使用这些代码前,要根据你的环境配置进行适当的修改,确保安全性和正确性。 ...

    mysql数据库备份与恢复

    首先,`MysqlBackup.java` 文件很可能是实现备份和恢复功能的核心Java类。在SpringBoot中,我们可以利用JDBC(Java Database Connectivity)API或者Spring Data JPA等库来与MySQL交互。以下是一般备份和恢复过程的...

    PHP备份和还原MySQL数据库代码

    在实际项目中,你可以将备份和恢复功能封装成类或者函数,方便在多个地方复用。此外,还可以添加错误处理、日志记录、邮件通知等功能,以提高系统的稳定性和可维护性。 综上所述,PHP备份和还原MySQL数据库涉及的...

    java备份与恢复MYSQL数据库

    Java作为跨平台的编程语言,提供了丰富的API和库来操作数据库,包括进行数据库的备份与恢复。下面将详细阐述如何使用Java实现MySQL数据库的备份与恢复。 首先,备份MySQL数据库通常涉及两种主要方式:全量备份和...

    阿里MySQL备份恢复指南

    总的来说,阿里MySQL备份恢复指南是一份全面的资源,它将帮助用户深入了解阿里云环境下的数据库备份与恢复机制,提高数据管理和灾难恢复的能力。通过掌握这些知识,用户可以更自信地应对可能出现的数据安全挑战,...

    MYSQL数据库的备份与恢复.pdf

    本章将详细介绍MYSQL数据库的备份与恢复,包括数据库目录的内容、如何备份和恢复数据、如何使用日志、如何使用内建复制等。 MYSQL数据库目录是MYSQL数据库服务器存放数据文件的地方,不仅包括有关表的文件,还包括...

    mysql数据备份和还原的常用命令

    MySQL 数据备份和还原是数据库管理中非常重要的一步,能够防止数据丢失和恢复数据库。下面将介绍 MySQL 数据备份和还原的常用命令。 MySQL 数据备份命令 1. 备份 MySQL 数据库的命令 mysqldump -hhostname -...

    mysql数据库备份和恢复[定义].pdf

    MySQL 数据库备份和恢复是数据库管理中非常重要的一步,通过备份和恢复,可以确保数据的安全和可靠性。本文将详细介绍 MySQL 数据库备份和恢复的方法和步骤。 一、 MySQL 数据库备份 MySQL 数据库备份是将数据库中...

    linux运维学习笔记:Mysql备份与恢复.pdf

    衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间。 常用的备份方式有三种:物理备份、全量备份和增量备份。 1. 物理...

    Linux下mysql数据库备份以及恢复shell脚本

    总结,通过编写和使用`databackup.sh`和`datarestore.sh`这样的Shell脚本,Linux用户可以方便地对MySQL数据库进行自动化备份和恢复,确保在系统故障或数据丢失时能够迅速恢复服务,保障业务连续性。这两个脚本是IT...

    C#实现MySQL数据库的备份、还原和初始化

    本文将详细介绍如何使用C#来实现MySQL数据库的初始化、备份和还原功能。 首先,数据库的初始化通常指的是创建一个新的数据库。在C#中,你可以通过执行SQL语句来完成这一过程。在给出的代码示例中,`GetExecute`方法...

    MySQL Database Usage & Administration_MYSQL_

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,广泛应用于各种规模的企业、网站和应用程序中。本文将深入探讨MySQL的使用和管理,旨在帮助你更好地理解和掌握这个强大的数据库系统。 一、MySQL简介 MySQL...

    Mysql全量备份与配套恢复脚本,可使用crontab定时自动全量备份

    接下来,我们来看 `restore.sh` 脚本,这是用来从备份恢复数据库的关键部分: 1. **导入 SQL 文件**:恢复过程通常涉及到读取 `backup.sh` 生成的 SQL 文件并执行它。这可以通过使用 `mysql` 命令行客户端完成,...

    MySql数据备份恢复

    MySQL数据库是广泛应用于Web开发和企业级应用的重要组件,它为用户提供可靠的数据存储和管理功能。在日常操作中,为了防止意外数据丢失或...同时,结合自动化脚本和监控机制,可以进一步提高备份恢复的效率和可靠性。

    mysql数据库备份与还原

    对于MySQL这样的广泛使用的数据库系统而言,了解并掌握其备份和恢复机制对于确保业务连续性至关重要。 #### 二、MySQL数据库备份方法 MySQL提供了多种备份方式,包括但不限于物理备份和逻辑备份。其中,最常用的是...

Global site tag (gtag.js) - Google Analytics