MySQL Shell 8.0的Dump Utility备份与恢复

这篇具有很好参考价值的文章主要介绍了MySQL Shell 8.0的Dump Utility备份与恢复。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mysqldump逻辑备份与恢复

MYSQLDUMP常用来做MySQL数据库逻辑备份与恢复。由于备份是以SQL语句的形式导出,在恢复时需要重放SQL语句,效率很低,因此一般在备份数据量较小时较为适用。

mysqldump备份

MySQLDUMP备份数据库:

# 备份多个数据库
mysqldump -h${MYSQL_Server_IP} -P${MYSQL_Server_PORT} -u${BACKUP_User} \
--set-gtid-purged=OFF --single-transaction --skip-opt --add-drop-database \
-B 数据库名1 数据库名2 数据库名3 ... > /backup/dump_full_db_`date +%F`.sql

# 压缩备份 
gzip dump_full_db_xxxx.sql > dump_full_db_xxxx.sql.gz

也可以直接压缩备份:

mysqldump -h${MYSQL_Server_IP} -P${MYSQL_Server_PORT} -u${BACKUP_User} \
--set-gtid-purged=OFF --single-transaction --skip-opt --add-drop-database \
-B 数据库名1 数据库名2 数据库名3 ... | gzip > /backup/dump_full_db_`date +%F`.sql.gz

MYSQLDUMP单独备份表(不加-B):

mysqldump -h${MYSQL_Server_IP} -P${MYSQL_Server_PORT} -u${BACKUP_User} \
--set-gtid-purged=OFF --single-transaction --skip-opt --add-drop-database \
数据库名 表名1 表名2 表名3 ... > /backup/dump_dbname_`date +%F`.sql

mysqldump恢复

恢复数据库(需要先清理目标库中的旧数据):

# 解压
gunzip dump_full_db_xxxx.sql.gz

# 恢复数据库(方法一)
mysql -h${MYSQL_Server_IP} -P${MYSQL_Server_PORT} -u${BACKUP_User} \
-e "source dump_full_db_xxxx.sql" 数据库名

# 恢复数据库(方法二)
mysql -h${MYSQL_Server_IP} -P${MYSQL_Server_PORT} -u${BACKUP_User} 数据库名 < dump_full_db_xxxx.sql

恢复数据表:

mysql -h${MYSQL_Server_IP} -P${MYSQL_Server_PORT} -u${BACKUP_User} \
-e "use dbname; source /backup/dump_dbname_xxxx.sql"

MySQL Shell 8.0的Dump & Load特性

MySQL Shell 8.0的Dump Utility特性支持实例、Schema、数据表三个级别的MySQL数据导出功能。Dump & Load特性自带兼容性检查、并行导入导出、以及备份文件压缩,而且效率比MYSQLDUMP更高。

主要的使用限制如下:

  • 导入备份的目标库必须是MySQL 5.7或者更新的版本;
  • MySQL Shell 8.0.27之前的版本无法导入由8.0.27及其之后的版本导出的备份;
  • 数据库对象名称必须是latin1或者utf8字符集;
  • 只能保证InnoDB表的数据一致性;
  • 备份用户至少必须具有EVENT、RELOAD、SELECT、SHOW VIEW、TRIGGER权限;
  • 表级别的备份不支持导出Routines。

备份实例:dump-instance

MySQL Shell的实例备份特性可用于导出多个用户和Schema的数据。MySQL中的Schema可以近似理解为Database的概念。

检查要备份的用户Schema:

select group_concat(user) from mysql.user 
where user not like 'mysql%' and user not in ('root');

实例级别备份:

mysqlsh mysql://root@localhost:3306 -- util dump-instance <导出备份的存放路径> \
--tzUtc=false --threads=4 \     
--excludeSchemas=mysql_innodb_cluster_metadata,mysql_schema \
--includeUsers=user_1,user_2,...

其中:

  • tzUtc=false:保留源数据时间戳(不会因为导入目标库跨时区而变化)。
  • threads:数据导出的并行度,默认为4,可按需调大。
  • excludeSchemas:(仅备份实例可用参数)不用导出的Schema。注意:information_schemamysqlndbinfoperformance_schema、以及sys这几个数据库,在导出实例时默认不会被导出。
  • includeUsers:(仅备份实例可用参数)要导出的用户清单。

示例:

[root@iZ0jl2qhfpcmxu641m5jntZ ~]# mysqlsh mysql://root@localhost:3306 -- util dump-instance /mysql/backup/dp_instance/ \
> --tzUtc=false --threads=4 \
> --excludeSchemas=mysql_innodb_cluster_metadata,mysql_schema \
> --includeUsers=appuser
Acquiring global read lock
Global read lock acquired
Initializing - done 
3 out of 7 schemas will be dumped and within them 3 tables, 0 views.
1 out of 6 users will be dumped.
Gathering information - done 
All transactions have been started
Locking instance for backup
Global read lock has been released
Writing global DDL files
Writing users DDL
Running data dump using 4 threads.
NOTE: Progress information uses estimated values and may not be accurate.
Writing schema metadata - done       
Writing DDL - done       
Writing table metadata - done       
Starting data dump
100% (20.01K rows / ~19.89K rows), 0.00 rows/s, 0.00 B/s uncompressed, 0.00 B/s compressed
Dump duration: 00:00:00s                                                                  
Total duration: 00:00:00s                                                                 
Schemas dumped: 3                                                                         
Tables dumped: 3                                                                          
Uncompressed data size: 395.80 KB                                                         
Compressed data size: 91.65 KB                                                            
Compression ratio: 4.3                                                                    
Rows written: 20006                                                                       
Bytes written: 91.65 KB                                                                   
Average uncompressed throughput: 395.80 KB/s                                              
Average compressed throughput: 91.65 KB/s                                                 
[root@iZ0jl2qhfpcmxu641m5jntZ ~]# ls /mysql/backup/dp_instance/ | wc -l
23
[root@iZ0jl2qhfpcmxu641m5jntZ ~]# ls /mysql/backup/dp_instance/ 
appdb.json                     appdb@temp_seq.json              appdb@test_table.json        app_game@persons@@0.tsv.zst.idx  app_work.json  @.post.sql
appdb.sql                      appdb@temp_seq.sql               appdb@test_table.sql         app_game@persons.json            app_work.sql   @.sql
appdb@temp_seq@@0.tsv.zst      appdb@test_table@@0.tsv.zst      app_game.json                app_game@persons.sql             @.done.json    @.users.sql
appdb@temp_seq@@0.tsv.zst.idx  appdb@test_table@@0.tsv.zst.idx  app_game@persons@@0.tsv.zst  app_game.sql                     @.json

然后可以对备份目录打包,传输到目标库进行恢复。

备份库:dump-schemas

MySQL Shell的Schema备份特性可用于导出指定的多个库的多张表数据。

检查要备份的用户Schema:

show databases;

select table_schema,table_name from information_schema.tables 
where table_schema='数据库名';

Schema级别备份:

mysqlsh mysql://root@localhost:3306 -- util dump-schemas dbname1,dbname2,... \
--outputUrl=<导出备份的存放路径> --threads=4 \
--includeTables=dbname1.tabname_1,dbname2.tabname_2,...

可以使用--includeTables--excludeTables参数来筛选要导出的表。

示例:

[root@iZ0jl2qhfpcmxu641m5jntZ backup]# mysqlsh mysql://root@localhost:3306 -- util dump-schemas appdb,app_game \
> --outputUrl=/mysql/backup/dp_schemas \
> --threads=4 --includeTables=appdb.test_table,app_game.persons
Acquiring global read lock
Global read lock acquired
Initializing - done 
2 schemas will be dumped and within them 2 out of 3 tables, 0 views.
Gathering information - done 
All transactions have been started
Locking instance for backup
Global read lock has been released
Writing global DDL files
Running data dump using 4 threads.
NOTE: Progress information uses estimated values and may not be accurate.
Writing schema metadata - done       
Writing DDL - done       
Writing table metadata - done       
Starting data dump
101% (10.01K rows / ~9.89K rows), 0.00 rows/s, 0.00 B/s uncompressed, 0.00 B/s compressed
Dump duration: 00:00:00s                                                                 
Total duration: 00:00:00s                                                                
Schemas dumped: 2                                                                        
Tables dumped: 2                                                                         
Uncompressed data size: 346.90 KB                                                        
Compressed data size: 70.67 KB                                                           
Compression ratio: 4.9                                                                   
Rows written: 10006                                                                      
Bytes written: 70.67 KB                                                                  
Average uncompressed throughput: 346.90 KB/s                                             
Average compressed throughput: 70.67 KB/s                                                
[root@iZ0jl2qhfpcmxu641m5jntZ backup]# 
[root@iZ0jl2qhfpcmxu641m5jntZ backup]# ls dp_schemas/
appdb.json  appdb@test_table@@0.tsv.zst      appdb@test_table.json  app_game.json                app_game@persons@@0.tsv.zst.idx  app_game@persons.sql  @.done.json  @.post.sql
appdb.sql   appdb@test_table@@0.tsv.zst.idx  appdb@test_table.sql   app_game@persons@@0.tsv.zst  app_game@persons.json            app_game.sql          @.json       @.sql

备份表:dump-tables

MySQL Shell的表级别备份特性可用于导出指定的单个库的多张表数据。

检查要备份的表:

select table_schema,table_name from information_schema.tables 
where table_schema='数据库名';

表级别备份:

mysqlsh mysql://root@localhost:3306 -- util dump-tables <数据库名> 
tabname1,tabname2,... \
--outputUrl=<导出备份的存放路径> --threads=4 

示例:

[root@iZ0jl2qhfpcmxu641m5jntZ backup]# mysqlsh mysql://root@localhost:3306 -- util dump-tables appdb temp_seq,test_table \
> --threads=4 --outputUrl=/mysql/backup/dp_tables
Acquiring global read lock
Global read lock acquired
Initializing - done 
2 tables and 0 views will be dumped.
Gathering information - done 
All transactions have been started
Locking instance for backup
Global read lock has been released
Writing global DDL files
Running data dump using 4 threads.
NOTE: Progress information uses estimated values and may not be accurate.
Writing schema metadata - done       
Writing DDL - done       
Writing table metadata - done       
Starting data dump
100% (20.00K rows / ~19.88K rows), 0.00 rows/s, 0.00 B/s uncompressed, 0.00 B/s compressed
Dump duration: 00:00:00s                                                                  
Total duration: 00:00:00s                                                                 
Schemas dumped: 1                                                                         
Tables dumped: 2                                                                          
Uncompressed data size: 395.61 KB                                                         
Compressed data size: 91.45 KB                                                            
Compression ratio: 4.3                                                                    
Rows written: 20000                                                                       
Bytes written: 91.45 KB                                                                   
Average uncompressed throughput: 395.61 KB/s                                              
Average compressed throughput: 91.45 KB/s                                                 
[root@iZ0jl2qhfpcmxu641m5jntZ backup]# ls dp_tables/
appdb.json  appdb@temp_seq@@0.tsv.zst      appdb@temp_seq.json  appdb@test_table@@0.tsv.zst      appdb@test_table.json  @.done.json  @.post.sql
appdb.sql   appdb@temp_seq@@0.tsv.zst.idx  appdb@temp_seq.sql   appdb@test_table@@0.tsv.zst.idx  appdb@test_table.sql   @.json       @.sql

恢复数据:load-dump

MySQL Shell的loadDump特性用于导入使用Dump Utility导出的备份。

其需要注意的主要有以下几点:

  • loadDump通过执行LOAD DATA LOCAL INFILE语句来导入数据,因此在备份导入期间目标库上的全局参数local_infile必须设置为ON
  • 如果目标库上开启了sql_require_primary_key参数(默认为OFF),loadDump会检查导入表是否包含主键,如果没有主键就会报错。
  • loadDump不会主动在目标库应用从源库导出的GTID set。如果目标库要用于搭建副本从库,需要使用updateGtidSet参数手动导入GTID。

导入备份的语法如下:

mysqlsh mysql://root@localhost:3306 -- util load-dump <导入备份的存放路径> --threads=4

示例

事先清理旧数据:

drop database app_game;
drop database app_work;
drop database appdb;

检查LOCAL_INFILE参数:

SQL > show variables like 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   |
+---------------+-------+
1 row in set (0.0019 sec)

SQL > set global local_infile=ON;

导入备份:

[root@iZ0jl2qhfpcmxu641m5jntZ backup]# mysqlsh mysql://root@localhost:3306 -- util load-dump /mysql/backup/dp_instance
Loading DDL and Data from '/mysql/backup/dp_instance' using 4 threads.
Opening dump...
Target is MySQL 8.0.32. Dump was produced from MySQL 8.0.32
Scanning metadata - done       
Checking for pre-existing objects...
Executing common preamble SQL
Executing DDL - done       
Executing view DDL - done       
Starting data load
Executing common postamble SQL                       
100% (395.80 KB / 395.80 KB), 0.00 B/s, 3 / 3 tables done
Recreating indexes - done 
3 chunks (20.01K rows, 395.80 KB) for 3 tables in 3 schemas were loaded in 0 sec (avg throughput 395.80 KB/s)
0 warnings were reported during the load. 

References
[1] https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html
[2] https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-load-dump.html文章来源地址https://www.toymoban.com/news/detail-408561.html

到了这里,关于MySQL Shell 8.0的Dump Utility备份与恢复的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 编写shell脚本,利用mysqldump实现MySQL数据库分库分表备份

     查看数据和数据表 删除头部Database和数据库自带的表  编写脚本 检查脚本运行备份数据库 分表分库备份成功 还原检测 删除数据库并查看库 开始还原 使用备份的库进行还原,由于是压缩文件,使用压缩还原 查看数据库  

    2024年02月05日
    浏览(48)
  • MySQL 8.0 OCP (1Z0-908) 考点精析-备份与恢复考点1:MySQL Enterprise Backup概要

    【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) MySQL Enterprise Backup是用于MySQL数据库的热 (online) 备份工具。 热备份是在数据库运行和应用程序读写时执行的。这种备份不会阻塞正常的数据库操作,并且它可以捕获备份过程

    2024年02月16日
    浏览(49)
  • MySQL Shell备份恢复可能会遇到的报错

    使用MySQL Shell进行备份和恢复的方法参见MySQL Shell 8.0的Dump Utility备份与恢复。 MySQL Error 1226总是发生在备份/恢复开始的时候。 🕷报错信息: 🐦报错原因: 使用MySQL Shell备份或恢复的并发线程数 threads 大小超过了当前备份用户的最大并发连接数 max_user_connections 。 🐟解决办法

    2023年04月12日
    浏览(78)
  • 利用mysqldump实现分库分表备份的shell脚本

    linux版本:CentOS 7.9 mysql版本:MySQL 5.7.36 脚本实现功能:利用mysqldump工具实现对mysql中的数据库分库备份,和对所备份数据库中的表分表备份 1)定义变量 定义了备份用户、备份用户密码、备份参数命令(简化代码)、不需要备份的数据库、备份目录这些变量。 2)分库备份 首

    2024年02月15日
    浏览(37)
  • PostgreSQL逻辑备份pg_dump使用及其原理解析

    1、循环调用getopt_long解析命令行参数,将参数保存到static DumpOptions dopt;中 2、判断参数是否相容,不相容则退出: 3、调用CreateArchive打开输出文件,输出流为fout。该函数使用4个文件封装了4种不同dump文件格式,增加新文件可以增加新的导出文件类型各自封装,独立易于维护。

    2024年02月13日
    浏览(49)
  • mysql数据库备份(mysqldump)

    1. 备份全部数据库的数据和结构 2. 备份全部数据库的结构(加 -d 参数) 3. 备份全部数据库的数据(加 -t 参数) 4. 备份单个数据库的数据和结构(,数据库名mydb) 5. 备份单个数据库的结构 6. 备份单个数据库的数据 7. 备份多个表的数据和结构(数据,结构的单独备份方法与上同)

    2024年02月07日
    浏览(60)
  • MySQL mysqldump备份数据库(附带实例)

    数据库的主要作用就是对数据进行保存和维护,所以备份数据是数据库管理中最常用的操作。为了防止数据库意外崩溃或硬件损伤而导致的数据丢失,数据库系统提供了备份和恢复策略。 保证数据安全的最重要的一个措施就是定期的对数据库进行备份。这样即使发生了意外,

    2024年02月13日
    浏览(219)
  • 【PostgreSql】本地备份为dump文件与恢复数据库(单表和整个数据库)

    环境: windows 数据库: postgresql 1.准备脚本 backUpDb.bat 脚本为备份脚本,双击运行,右键可以选择编辑; restoreDb.bat 脚本为恢复脚本,双击运行,右键选择编辑; 1.1 脚本介绍 如上图所示编辑脚本文件,选择你的备份路径和相应的程序执行路径,以及要备份的数据库名称,登录

    2024年01月23日
    浏览(42)
  • Windows下手动、自动备份Mysql数据库(mysqldump)

    (本文实例环境及版本 MySql8.0.13) 1.1 命令行备份 cmd 先进入mysql所在的bin目录下,如:cd D:softwaremysqlmysql-8.0.13-winx64bin mysqldump -u root -p 数据库 [表名1 表名2…] 文件备份路径 如把testdb数据库备份到 D:ydTest.sql 输入密码后回车 mysqldump -u root -p testdb d:ydTest.sql 如果你希望备份是

    2023年04月19日
    浏览(44)
  • Windows服务器使用Mysqldump备份MySQL数据库方法

    Windows服务器使用Mysqldump备份MySQL数据库方法 1.进入到MySQL安装目录的bin目录下,进入cmd F:20220601dev_softwaremysql-8.0.11-winx64 2.执行备份命令: 3.导入备份 数据: 4.验证数据表是否备份成功

    2024年02月10日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包