MySQL shell 备份数据库
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 备份数据库的更多相关文章
- linux下mysql定时备份数据库
linux下mysql定时备份数据库 (2010-10-21 12:40:17) 转载▼ 标签: 杂谈 一.用命令实现备份 首页进入mysql的bin目录 1.备份数据#mysqldump -uu ...
- Navicat for MySQL定时备份数据库及数据恢复
在做数据库修改或删除操作中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库.本篇文章主要讲述Navicat for MySQL定时备份数据库和数据恢复等功能,同时可以定时播放电 ...
- Navicat for Mysql 如何备份数据库
Navicat for Mysql 如何备份数据库 打开界面如下 打开自己的的数据库 点击需要备份的数据库名 未完!!! 文章来自:http://jingyan.baidu.com/article/f ...
- MySQL定时备份数据库
一.MySQL数据备份 1.1. mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump ...
- MySQL定时备份数据库(全库备份)
一.MySQL数据备份 1.1. mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump ...
- mysql shell 备份脚本
使用 mysqldump 备份数据库,通过 FTP 上传到备份服务器,同时在本地保留备份文件. 新建一个 Shell 脚本文件 vi /home/work/backup.sh 添加如下内容: #! / ...
- mysql自动备份数据库
可以选择设置需要备份的库,自动备份压缩,自动删除 7 天前的备份,需要使用 crontab 定时执行. #!/bin/bash # 要备份的数据库名,多个数据库用空格分开 databases=(db1 ...
- MySQL定时备份数据库方案
MySQL数据备份 1.备份全部数据库的数据和结构 mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql 2.备份全部数据库的结构(加 ...
- Linux shell实现Mysql异地备份数据库
#--------------------------Mysqldump异地备份-----------------# #!/bin/bash #start mysqldump back /usr/bi ...
- MySql 定时备份数据库
每天零点备份一次数据库,备份文件放在指定目录(如果目录不存在则新建),按月存储: 将下面这段命令存储为一个 *.bat 文件,添加一个Windows任务计划程序(Task scheduler)指向这个 ...
随机推荐
- 中间件是开箱即用的吗?为什么要开发中间件adapter?
本文分享自华为云社区<中间件是开箱即用的吗?为什么要开发中间件adapter?>,作者:张俭. 中间件在很多系统中都存在 在一个系统里面,或多或少地都会有中间件的存在,总会有数据库,其他的 ...
- $router.push跳转页面传参
$router.push传参与收参 //传参 <el-button type="text" @click="$router.push('/games/Match?i ...
- 互联网公司五八同城(58.com)研发效能团队建设之路
这是「二三线中型互联网公司研发效能团队规模.职能划分和优劣势分析」的一个铺垫,一个背景.因为如果不写此篇,大家可能仅得到一些经验总结,恐怕难以获取当时为啥做出那个决定.做决定要有上下文环境,要有场景才 ...
- 【华为云技术分享】STM32L476移植华为LiteOS系列教程(二)---开发前准备
在进行移植华为LiteOS开发工作之前,我们是需要提前做一些准备工作,如:开发工具.环境.源码等相关事宜. 一.准备开发工具 STM32CubeMX用于生成工程文件:STM32CubeMX下载地址 I ...
- 华为云MVP朱有鹏:做IoT开发乐趣无穷,年轻开发者更要厚积薄发
[摘要] 可以预见的是,AIoT会是未来一段时间主流的技术趋势方向,当前也有不少科技巨头涌入其中,蓄势待发,而5G的到来加速了AIoT产业的扩张速度,所以如华为云MVP朱有鹏所说,年轻的开发者应该要拥 ...
- 实时入库不用愁,HStore帮分忧
本文分享自华为云社区<直播回顾 | 实时入库不用愁,HStore帮分忧>,作者:汀丶. 海量数据时代,如何实现数据实时入库与实时查询?GaussDB(DWS) HStore表为数据高效存储 ...
- SEAL 0.3 正式发布:国内首个全链路软件供应链安全管理平台
12月1日,软件供应链安全管理平台 SEAL 0.3 正式发布(以下简称"SEAL"),这是国内首个以全链路视角保护软件供应链的安全管理平台.两个月前 SEAL 0.2 发布,该版 ...
- 携程OceanBase开源实践——索引统计功能实现
[作者] 施纬,携程数据库研发工程师,主要负责数据库运维和内核研发. 姜贤富,携程高级数据库研发工程师,主要负责携程数据库监控运维及工具研发,拥有十年运维经验. [概述] 自从2021年OceanBa ...
- Three.js 入门
Demo代码地址: https://gitee.com/s0611163/three.js-demo Three.js Three.js下载 从GitHub上下载一个Release版本,https:/ ...
- SpringBoot 学习笔记:运维篇
SpringBoot程序的打包和运行 开发部门使用Git.SVN等版本控制工具上传工程到版本服务器 服务器使用版本控制工具下载工程 服务器上使用Maven工具在当前真机环境下重新构建项目 启动服务 程 ...