MySQL · 答疑解惑 · mysqldump tips 两则

简介: 背景 用户在使用mysqldump导数据上云的时候碰到两个“诡异”的问题,简单分析分享下。 TIP 1 --port端口无效? 本地有3306和3307两个端口的实例,执行命令为: mysqldump --host=localhost --port=300x -Ddb1 db1 -r out

背景

用户在使用mysqldump导数据上云的时候碰到两个“诡异”的问题,简单分析分享下。

TIP 1 --port端口无效?

本地有3306和3307两个端口的实例,执行命令为:

mysqldump --host=localhost --port=300x -Ddb1 db1 -r outputfile

发现无论执行端口写入3306还是3307,导出的都是3306端口实例的数据。

代码分析

实际上不论是mysqldump还是mysql客户端,在连接数据库时都调用了 CLI_MYSQL_REAL_CONNECT 这个函数,里面的一段代码逻辑如下

if(!host || !strcmp(host,LOCAL_HOST)
{
  vio_socket_connect(...
}
其中 #define LOCAL_HOST "localhost"

也就是说,当host参数值为localhost的时候,mysql和mysqldump客户端使用的是–socket参数,如果未指定,则使用默认的/tmp/mysql.sock。
因此上面用户的输入,不论–port 输入多少,都被忽略。而他的/tmp/mysql.sock 就是属于3306端口实例。

从代码中可以看到,必须是全小写的localhost才满足条件,若是Localhost,则解析成127.0.0.1,用的是 ip + port 的模式,此时 –socket 参数无效。

TIP 2 导出的数据无法导入?

使用mysqldump默认参数导出5.6 的数据,无法导入到目标库。

当源库使用了GTID模式时,在dump出来的文件中为了保持目标库和源库GTID值相同,增加了两个语句, SET @@SESSION.SQL_LOG_BIN= 0 和 SET @@GLOBAL.GTID_PURGED='xxxx'

而实际上增加这两个语句会有诸多问题:

  1. 关闭binlog首先需要super权限,如果目标库只能使用普通账号,则会导致执行失败;
  2. 即使有super权限,也会导致这些操作不记录到binlog,会导致主备不一致。当然也可以说,这就要求同一份dump要restore到目标库的主库和所有备库才能保持主备一致;
  3. SET @@GLOBAL.GTID_PURGED='xxxx'这个命令要求目标库的gtid_executed值是空。若非空,这个命令执行失败;
  4. reset master可以清空gtid_executed值,也需要super权限。

因此在导出5.6的数据时,有两种可选方案:

  1. 在有目标库的super权限时,用默认dump参数,在导入到目标库之前,先执行reset master;这样需要在主库和所有备库都执行相同个导入动作;
  2. mysqldump需要增加参数 –set-gtid-purged=off,这样不会生成上述两个语句,数据能够直接导入。但是目标库的gtid set就与源库不同。

需要根据业务需求选择。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
6月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1145 1
|
6月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
376 5
|
关系型数据库 MySQL Shell
备份 MySQL 的 shell 脚本(mysqldump版本)
【4月更文挑战第28天】
184 0
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表10、数据导入和导出——1、数据导入(LOAD DATA, mysqldump)——2、数据导出(SELECT ... INTO OUTFILE, mysqldump)
MySQL技能完整学习列表10、数据导入和导出——1、数据导入(LOAD DATA, mysqldump)——2、数据导出(SELECT ... INTO OUTFILE, mysqldump)
311 0
|
关系型数据库 MySQL 数据库
MySQL实战基础知识入门(6):mysql使用mysqldump导出数据出错的解决方案
MySQL实战基础知识入门(6):mysql使用mysqldump导出数据出错的解决方案
475 0
|
关系型数据库 MySQL 数据库
MySQL mysqldump教程:轻松备份与迁移数据库
MySQL mysqldump教程:轻松备份与迁移数据库
1697 1
|
关系型数据库 MySQL Shell
MySQL 备份:从mysqldump全备中 匹配出某几个表
MySQL 备份:从mysqldump全备中 匹配出某几个表
|
SQL 存储 关系型数据库
运维笔记.MySQL.基于mysqldump数据备份与恢复
运维笔记.MySQL.基于mysqldump数据备份与恢复
349 0
|
存储 关系型数据库 MySQL
mysql mysqldump用法详解
mysql mysqldump用法详解
1124 0
|
弹性计算 关系型数据库 MySQL
备份MySQL(mysqldump 版本)
【4月更文挑战第29天】
99 0

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多