1.安装
tar -zxvf /soft/mysql-shell-8.4.8-linux-glibc2.28-x86-64bit.tar.gz ln -s mysql-shell-8.4.8-linux-glibc2.28-x86-64bit mysqlshell # mysqlsh --version mysqlsh Ver 8.4.8 for Linux on x86_64 - for MySQL 8.4.8 (MySQL Community Server (GPL))
2.备份实例
命令:util.dumpInstance(outputUrl[, options])
其中,outputUrl 是备份目录,不能为空。options 是可指定的选项。
util.dumpInstance 的关键特性:
*)多线程备份。并发线程数由 threads 决定,默认是 4。
*)支持单表 chunk 级别的并行备份,前提是表上存在主键或唯一索引。
*)默认是压缩备份。
*)支持备份限速,可通过maxRate限制单个线程的数据读取速率。
*)util.dumpInstance 的参数解析
users:是否转储用户及权限,默认为 true
routines:是否转储函数和存储过程,默认为 true
triggers:是否转储触发器,默认为 true
events:是否转储事件,默认为 true
ddlOnly:是否只转储表结构,默认为 false
dataOnly:是否只转储数据,默认为 false
includeSchemas:指定某些库的转储
excludeSchemas:忽略某些库的转储,多个库之间用逗号隔开,例如:excludeSchemas: ["db1", "db2"]
includeTables:指定某些表的转储
excludeTables:忽略某些表的转储,表必须是 schema.table 的格式,多个表之间用逗号隔开,例如:excludeTables:
["db1.table1", "db1.table2"]
includeTriggers:指定某些触发器的转储
excludeTriggers:忽略某些触发器的转储
includeRoutines:指定某些函数和存储过程的转储
excludeRoutines:忽略某些函数和存储过程的转储
includeEvents:指定某些事件的转储
excludeEvents:忽略某些事件的转储
includeUsers:指定某些用户的转储
excludeUsers:忽略某些用户的转储
chunking:转储时将表拆分为多个chunk,默认为 true
threads:从 MySQL 实例转储数据的并行线程数,默认为 4。
consistent:是否开启一致性转储,默认为 true。
maxRate:转储期间每个线程的数据读取吞吐量的最大字节数,默认为 0,不限制。
compression:转储使用的压缩算法,默认为 zstd。也可设置为 gzip 或 none(不压缩)
defaultCharacterSet:转储使用的会话字符集,默认为utf8mb4
bytesPerChunk:每个 chunk 文件的大小,默认 64M。
tzUtc:是否设置 TIME_ZONE = '+00:00',默认为 true。
consistent:是否开启一致性备份,默认为 true。若设置为 false,则不会加全局读锁,也不会开启事务的一致
性快照。
dryRun:试运行。此时只会打印备份信息,不会执行备份操作。
showProgress:是否打印进度信息,如果是 TTY 设备(命令行终端),则为 true,反之,则为 false。
*)备份流程:
util.dumpInstance 的备份流程与 mysqldump 大致相同,不同的地方主要体现在以下两点:
util.dumpInstance 会加备份锁。备份锁可用来阻塞备份过程中的 DDL。
util.dumpInstance 是并行备份,相对于 mysqldump 的单线程备份,备份效率更高。
mysqlsh -h 192.168.18.80 -P3306 -uroot -prootroot
SQL> \js
JS > util.dumpInstance('/mysql/backup/fgedu-full2024051701',{compression: "none"})
如果是windows:
util.dumpInstance('d\:\\backup',{compression: "none"})
其它用法:
util.dumpInstance('/mysql/backup/20240501',{excludeSchemas: ["sys","mysql","performance_schema",
"information_schema"]})
util.dumpInstance('/mysql/backup/20240502',{includeSchemas: ["itpuxdb"]})
util.dumpInstance('/mysql/backup/20240503',{includeSchemas: ["itpuxdb"],ddlOnly: true})
util.dumpInstance('/mysql/backup/20240504',{includeSchemas: ["itpuxdb"],dataOnly: true})
util.dumpInstance('/mysql/backup/20240505',{includeSchemas: ["itpuxdb"],includeTables:
["itpuxdb.fgedu01"]})
util.dumpInstance('/mysql/backup/20240506',{includeSchemas: ["itpuxdb"],excludeTables:
["itpuxdb.fgedu01"]})
.json 备份相关元数据.sql 备份对象ddl语句.tsv 备份数据 3.备份单库
命令:util.dumpSchemas(schemas, outputUrl[, options])
从MySQL Shell 8.0.28 +
util.dumpInstance+includeSchemas
# mysqlsh -h 192.168.1.84 -P3306 -uroot -prootroot
JS > util.dumpSchemas(['itpuxdb'],'/mysql/backup/itpuxdb20240511')
OR
util.dumpInstance('/mysql/backup/202405',{includeSchemas: ["itpuxdb"]})
4.备份单表
命令:util.dumpTables(schema, tables, outputUrl[, options])
或者:
util.dumpInstance+includeSchemas+includeTables
# mysqlsh -h 192.168.1.84 -P3306 -uroot -prootroot
JS > util.dumpTables('itpuxdb',['fgedu01'],'/mysql/backup/202405/fgedu01')
5.恢复
util.loadDump 的关键特性:
*)多线程恢复。并发线程数由 threads 决定,默认是 4
*)支持断点续传功能
*)支持延迟创建二级索引
*)支持边备份,边导入
*)通过 LOAD DATA LOCAL INFILE 命令来导入数据
*)如果单个文件过大,util.loadDump 在导入时会自动进行切割,以避免产生大事务
util.loadDump 的参数解析:
excludeEvents:忽略某些定时器的导入。
excludeRoutines:忽略某些函数和存储过程的导入。
excludeSchemas:忽略某些库的导入。
excludeTables:忽略某些表的导入。
excludeTriggers:忽略某些触发器的导入。
excludeUsers:忽略某些账号的导入。
includeEvents:导入指定定时器。
includeRoutines:导入指定函数和存储过程。
includeSchemas:导入指定库。 includeTables:导入指定表。
includeTriggers:导入指定触发器。 includeUsers:导入指定账号。
loadData:是否导入数据,默认为 true。
loadDdl:是否导入 DDL 语句,默认为 true。
loadUsers:是否导入账号,默认为 false。注意,即使将 loadUsers 设置为 true,也不会导入当前正在执行导
入操作的用户。
ignoreExistingObjects:是否忽略已经存在的对象,默认为 off(false/true)。
threads:导入并发线程数,默认为 4。
maxBytesPerTransaction:指定单个 LOAD DATA 操作可加载的最大字节数。默认与 bytesPerChunk 一致。
这个参数可用来规避大事务。
backgroundThreads:获取元数据和 DDL文件内容的线程数。备份集如果存储在本地,backgroundThreads 默认和threads 一致。
progressFile:在导入的过程中,会在备份目录生成一个progressFile,用于记录加载过程中的进度信息,这个
进度信息可用来实现断点续传功能。默认为 load-progress…progress。
resetProgress:如果备份目录中存在progressFile,默认会从上次完成的地方继续执行。如果要从头开始执行,
需将 resetProgress 设置为 true。该参数默认为 off。
deferTableIndexes:是否延迟(数据加载完毕后)创建二级索引。可设置:off(不延迟),fgedu-fulltext(只
延迟创建全文索引,默认值),all(延迟创建所有索引)。
loadIndexes:与 deferTableIndexes 一起使用,用来决定数据加载完毕后,最后的二级索引是否创建,默认为true。
analyzeTables:表加载完毕后,是否执行 ANALYZE TABLE 操作。默认是 off(不执行),也可设置为 on 或
histogram(只对有直方图信息的表执行)。
characterSet:字符集,无需显式设置,默认会从备份集中获取。
createInvisiblePKs:是否创建隐式主键,默认从备份集中获取。这个与备份时是否指定了
create_invisible_pks 有关,若指定了则为 true,反之为 false。 dryRun:试运行。
ignoreVersion:忽略 MySQL 的版本检测。默认情况下,要求备份实例和导入实例的大版本一致。
schema:将表导入到指定 schema 中,适用于通过 util.dumpTables 创建的备份。
showMetadata:导入时是否打印一致性备份时的位置点信息。
showProgress:是否打印进度信息。
skipBinlog:是否设置 sql_log_bin=0 ,默认 false。这一点与 mysqldump、mydumper 不同,后面这两个工具默
认会禁用 Binlog。
updateGtidSet:更新 GTID_PURGED。可设置:off(不更新,默认值), replace(替代目标实例的 GTID_PURGED),
append(追加)。
waitDumpTimeout:util.loadDump 可导入当前正在备份的备份集。处理完所有文件后,如果备份还没有结束(具
体来说,是备份集中没有生成 @.done.json),util.loadDump 会报错退出,可指定 waitDumpTimeout 等待一段
时间,单位秒。
SET persist local_infile = ON;
mysqlsh -h 192.168.1.84 -P3306 -uroot -prootroot
JS> util.loadDump("/mysql/backup/fgedu-full2024051701")
OR:
JS> util.loadDump("/mysql/backup/fgedu-full2024051701",{loadUsers: true})
OR:
JS >
util.loadDump("/mysql/backup/fgedu-full2024051701",{loadUsers:true,excludeUsers:["root","backup"]})
OR:
JS > util.loadDump("/mysql/backup/fgedu-full2024051701",{includeSchemas:
["itpuxdb"],deferTableIndexes:"all"})
OR
JS >
util.loadDump("/mysql/backup/fgedu-full2024051701",{loadUsers:true,excludeUsers:["root"],includeSch
emas: ["itpuxdb"],deferTableIndexes:"all"})
util.loadDump('/mysql/backup/fgedu-full2024051701',{"schema":"itpuxdb02"});
*恢复前确认备份目录中load-progress.631ab526-f99f-11f0-bf3d-000c29653e4f.json文件被删除
#恢复到其他库
util.loadDump('/mysql/backup/fgedu-full2024051701',{"schema":"itpuxdb02"});
6.自动化
mysqlsh -uroot -prootroot -h192.168.18.80 -P3306 --js --file=/mysql/backup/mysql-backup-fgedu-full.js
cat > /mysql/backup/mysql-backup-fgedu-full.js << EOF
util.dumpInstance('/mysql/backup/fgedu-full-all2024051702',{compression: "none"})
EOF
