首页 > 数据库 >Mac导出Mysql千万级表数据

Mac导出Mysql千万级表数据

时间:2024-08-22 10:04:52浏览次数:7  
标签:transaction -- DB 导出 single 千万级 Mac mysqldump Mysql

MysqlDump

mysqldump -h [服务器地址] -u [用户名] -p[密码] --single-transaction --quick [数据库名] [表名] > [导出文件.sql]

•--single-transaction 保证了数据的一致性,并且不会在导出期间锁定表(只针对InnoDB有效)。
•--quick 选项进一步减少了内存使用,因为它逐行导出数据。

single-transaction 的作用:

--single-transaction 只适用于支持事务的存储引擎(如InnoDB),对于MyISAM等不支持事务的存储引擎,这个选项无效。在导出数据量非常大的表时,--single-transaction 能够有效避免锁表问题,从而不影响数据库的其他读写操作。
1.数据一致性:
•当使用 --single-transaction 选项时,mysqldump 会在导出数据时启动一个事务。这个事务会在导出整个数据库或表的过程中保持打开状态。
•这个事务快照可以确保在导出期间,表中的数据不会因为其他事务的修改而发生变化,从而保证导出的数据与数据库的某一特定时间点完全一致。

2.避免锁表:
•使用 --single-transaction 导出数据时,不会锁定表,允许其他事务在导出期间对表进行读写操作。相比于 LOCK TABLES 这种方式,这对生产环境的影响更小。
•由于不需要加锁,--single-transaction 对于大数据量的表非常有用,可以避免长时间锁表导致的阻塞。

千万级MyISAM导出需要注意问题

影响线上业务的因素

•表锁定:MyISAM表在导出数据时可能会锁定整个表。这会导致其他写操作(如 INSERT、UPDATE、DELETE)被阻塞,从而影响线上业务的性能。读操作也会受到一定的影响,因为MyISAM会在读取数据时加读锁。
•性能下降:由于表锁定,导出过程可能会影响数据库的性能,特别是在高并发情况下,可能导致系统响应变慢。
•磁盘空间:导出千万级数据时,生成的SQL文件可能非常大,需要足够的磁盘空间来存储。

减少对业务的影响

a. 选择低峰期
•尽量在业务低峰期进行导出,以减少对用户操作的影响。
b. 锁表策略
•使用 LOCK TABLES 锁定表可以确保在导出过程中数据一致性,但也会阻塞其他写操作。确保在业务低峰期进行操作,或者分批导出数据以减少锁定时间。

mysqldump -h [服务器地址] -u [用户名] -p[密码] --lock-tables [数据库名] [表名] > [导出文件.sql]

c. 分批导出
•对于非常大的表,可以考虑将数据分批导出,以减少每次导出对业务的影响。可以使用 --where 选项来限制每次导出的数据范围:

mysqldump -h [服务器地址] -u [用户名] -p[密码] --lock-tables [数据库名] [表名] --where="id BETWEEN 1 AND 1000000" > [导出文件_part1.sql]

d. 优化导出
•--quick:使用 --quick 选项可以减少内存使用,因为它逐行读取数据而不是将所有数据加载到内存中:

mysqldump -h [服务器地址] -u [用户名] -p[密码] --quick --lock-tables [数据库名] [表名] > [导出文件.sql]

•压缩导出文件:导出过程中直接压缩数据,可以减少磁盘空间占用和传输时间:

mysqldump -h [服务器地址] -u [用户名] -p[密码] --quick --lock-tables [数据库名] [表名] | gzip > [导出文件.sql.gz]

Mac脚本

新建sh脚本文件

#!/bin/bash

# 获取当前脚本所在的目录
SCRIPT_DIR=$(cd "$(dirname "$0")"; pwd)

# 定义变量
DB_HOST="your_db_host"
DB_USER="your_db_user"
DB_PASS="your_db_password"
DB_NAME="your_db_name"
TABLE_NAME="your_table_name"
OUTPUT_FILE="$SCRIPT_DIR/output.sql"  # 输出文件保存在脚本所在目录

# 记录开始时间
start_time=$(date +%s)

echo "Starting mysqldump at $(date)"

# 执行 mysqldump 命令
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS --single-transaction --quick --no-create-info $DB_NAME $TABLE_NAME > $OUTPUT_FILE

# 记录结束时间
end_time=$(date +%s)

# 计算耗时
elapsed_time=$(($end_time - $start_time))

echo "mysqldump completed at $(date)"
echo "Time taken: $(($elapsed_time / 60)) minutes and $(($elapsed_time % 60)) seconds"

直接执行sh,导出的sql文件会在当前sh所在目录下

标签:transaction,--,DB,导出,single,千万级,Mac,mysqldump,Mysql
From: https://www.cnblogs.com/aeolian/p/18373049

相关文章

  • Windows-安装MySQL数据库
    mysql安装:11.将zip包解压到指定目录,例如:D:\tools\mysql-8.0.18-winx64注:不放到C硬盘,win10系统权限不够会报错,麻烦2.复制改变my.ini文件放在目录:D:\tools\mysql-8.0.18-winx64\bin,并添加相关配置(给的文件中配置内容已经都有了)注1:my.ini配置文件里面非注释语句不要有“”双引......
  • 京东面试:mysql分库分表,深度翻页太慢,如何解决
    京东面试:mysql分库分表,深度翻页太慢,如何解决?在40岁老架构师尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein希音、shopee、百度、网易的面试资格,遇到很多很重要的面试题:mysql分库分表,深度翻页太慢,如何解决?分库分表后,分页......
  • MySQL基本数据类型
    MySQL数据类型MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以......
  • Mac安装Typora
    文章目录介绍软件功能下载安装1.下载完成后打开downloads双击进行安装2.将软件拖到应用程序中3.在程序坞中搜索打开4.提示安全问题就打开通用,安全隐私与设置5.打开成功小结介绍Typoraformac是一款简洁的轻量级的markdown编辑器、写作软件。它去除了预览窗口,模......
  • 银河麒麟系统V10(arm版)安装Mysql-5.7.29说明
    #银河麒麟系统适配#随着2024年微软全球蓝屏丑闻的出现,系统安全越来越重要。目前很多企业开始尝试国产化操作系统上,本文介绍如何在国产化银河麒麟系统V10(arm)版上安装mysql。本资源使用的是arm版本的Mysql-5.7.29离线安装包,能够在arm版国产化银河麒麟系统上进行安装,并配置防火......
  • MySQL 源码|51 - 语法解析:高级表达式
    目录文档:MySQL源码|源码剖析文档目录源码位置(版本=MySQL8.0.37):sql/sql_yacc.yy前置文档:MySQL源码|50-语法解析:基础表达式(simple_expr)在梳理了基础表达式simple_expr之后,我们就可以梳理更高级的表达式了。高级表达式的相关关系如下图所示:其中绿色节点为本章节梳......
  • 数据库MySQL之事务、索引
    目录1.概述2.事务3.索引3.1索引结构3.2操作语法1.概述场景:假如我们需要解散教学部,那么该部门下的所有员工都需要删除。如果教学部成功删除了,但员工出于某些原因(比如SQL语句写错了等)并没有删除,此时就会出现数据不一致的问题。这时我们可以通过数据库中的事务来解决。......
  • MySQL 源码|50 - 语法解析:基础表达式(simple_expr)
    目录文档:MySQL源码|源码剖析文档目录源码位置(版本=MySQL8.0.37):sql/sql_yacc.yy前置文档:MySQL源码|37-语法解析:聚集函数MySQL源码|38-语法解析:窗口函数MySQL源码|43-语法解析:关键字函数MySQL源码|44-语法解析:非关键字函数MySQL源码|45-语法解析:通用函数MySQL......
  • C#winform软件实现一次编译,跨平台windows和linux、mac兼容运行
    一、背景:微软的.netcore开发工具,目前来看,winform界面软件还没有打算要支持linux系统下运行的意思,要想让c#桌面软件在linux系统上运行,开发起来还比较麻烦。微软只让c#的控制台软件支持在linux运行。二、解决方案:我想到的一个方案是自定义封装软件的System.Windows.Forms组件,把......
  • 登录注册java版:结合mysql数据库
    packagecom.shujia.day18.logindemo;importcom.shujia.day18.utils.MysqlTool;importjava.io.*;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.Statement;importjava.util.ArrayList;importjava.u......