MySQL Shell实用备份程序

简介

MySQL Shell提供了util.dumpInstance()util.dumpSchemas()用于导出数据,支持导出所有的schema或者选择部分schame到本地文件中,后续可以通过util.loadDump()进行恢复。支持多线程并行转储和文件压缩,这些都是mysqldump备份不提供的。

可以指定schema进行备份,默认不备份information_schema, mysql, ndbinfo, performance_schema, 和 sys schemas

使用核心要求如下:

  • MySQL5.7或更新的版本
  • 实例/schema的对象名称必须是latin1utf8 字符集.
  • 只有使用InnoDB存储引擎的表才能保证数据一致性。

语法格式

# 备份实例
util.dumpInstance(outputUrl[, options]) 
# 备份schema
util.dumpSchemas(schemas, outputUrl[, options])

示例

util.dumpInstance()备份整个实例

# 使用msyqlsh连接实例
# mysqlsh root@127.0.0.1:3306
# 备份整个实例
 MySQL  127.0.0.1:3306  JS > util.dumpInstance('/tmp/instanceDump',{"threads":4})
Acquiring global read lock
All transactions have been started
Locking instance for backup
Global read lock has been released
Writing global DDL files
Writing users DDL
Preparing data dump for table `monitor`.`digests_prev`
Writing DDL for schema `monitor`
Writing DDL for view `monitor`.`my_statements`
Writing DDL for table `monitor`.`digests_prev`
Writing DDL for schema `sbtest`
WARNING: Could not select a column to be used as an index for table `monitor`.`digests_prev`. Chunking has been disabled for this table, data will be dumped to a single file.
Preparing data dump for table `sbtest`.`sbtest1`
Data dump for table `sbtest`.`sbtest1` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest10`
Data dump for table `sbtest`.`sbtest10` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest2`
Data dump for table `sbtest`.`sbtest2` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest3`
Writing DDL for table `sbtest`.`sbtest1`
Writing DDL for table `sbtest`.`sbtest10`
Data dump for table `sbtest`.`sbtest3` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest4`
Data dump for table `sbtest`.`sbtest4` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest5`
Data dump for table `sbtest`.`sbtest5` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest6`
Data dump for table `sbtest`.`sbtest6` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest7`
Data dump for table `sbtest`.`sbtest7` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest8`
Data dump for table `sbtest`.`sbtest8` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest9`
Writing DDL for table `sbtest`.`sbtest2`
Data dump for table `sbtest`.`sbtest9` will be chunked using column `id`
Running data dump using 4 threads.
NOTE: Progress information uses estimated values and may not be accurate.
Writing DDL for table `sbtest`.`sbtest3`
Writing DDL for table `sbtest`.`sbtest4`
Writing DDL for table `sbtest`.`sbtest5`
Writing DDL for table `sbtest`.`sbtest6`
Writing DDL for table `sbtest`.`sbtest7`
Writing DDL for table `sbtest`.`sbtest8`
Writing DDL for table `sbtest`.`sbtest9`
Data dump for table `monitor`.`digests_prev` will be written to 1 file
Data dump for table `sbtest`.`sbtest1` will be written to 1 file
Data dump for table `sbtest`.`sbtest4` will be written to 3 files
Data dump for table `sbtest`.`sbtest2` will be written to 3 files
Data dump for table `sbtest`.`sbtest10` will be written to 3 files
Data dump for table `sbtest`.`sbtest3` will be written to 3 files
Data dump for table `sbtest`.`sbtest5` will be written to 3 files
Data dump for table `sbtest`.`sbtest7` will be written to 3 files
Data dump for table `sbtest`.`sbtest8` will be written to 3 files
Data dump for table `sbtest`.`sbtest6` will be written to 3 files
Data dump for table `sbtest`.`sbtest9` will be written to 3 files
1 thds dumping - 113% (4.58M rows / ~4.05M rows), 70.94K rows/s, 13.69 MB/s uncompressed, 6.20 MB/s compressed
Duration: 00:01:53s
Schemas dumped: 2
Tables dumped: 11
Uncompressed data size: 883.48 MB
Compressed data size: 400.76 MB
Compression ratio: 2.2
Rows written: 4582747
Bytes written: 400.76 MB
Average uncompressed throughput: 7.78 MB/s
Average compressed throughput: 3.53 MB/s

util.dumpInstance()备份整个实例

# 使用msyqlsh连接实例
# mysqlsh root@127.0.0.1:3306
# 只备份sbtest库
 MySQL  127.0.0.1:3306  sbtest  JS >  util.dumpSchemas(['sbtest'], '/tmp/sbtest',{"threads":8})
Acquiring global read lock
All transactions have been started
Locking instance for backup
Global read lock has been released
Writing global DDL files
Preparing data dump for table `sbtest`.`sbtest1`
Writing DDL for schema `sbtest`
Writing DDL for table `sbtest`.`sbtest1`
Writing DDL for table `sbtest`.`sbtest10`
Writing DDL for table `sbtest`.`sbtest2`
Writing DDL for table `sbtest`.`sbtest3`
Writing DDL for table `sbtest`.`sbtest4`
Writing DDL for table `sbtest`.`sbtest5`
Writing DDL for table `sbtest`.`sbtest6`
Data dump for table `sbtest`.`sbtest1` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest10`
Data dump for table `sbtest`.`sbtest10` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest2`
Data dump for table `sbtest`.`sbtest2` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest3`
Data dump for table `sbtest`.`sbtest3` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest4`
Data dump for table `sbtest`.`sbtest4` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest5`
Data dump for table `sbtest`.`sbtest5` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest6`
Data dump for table `sbtest`.`sbtest6` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest7`
Data dump for table `sbtest`.`sbtest7` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest8`
Data dump for table `sbtest`.`sbtest8` will be chunked using column `id`
Preparing data dump for table `sbtest`.`sbtest9`
Data dump for table `sbtest`.`sbtest9` will be chunked using column `id`
Running data dump using 8 threads.
NOTE: Progress information uses estimated values and may not be accurate.
Writing DDL for table `sbtest`.`sbtest7`
Writing DDL for table `sbtest`.`sbtest8`
Writing DDL for table `sbtest`.`sbtest9`
Data dump for table `sbtest`.`sbtest1` will be written to 1 file
Data dump for table `sbtest`.`sbtest3` will be written to 3 files
Data dump for table `sbtest`.`sbtest10` will be written to 3 files
Data dump for table `sbtest`.`sbtest2` will be written to 3 files
Data dump for table `sbtest`.`sbtest5` will be written to 3 files
Data dump for table `sbtest`.`sbtest6` will be written to 3 files
Data dump for table `sbtest`.`sbtest4` will be written to 3 files
Data dump for table `sbtest`.`sbtest9` will be written to 3 files
Data dump for table `sbtest`.`sbtest7` will be written to 3 files
Data dump for table `sbtest`.`sbtest8` will be written to 3 files
1 thds dumping - 113% (4.58M rows / ~4.05M rows), 99.32K rows/s, 19.15 MB/s uncompressed, 8.69 MB/s compressed
Duration: 00:00:32s
Schemas dumped: 1
Tables dumped: 10
Uncompressed data size: 883.46 MB
Compressed data size: 400.76 MB
Compression ratio: 2.2
Rows written: 4582718
Bytes written: 400.76 MB
Average uncompressed throughput: 27.58 MB/s
Average compressed throughput: 12.51 MB/s

参考文档

  • https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一个备份MySQL数据库的Shell脚本示例: ```bash #!/bin/bash # MySQL数据库备份脚本 # 设置备份文件名和目录 BACKUP_DIR="/var/backups/mysql" DATE=$(date +%Y-%m-%d_%H-%M-%S) DB_NAME="mydatabase" FILENAME="$BACKUP_DIR/$DB_NAME-$DATE.sql" # 设置MySQL登录信息 MYSQL_USER="root" MYSQL_PASSWORD="password" # 执行备份 mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD $DB_NAME > $FILENAME # 压缩备份文件 gzip $FILENAME # 删除7天前的备份文件 find $BACKUP_DIR -type f -name "*.gz" -mtime +7 -exec rm {} \; ``` 上述脚本将会备份名为 "mydatabase" 的MySQL数据库,并将备份文件保存在 "/var/backups/mysql" 目录下。脚本将创建一个新的备份文件名,格式为 "mydatabase-YYYY-MM-DD_HH-MM-SS.sql",其中 "YYYY-MM-DD_HH-MM-SS" 是当前日期和时间。备份完成后,脚本将使用 gzip 压缩备份文件,并删除7天前的备份文件。 请注意,为了安全起见,建议将MYSQL_USER和MYSQL_PASSWORD的值设置为有效的MySQL用户名和密码,而不是将其硬编码在脚本中。 ### 回答2: shell脚本备份MySQL数据库是一种自动化的数据库备份方式,它通过编写shell脚本来实现备份任务的执行。下面是一个简单的用于备份MySQL数据库的shell脚本示例: #!/bin/bash # 设置备份目录 BACKUP_DIR="/opt/backup/db" # 设置MySQL登录信息 DB_USER="root" DB_PASSWORD="yourpassword" # 设置备份文件名 BACKUP_FILE="db_backup_$(date +%Y%m%d%H%M%S).sql" # 创建备份目录 mkdir -p $BACKUP_DIR # 备份MySQL数据库到指定目录 mysqldump -u $DB_USER -p$DB_PASSWORD --all-databases > $BACKUP_DIR/$BACKUP_FILE # 判断备份是否成功 if [ $? -eq 0 ]; then echo "MySQL数据库备份成功,备份文件名为:$BACKUP_FILE" else echo "MySQL数据库备份失败" fi 在上述脚本中,首先定义了备份目录、MySQL登录信息和备份文件名的变量。然后,通过mkdir命令创建备份目录。接下来,使用mysqldump命令将MySQL数据库备份到指定目录,并将备份文件命名为当前日期和时间。最后,通过判断mysqldump命令执行的返回值来确定备份是否成功,并输出相应的提示信息。 使用该脚本进行MySQL数据库备份只需在终端中执行bash命令加上脚本路径即可,如:bash /path/to/backup_mysql.sh。执行完毕后,备份文件将保存在指定的备份目录中。 这种shell脚本备份MySQL数据库的方式可以自动化执行备份任务,提高工作效率,同时也方便了备份文件的管理和查找。 ### 回答3: shell脚本备份MySQL数据库是通过编写一个脚本文件来实现自动备份和恢复MySQL数据库的操作。下面是一个简单的示例: #!/bin/bash # Shell脚本备份MySQL数据库 # 定义备份存储目录和时间戳 backup_dir="/path/to/backup" timestamp=$(date +%Y%m%d%H%M%S) # 定义MySQL数据库的连接参数 db_user="root" db_password="password" db_host="localhost" db_name="database_name" # 创建备份目录 if [ ! -d "$backup_dir" ]; then mkdir -p $backup_dir fi # 使用mysqldump命令备份数据库 mysqldump -u$db_user -p$db_password -h$db_host $db_name > $backup_dir/${db_name}_${timestamp}.sql # 检查备份是否成功 if [ $? -eq 0 ]; then echo "数据库备份成功!" else echo "数据库备份失败!" fi # 清理过期备份(保留最新的N个备份) backup_count=$(ls -l $backup_dir | grep -c "^-" 2>/dev/null) if [ $backup_count -gt 10 ]; then oldest_backup=$(ls -tr $backup_dir | head -1) rm -f $backup_dir/$oldest_backup fi # 恢复MySQL数据库(如果需要) # mysql -u$db_user -p$db_password -h$db_host -e "DROP DATABASE $db_name;" # mysql -u$db_user -p$db_password -h$db_host -e "CREATE DATABASE $db_name;" # mysql -u$db_user -p$db_password -h$db_host $db_name < $backup_dir/latest.sql 这个脚本的功能是备份指定的MySQL数据库,将备份文件保存到指定的目录中,并可根据需要恢复数据库。脚本中使用了mysqldump命令来导出数据库,并使用mysql命令来恢复数据库。备份文件保留最新的10个,超过数量的将自动删除最旧的备份文件。可以根据实际需求修改备份目录、数据库连接参数和保留备份数量等设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值