MySQL shell 备份数据库


背景

之前使用 mysqldump 和 mysql source 的方式备份数据库非常缓慢
有时候要耗费非常长的时间 今天发现有一个可以快速备份数据库的 mysqlshell的方法这里总结一下. 注意如果存在超过 8126的列定义, 可能要慎重一下.

介绍

MySQL Shell 是 MySQL 的一个高级客户端和代码编辑器,是第二代 MySQL 客户端。
第一代 MySQL 客户端即我们常用的 mysql。
相比于 mysql,MySQL Shell 不仅支持 SQL,还具有以下关键特性: 支持 Python 和 JavaScript 两种语言模式。基于此,我们可以很容易地进行一些脚本开发工作。
支持 AdminAPI。AdminAPI 可用来管理 InnoDB Cluster、InnoDB ClusterSet 和 InnoDB ReplicaSet。
支持 X DevAPI。X DevAPI 可对文档( Document )和表( Table )进行 CRUD(Create,Read,Update,Delete)操作。 除此之外,MySQL Shell 还内置了很多实用工具,包括: checkForServerUpgrade:检测目标实例能否升级到指定版本。
dumpInstance:备份实例。
dumpSchemas:备份指定库。
dumpTables:备份指定表。
loadDump:恢复通过上面三个工具生成的备份。
exportTable:将指定的表导出到文本文件中。只支持单表,效果同 SELECT INTO OUTFILE 一样。
importTable:将指定文本的数据导入到表中。
在线上,如果我们有个大文件需要导入,建议使用这个工具。它会将单个文件进行拆分,
然后多线程并行执行 LOAD DATA LOCAL INFILE 操作。不仅提升了导入速度,还规避了大事务的问题。
importJson:将 JSON 格式的数据导入到 MySQL 中,譬如将 MongoDB 中通过 mongoexport 导出的数据导入到 MySQL 中。 在使用时注意:
通过 dumpInstance,dumpSchemas,dumpTables 生成的备份只能通过 loadDump 来恢复。
通过 exportTable 生成的备份只能通过 importTable 来恢复。

工具安装

wget https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-8.0.35-1.el7.x86_64.rpm
wget https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-8.0.35-1.el8.x86_64.rpm yum localinstall mysql-shell-8.0.35-1.el7.x86_64.rpm -y

备份

mkdir -p /dbback/mysql$(date +%Y%m%d)
time mysqlsh -uroot -pTestxxxx <<EOS
util.dumpSchemas(['mysqlapp2206mysql0721'],'/dbback/mysql$(date +%Y%m%d)',{"threads":8})
EOS
tar -cvf /dbback/mysql$(date +%Y%m%d).tar /dbback/mysql$(date +%Y%m%d)
性能:
98% (3.52M rows / ~3.58M rows), 251.30K rows/s, 595.77 MB/s uncompressed, 77.44 MB/s compressed
Dump duration: 00:00:24s
Total duration: 00:00:27s
Schemas dumped: 1
Tables dumped: 10437
Uncompressed data size: 6.64 GB
Compressed data size: 911.37 MB
Compression ratio: 7.3
Rows written: 3523496
Bytes written: 911.37 MB
Average uncompressed throughput: 267.75 MB/s
Average compressed throughput: 36.77 MB/s

恢复

mysql -uroot -pTest@xxxx <<EOS
set global local_infile=1;
create user mysqlapp2206mysql0721@'%' identified by 'Test@xxxx';
grant all on *.* to mysqlapp2206mysql0721@'%' ;
EOS
time mysqlsh -uroot -pTest@xxxx <<EOS
util.loadDump("/mysql2024010110",{loadUsers: true})
EOS 恢复速度为:
10599 chunks (3.52M rows, 6.64 GB) for 10437 tables in 1 schemas were loaded in 4 min 32 sec (avg throughput 30.96 MB/s)
1 accounts were loaded
83 warnings were reported during the load. real 4m33.190s
user 0m36.265s
sys 0m6.281s

异常报错

mysqlapp2206mysql0721@robxdj@@0.tsv.zst error 139: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

虽然出现了这个错误, 但是数据的行数行像是对的.
建议还是需要修改数据库兼容处理一下.

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

  1. linux下mysql定时备份数据库

    linux下mysql定时备份数据库 (2010-10-21 12:40:17) 转载▼ 标签: 杂谈   一.用命令实现备份 首页进入mysql的bin目录 1.备份数据#mysqldump -uu ...

  2. Navicat for MySQL定时备份数据库及数据恢复

    在做数据库修改或删除操作中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库.本篇文章主要讲述Navicat for MySQL定时备份数据库和数据恢复等功能,同时可以定时播放电 ...

  3. Navicat for Mysql 如何备份数据库

    Navicat for Mysql 如何备份数据库 打开界面如下 打开自己的的数据库 点击需要备份的数据库名 未完!!! 文章来自:http://jingyan.baidu.com/article/f ...

  4. MySQL定时备份数据库

    一.MySQL数据备份 1.1. mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump ...

  5. MySQL定时备份数据库(全库备份)

    一.MySQL数据备份 1.1. mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump ...

  6. mysql shell 备份脚本

    使用 mysqldump 备份数据库,通过 FTP 上传到备份服务器,同时在本地保留备份文件. 新建一个 Shell 脚本文件 vi /home/work/backup.sh 添加如下内容: #! / ...

  7. mysql自动备份数据库

    可以选择设置需要备份的库,自动备份压缩,自动删除 7 天前的备份,需要使用 crontab 定时执行. #!/bin/bash # 要备份的数据库名,多个数据库用空格分开 databases=(db1 ...

  8. MySQL定时备份数据库方案

    MySQL数据备份 1.备份全部数据库的数据和结构 mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql 2.备份全部数据库的结构(加 ...

  9. Linux shell实现Mysql异地备份数据库

    #--------------------------Mysqldump异地备份-----------------# #!/bin/bash #start mysqldump back /usr/bi ...

  10. MySql 定时备份数据库

    每天零点备份一次数据库,备份文件放在指定目录(如果目录不存在则新建),按月存储: 将下面这段命令存储为一个 *.bat 文件,添加一个Windows任务计划程序(Task scheduler)指向这个 ...

随机推荐

  1. Mybatis源码5 StatementHandler ,ParameterHandler

    Mybatis5 StatementHandler ,ParameterHandler 一丶概述 前面我们总结了SqlSession--->CachingExecutor--->BaseE ...

  2. LeetCode 图篇

    743. 网络延迟时间 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源节点,v 是目标节点 ...

  3. Java 插入、隐藏/显示、删除Excel行或列

    概述 操作Excel工作表时,对表格中的行或列数据可执行,包括插入.隐藏.显示.删除等在内的多种操作需求,本文将通过Java代码示例演示每种操作的具体实现方法.文中方法使用了Java Excel类库( ...

  4. 神经网络入门篇:深度学习和大脑的关联性(What does this have to do with the brain?)

    深度学习和大脑的关联性 开始讲故事(手动狗头) 深度学习和大脑有什么关联性吗? 关联不大. 那么为什么会说深度学习和大脑相关呢? 当你在实现一个神经网络的时候,那些公式是你在做的东西,你会做前向传播. ...

  5. 想了解Webpack,看这篇就够了

    摘要:Webpack是一种前端资源构建工具,一个静态模块打包器. 1. 摘要 Webpack是一种前端资源构建工具,一个静态模块打包器.在Webpack看来,前端的所有资源文件(js/json/css ...

  6. 数据库面试要点:关于MySQL数据库千万级数据查询和存储

    摘要:百万级.千万级数据处理,核心关键在于数据存储方案设计,存储方案设计的是否合理,直接影响到数据CRUD操作.总体设计可以考虑一下几个方面进行设计考虑: 数据存储结构设计:索引设计:数据主键设计:查 ...

  7. 9个SQL运维常遇到的问题

    摘要:本文重点介绍单个SQL语句持续执行慢的场景. 本文分享自华为云社区<GaussDB(DWS) SQL性能问题案例集>,作者:黎明的风. 本文重点介绍单个SQL语句持续执行慢的场景.我 ...

  8. Python 没有函数重载?如何用装饰器实现函数重载?

    摘要:Python 不支持函数重载.当我们定义了多个同名的函数时,后面的函数总是会覆盖前面的函数,因此,在一个命名空间中,每个函数名仅会有一个登记项(entry). 本文分享自华为云社区<为什么 ...

  9. 一起玩转玩转LiteOS组件:Opus

    摘要:Opus编码器是一个开源的有损声音编码格式,适用于网络实时声音传输,标准格式为RFC 6716,相对于其他编码格式来说,保真性更好. 本文分享自华为云社区<LiteOS组件尝鲜-玩转Opu ...

  10. 云图说|图解DGC:基于华为智能数据湖解决方案的一体化数据治理平台

    摘要:数据湖治理中心DGC,帮助企业快速构建从数据集成到数据服务的端到端智能数据系统,消除数据孤岛,统一数据标准,加快数据变现,实现数字化转型. 本文分享自华为云社区<[云图说]第232期 图解 ...