首页 > 数据库 >MySQL 数据迁移

MySQL 数据迁移

时间:2025-01-09 13:55:05浏览次数:1  
标签:-- 备份 导出 mysqldump MySQL 迁移 数据 into

mysqldump 实现

mysqldump 是 MySQL 自带的备份工具,可以选择性的导出库表(整库、多库、单库、多表、单表)数据为 sql 文件

导出所有数据库

# -t:等价于 --no-create-info,表示仅导出数据,不导出表结构
# -d:等价于 --no-data,表示不包含数据,仅导出表结构
mysqldump -uroot -p --all-databases [-t] [-d] > 文件路径

导出指定单个或多个数据库

mysqldump -uroot -p --databases [-t] [-d] test1 [test2] [test3] > 文件路径

导出指定数据库的单个或多个表

mysqldump -uroot -p [-t] [-d] testDB test1 [test2] [test3] > 文件路径

导出指定数据表指定条件的数据

mysqldump -uroot -p [-t] [-d] testDB test1 --where "name = '张三'" > 文件路径

得到备份 sql 文件后导入

mysqldump -h [目标服务器ip] -P [目标服务器端口] -uroot -p < 文件路径

也可以使用 source 命令直接执行 sql 文件

source 文件路径

into oufile 和 load data infile 实现

授权用户 file 权限:

mysql > select * from mysql.user where user='root' \G;
mysql > update mysql.user set File_priv='Y' where user='root';
mysql > select * from mysql.user where user='root' \G;
mysql > flush privileges;

MySQL 使用 into outfile 语法导出数据时,只能导出数据文件到 secure-file-priv 指定的安全路径下,查看安全路径命令如下:

mysql> show variables like '%secure%';

如果不想用默认安全路径,可以在 MySQL 配置文件修改参数 --secure-file-priv 为自定义路径,如修改为空字符串 "" 则表示不限制路径

使用 into outfile 导出数据文件

select * from test into outfile 'C:/xxx/test.txt' [options];

into outfile 参数说明:

  • character set utf8:设置字符集为 utf8,防止中文乱码,需要放在 fields 前面
  • fields:域,后面常用字段有 terminated/optionally/escaped
    • terminated by 'string':设置字段数据之间的分隔符
    • optionally
      • enclosed by 'char':设置字段非数值的数据,使用什么符号引起,如英文双引号
      • escaped by 'char':字段数据存在特殊符号使用的转移符,默认是反斜杠
  • lines:设置每条记录的开头starting和结尾字符terminated
    • starting by 'char':设置每条记录的开头字符,默认空字符串
    • terminated by 'char':设置每条记录的结尾字符默认换行符

得到数据文件后,使用 load data infile 导入数据库

load data infile [文件路径] into table [表名称] [options];
  • character set utf8:设置字符集为 utf8,防止中文乱码,需要放在 fields 前面
  • fields:域,后面常用字段有 terminated/optionally/escaped
    • terminated by 'string':设置字段数据之间的分隔符
    • optionally
      • enclosed by 'char':设置字段非数值的数据,使用什么符号引起,如英文双引号
      • escaped by 'char':字段数据存在特殊符号使用的转移符,默认是反斜杠
  • lines:设置每条记录的开头starting和结尾字符terminated
    • starting by 'char':设置每条记录的开头字符,默认空字符串
    • terminated by 'char':设置每条记录的结尾字符默认换行符
  • (字段1,字段2,字段3):指定字段导入数据,注意放在整个语句最后

参数大多只需要跟 into outfile 导出参数保持一致即可

与 mysqldump 对比优缺点如下:

  • mysqldump:能完整备份结构和数据,包括表结构、存储过程、触发器等,但备份文件占用空间较大,备份和恢复的效率较慢
  • into outfile / load data infile:只能备份数据,但备份文件占用空间较小,备份和恢复效率较高

Kettle

Kettle 是一款基于 Java 的 ETL 工具,当涉及异构表或异构库的数据迁移时,可以使用 Kettle 工具轻松实现

参考文章:https://blog.csdn.net/Jmayday/article/details/102860582


迁移数据一致性

1. 备份一致性

MySQL 备份数据过程中如果发生数据更新,可以用以下方式处理:

使用锁机制。在备份开始前,对相关表或者整个数据库加锁,例如使用 FLUSH TABLES WITH READ LOCK 语句,阻止其他事务对数据修改,保证备份数据的一致性。这种方式会一定程度影响数据库的可用性,在锁生效期间,其他用户对数据的写操作会被阻塞

使用事务隔离级别。将备份操作放在一个具有高隔离级别的事务中,比如可重复读(REPEATABLE READ)隔离级别,这样事务内部读取的数据是事务开始时的数据状态,不受其他事务更新数据的影响

使用 MySQL 自带的备份工具,如 mysqldump,它提供一些选项来处理备份期间的数据变化。例如,使用 --single-transaction 选项,备份时会在一个事务中进行,确保备份数据的一致性,不会阻塞其他事务的读写操作

2. 恢复一致性

备份时最好同时备份二进制日志。在恢复数据时,先从备份文件恢复数据,再依据二进制日志里记录的备份后发生的事务,按照顺序应用这些事务,达到最终的一致性状态。例如,备份是在上午 10 点完成的,之后到 11 点的数据库更改都记录在二进制日志,恢复时就需要把日志中的更改应用到恢复的数据上

使用 mysqlbinlog 工具备份二进制日志:

静态备份,可先使用 show binary logs 语句查看当前服务器的二进制日志文件列表。如需备份特定的一组日志文件,如 binlog.000130 到 binlog.000132 ,可执行 mysqlbinlog --read-from-remote-server --host=host_name --raw binlog.000130 binlog.000131 binlog.000132;。若只指定起始文件并读取到最后一个文件,可使用 --to-last-log 选项,如 mysqlbinlog --read-from-remote-server --host=host_name --raw --to-last-log binlog.000130

实时备份,若要从某个日志文件开始进行实时备份,备份后续产生的所有新日志,可使用 --stop-never 选项,如 mysqlbinlog --read-from-remote-server --host=host_name --raw --stop-never binlog.000130

标签:--,备份,导出,mysqldump,MySQL,迁移,数据,into
From: https://www.cnblogs.com/Yee-Q/p/18659732

相关文章

  • MySQL 存储引擎
    存储引擎是处理不同表类型SQL操作的MySQL组件。MySQL服务器采⽤可插拔的存储引擎架构,在服务器运⾏时可以动态的加载和卸载。查看当前服务器⽀持哪些存储引擎可以使⽤showengines 语句,Engine表⽰:存储引擎的名称,Support:表⽰当前服务器是否⽀持,值分别为:YE......
  • 数据的存储(万字总结,建议收藏)
    目录原码、反码、补码大端存储和小端存储截断溢出 隐式类型转换(整形提升)数据的输出浮点数在内存中的存储原码、反码、补码计算机中的有符号整数有三种二进制表示方法 ,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”......
  • Vue3 ref函数 数据响应式
    1、作用:定义响应式数据2、语法a、创建创建一个包含响应式数据的引用对象letxx=ref(数据)b、JS操作xx.valuec、模板操作{{xx}}3、注意数据可以是:基本类型,也可以是对象类型基本类型需要.value获取值,对象中的数据不需要案例<template><h2>姓名:{{name}}</h2>......
  • AHU计组(5)数据表示实验
    【设计题目】      数据表示实验                    【设计目的】深入理解数据表示原理掌握海明编码的设计原理,理解其检错纠错性能掌握CRC校验码的基本原理,理解其检错、纠错性能熟悉流水同步传输机制,理解流水清空、暂停原理【设计内容】汉......
  • MySQL中的用户和权限管理(如果想知道MYSQL中有关用户和权限管理的知识,那么只看这一篇就
        前言:在MySQL数据库管理中,用户管理是确保数据安全和系统稳定的关键环节,通过合理的用户权限控制,管理员可以有效限制用户访问,防止非法操作和数据泄露,本文将介绍MySQL中常见的用户管理操作,包括用户创建、密码修改、删除用户和权限管理等。✨✨✨这里是秋刀鱼不......
  • 低功耗蓝牙芯片CH57x,CH58x,CH59x回读codeflash及dataflash数据
    一、读取Codeflash数据芯片内部程序是有加密的,不支持外部工具直接读取,因此只能通过内部接口读取,而ISP烧录器工具在烧录时,默认会擦除8k的数据,因此只能读到8k以后的codeflash部分:方式:烧录一份不超过8k的程序,烧录器烧录时不能勾选清空codeflash,保留8k以后的原固件数据,程序主体可......
  • vue 新增编辑的时候性别下拉框展示数据和列表展示对应的男和女
         相关代码<el-form-itemlabel="员工性别"><el-selectv-model="form.gender"placeholder="请选择性别"><el-optionv-for="dictindict.type.sys_user_sex"......
  • Python+Django鹿幸公司员工在线餐饮管理系统的设计与实现(Pycharm Flask Django Vue m
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django鹿幸公司员工在线餐饮管理系统的设计与实现(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框......
  • Python+Django高校网上缴费综合务系统(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django高校网上缴费综合务系统(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql5.7数......
  • mysql如果updatedate is null就把createdate设置到updatedate
      mysql>select*frome_task3instance_struct_8whereupdatedateisnull;+---------------------+----------------+--------------------+------------------+----------+--------------+----------+-----------+--------------------+----------+-------+--------......