1、mysqldump 命令工具说明

参数注解:
mysqldump 是采用SQL 级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。现在来讲一下 mysqldump 的一些主要参数:
 
--compatible=name 它告诉 mysqldump ,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi 、mysql323 、mysql40 、postgresql 、oracle 、mssql 、db2 、maxdb 、no_key_options、no_tables_options 、no_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 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY 、VARBINARY 、BLOB 。
 
--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 禁用它。

2、例子

 

1.导出整个数据库(–hex-blob 为有blob数据做的,防止乱码和导入失败用)

mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u root -p --default-character-set=gbk --hex-blob i5a6 > i5a6.sql

2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u root -p i5a6  users> i5a6.sql

3.导出一个数据库结构
mysqldump -u root -p -d --add-drop-table i5a6 >d:/i5a6.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库
常用source 命令
进入MySQL数据库控制台,
MySQL -u root -p
mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:/i5a6.sql

5、Shell脚本

 

上面都是比较散的代码,下面我们来看shell代码

我首先要在本文带给你的是完整脚本。后面会对该脚本做说明。我假定你已经知道shell scripting、 mysqldump和crontab。

数据库导出代码,代码如下

#!/bin/bash

#1.数据库信息定义
mysql_host="192.168.1.1"
mysql_user="root"
mysql_passwd="root"
#sql备份目录
root_dir="/backup"
back_dir="/backup/databases"
data_dir="databases"
store_dir="database"
if [ ! -d $back_dir ]; then
 mkdir -p $back_dir
fi
#备份的数据库数组
db_arr=$(echo "show databases;" | mysql -u$mysql_user -p$mysql_passwd -h$mysql_host)
#不需要备份的单例数据库
nodeldb="test1"
#当前日期
date=$(date -d '+0 days' +%Y%m%d)
#zip打包密码
zippasswd="passwd"
zipname="lczh_"$date".zip"

#2.进入到备份目录
cd $back_dir

#3.循环备份
for dbname in ${db_arr}
do
 if [ $dbname != $nodeldb ]; then
  sqlfile=$dbname-$date".sql"
  mysqldump -u$mysql_user -p$mysql_passwd -h$mysql_host $dbname >$sqlfile
 fi
done

#4.tar打包所有的sql文件
tar -zcPpf $root_dir/$store_dir/$zipname --directory /  $root_dir/$data_dir
#打包成功后删除sql文件
if [ $? = 0 ]; then
 rm -r $data_dir
fi

数据定期清理脚本

作用
定期清理14天前的备份文件
 
 代码如下 复制代码

#!/bin/bash -
#1.参数配置
#mysql文件备份目录
backup_dir1="/backup/test1/"
backup_dir2="/backup/test2/"
backdir_arr=($backup_dir1 $backup_dir2)
#过期文件的时间
keep_time=14
#当前所在星期,crontab在奇数的星期7执行
week=$(date +%W)
flag=`expr $week % 2`
 
#2.清理过期文件,只在奇数星期7执行
if [ $flag -eq 1 ]; then
 for dir in ${backdir_arr[*]}
 do
  if [ -d $dir ]; then
   #查找14天之外的文件数据
   clean_arr=`find $dir -type f -mtime +$keep_time -exec ls {} ;`
   for cleanfile in ${clean_arr}
   do
    rm $cleanfile
   done
  fi
 done
fi

crontab配置

代码如下
0 5 * * 7  执行清理脚本

4、其他

 

最近在备份还原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 -uroot --default-character-set=utf8 --hex-blob -p"kEy31kG_" gameonline | gzip > /data/mysqlback/gameonline`date +%Y-%m-%d_%H%M%S`.sql.gz

最近在备份还原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

MySQL mysqldump 数据备份的更多相关文章

  1. MySQL的数据备份以及pymysql的使用

    一.MySQL的数据备份 语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql #示例: #单库备份 mysqldump -uroot -p123 ...

  2. MySQL之mysqldump数据备份还原

    一 mysqldump指令实现数据备份.mysql指令实现数据还原 经常有朋友问我,DBA到底是做什么的,百科上说:数据库管理员(Database Administrator,简称DBA),是从事管理 ...

  3. MySQL mysqldump数据导出详解

    介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具:它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有的参数详细说明 ...

  4. MySQL mysqldump数据导出详解 --dump-slave 注意事项

    http://www.cnblogs.com/chenmh/p/5300370.html 介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工 ...

  5. MySQL之数据备份、pymysql模块

    一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: #1. 测试+链接 ...

  6. 涂抹mysql笔记-数据备份和恢复

    <>物理备份和逻辑备份<>联机备份和脱机备份<>本地备份和远程备份<>完整备份和增量备份<>完整恢复和增量恢复<>复制表相关文件 ...

  7. mysql之数据备份与还原

    mysql数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备份: 备份的是建表.建库.插入等操作所执行SQL语句,适用于中 ...

  8. MySQL mysqldump数据导出基本操作

    mysqldump mysqldump命令是mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中. 选项 --all-databases, -A:导 ...

  9. Python数据库MySQL之数据备份、pymysql模块

    一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: #1. 测试+链接 ...

随机推荐

  1. leecode 978. Longest Turbulent Subarray(最长连续波动序列,DP or 滚动数组)

    传送门:点我 978. Longest Turbulent Subarray A subarray A[i], A[i+1], ..., A[j] of A is said to be turbule ...

  2. JavaScript各种继承方式(二):借用构造函数继承(constructor stealing)

    一 原理 在子类的构造函数中,通过call ( ) 或 apply ( ) 的形式,调用父类的构造函数来实现继承. function Fruit(name){ this.name = name; th ...

  3. Chrome控制台格式化输出

    一 格式化输出文字 console.log('%c你好','color:green;'); console.log('%c你好%c啊','color:green;','color:blue;'); 二 ...

  4. 不通过调用__Init__来创建实例

    老样子,抛出个问题,我们想要创建一个实例,但是由于某些原因想绕过__init__方法,用别的方式来进行创建. 举个栗子 小贱贱反序列化数据,或者说实现一个类方法将其作为备选的构造函数,都属于这种情况. ...

  5. swift - 16进制颜色扩展(1.支持# 2.支持不带# , 3支持带0X)

    /** * 设置16进制颜色: * 可识别类型 * 1:有# * 2:没有# * 3:含有0X */ extension UIColor{ class func hexadecimalColor(he ...

  6. [Z]sql优化

    前言:平常写的SQL可能主要以实现查询出结果为主,但如果数据量一大,就会突出SQL查询语句优化的性能独特之处.一般的数据库设计都会建索引查询,这样较全盘扫描查询的确快了不少.下面总结下SQL查询语句的 ...

  7. PAT 1068 万绿丛中一点红(20)(测试点分析+思路分析)

    1068 万绿丛中一点红(20 分) 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的 ...

  8. 2018 How to register and install LAUNCH ICARSCAN software ?

    2018 New Version ICARSCAN is available now! Here’s the instruction on how to install ICARSCAN softwa ...

  9. UEFI、BIOS、Secure Boot的关系和知识介绍

      从Windows 8操作系统时代开始,安装操作系统的方法也有了很大的改变,Windows 8采用了Secure Boot引导启动的方式,而不是过去Win XP和Win 7的Legacy启动方式,从 ...

  10. 可迭代对象(Iterable)和迭代器(Iterator)

     迭代是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一 个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1. 可迭代对象 以直接作用于 ...