设为首页收藏本站我的广告

运维网

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
总共321条微博

每日一博

查看: 3241|回复: 1

[分享] 【重大新闻】 Linux下通过mysqldump备份MySQL数据库成sql文件【顶】

[复制链接]
  • TA的每日心情
    奋斗
    2013-8-23 08:52
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    cnyunwei.com 发表于 2013-5-29 16:34:34 | 显示全部楼层 |阅读模式
    【重大新闻】 阶段1:傻瓜式全备份

    mysqldump -h ip地址 -uusername -ppassword -A >~/name.sql

    此种情况将整个数据库(结构和数据)导出备份成一个sql文件

    阶段2:适当的调整参数达到不同的备份效果

    我们先help一下

    mysqldump --help

    由于help输出过多就不一一列举出来了


    通过远程连接备份

    -h 需要备份服务器的地址

    -u 允许远程连接的账号

    -p允许远程连接账号的密码

    -A 全备份


    常用参数的说明

    -A, --all-databases 备份所有数据库

    --add-drop-database 在每个create database 语句之前增加一个drop database。

    --add-drop-table 在每个create table 语句之前增加一个drop table。

    --add-locks 在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)

    --default-character-set=name 设置导出数据的字符集

    --opt  同--quick --add-drop-table --add-locks --extended-insert --lock-tables。应该给你为读入一个MySQL服务器的尽可能最快的导出。

    -e, --extended-insert  使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)。生成的文件insert语句中回事批量的,提高导入时的速度

    --hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。

    --quick,-q 该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中

    -t, --no-create-info 只导出数据

    -d, --no-data 只导出结构

    阶段3:备份制定定数据库和制定数据库的某个表

    mysqldump -h ip地址 -uusername -ppassword databasename >~/name.sql

    mysqldump -h ip地址 -uusername -ppassword databasename tablename >~/name.sql
    阶段4.1:

    通过读取文本来分库备份数据库成不同的sql文件

    例如我们分别有数据库db1 db2 db3 db4 db5。。。。。。db100当我们每个库数据量都不小的时候需要按数据库分别备份,

    我们也不可能100个库分别写成100个备份的脚本运行,这样我们就需要结合shell脚本中的循环语句来操作

    cat filename.txt |while read i

    do

    备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $i >~/name.sql

    done

    其中filename.txt中保存数据库的库名,每行一个。

    通过这样的做法再结合linux的crond服务我们就可以自动备份了

    阶段4.2

    如果需要分库分表备份那该这么办呢

    这时候做法和分库的时候一样,分别按每个库生成相应表的表明文件一行一个分别命名为db1.txt db2.txt db3.txt db4.txt db5.txt。。。。。。。db100.txt

    通过两次循环分别进行分库分表的备份


    cat filename.txt |while read i

    do

    mkdir $i

    cat $i.txt|while read a

    do

    备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $i $a >$i/$a.sql

    done

    done

    当然我们有时候需要记录下备份的时间

    fn=$(date +"%Y-%m-%d_%H:%M")


    cat filename.txt |while read i

    do

    mkdir $i

    cat $i.txt|while read a

    do

    备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $i $a >$i/$a$fn.sql

    done

    done

    阶段5:

    经过第4阶段之后我们的备份更加细致,那部分的数据出问题我们就恢复那部分的(虽然颗粒度还是有些粗)

    但是我们是不是觉得第4阶段的备份还是很复杂,例如我们存库名和表明的文件就是一个庞大的工程,新建库我们得在库文件中添加一行

    新建表我们得到某个库下面的表的文件中添加一条,这样既繁琐又容易出错,而且容易忘记,维护起来很麻烦。

    现在我们有个办法可以让他自动列出库和库下的表

    mysql -e

    执行

    mysql -e "show databases"

    得到如下结果

    +--------------------+

    | Database |

    +--------------------+

    | information_schema |

    | mysql |

    | performance_schema |

    | test |

    +--------------------+

    但是这样的结果我们没法用,所需要去掉外围的条条框框的东西

    mysql -e "show databases"|sed '1d'

    information_schema

    mysql

    performance_schema

    test


    for db in `mysql -e "show databases"|sed '1d'`

    do

    备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $db >name.sql

    done

    参照这个我们同样可以分库分表备份

    mysql databasename -e "show tables"|sed '1d'

    fn=$(date +"%Y-%m-%d_%H:%M")

    for db in `mysql -e "show databases"|sed '1d'`

    do

    mkdir $db

    for tables in `mysql $db -e "show tables"|sed '1d'`

    do

    备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $db $tables >$db/$tables$fn.sql

    done

    done


    暂且完毕

    运维网 感谢您的阅读
    [发帖际遇]: cnyunwei.com 捡了钱没交公 威望 降了 3 . 幸运榜 / 衰神榜
    回复过本主题
    的还回复过:
  • TA的每日心情
    开心
    2017-10-11 12:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    life 发表于 2017-11-8 13:29:29 | 显示全部楼层
    很好的总结
    [发帖际遇]: life 发帖时在路边捡到 5 金钱,偷偷放进了口袋. 幸运榜 / 衰神榜
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|申请友链|sitemap|手机版|小黑屋|Archiver|运维网 ( 京ICP备16008201号  

    GMT+8, 2018-11-15 20:21 , Processed in 0.264289 second(s), 38 queries , XCache On.

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表