热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Golang+MySQL]记一次MySQL数据库迁移(一)

【Golang+mysql】记一次mysql数据库迁移(一)文章地址:https:github.comstayfoostayfoo-hub一、准备目标:腾讯云CVM自建mysql数






【Golang+mysql】记一次mysql数据库迁移(一)

文章地址: https://github.com/stayfoo/stayfoo-hub


一、准备


  • 目标:

腾讯云 CVM 自建 mysql 数据迁移到腾讯云数据库 mysql


  • 腾讯云 CVM 自建 mysql 现状:


    • 1、mysql 版本:Ver 8.0.15 for Linux on x86_64 (MySQL Community Server - GPL)



    • 2、mysql 文件目录数据大小: 2.4 G (/var/lib/mysql)



      • 查看 msyql 数据目录位置:mysql> show variables like '%datadir%';

      • 查看 /var/lib/mysql 目录的大小: du -sh

      mysql> show variables like '%datadir%';
      +---------------+-----------------+
      | Variable_name | Value |
      +---------------+-----------------+
      | datadir | /var/lib/mysql/ |
      +---------------+-----------------+
      1 row in set (0.04 sec)


    • 3、只有一个 root 账户,只允许 localhost 访问



    • 4、数据库字符集:charset=utf8




  • 起因:

    api 服务、报表计划任务、以及其他计划任务、自建 mysql 都在同一台腾讯 CVM 上面。计划任务执行的时候,mysql 占用 CPU 过高,会导致 api 服务无法正常使用。所以考虑腾讯云数据库 mysql,使用主从架构(先尝试使用一主一从),master mysql 主要服务于 api 服务,slave mysql 主要用于计划任务。



  • 腾讯云数据库 mysql


    • 1、腾讯云数据库 mysql 与腾讯云服务器 CVM,同一账号下,同一个地域支持使用内网 ip 访问。(比如 CVM 是重庆,云数据库必须也是重庆,并且是在同一账号下)



    • 2、购买腾讯云 mysql 5.7(支持的最大版本,没有8.0):先购买一台高可用版 mysql,作为 master mysql,之后可以扩展多台 slave mysql



    • 3、迁移工具:腾讯云DTSmysqldump(备用)





二、迁移


  • 1、使用 DTS 迁移

购买完云 mysql,初始化,开始使用 DTS 进行迁移。 自建 mysql 和 云 mysql 是属于同一个账号下,同一区域下,可以使用内网直接访问。

image


  • 2、查看 CVM 自建 mysql 用户

mysql> select host,user,plugin from user;

发现只有一个 root 账号,只能 localhost 访问,需要创建新账号,指定购买的云 mysql 的内网 ip 授权访问的新账号。在 CVM 自建 mysql 创建账号:

mysql> GRANT ALL PRIVILEGES ON *.* TO "stay"@"1xx.xx.0.0" IDENTIFIED BY "111";

创建账号,并授权,发现报错。提示不能用 grant 创建用户。 原来 mysql8.0 以前的版本可以使用 grant 在授权的时候隐式的创建用户。mysql8.0 以后已经不支持。mysql8.0 必须先创建用户,然后再授权,命令如下:

mysql> CREATE USER 'stay'@'172.30.0.0' IDENTIFIED BY '密码';
Query OK, 0 rows affected (0.48 sec)
mysql> grant all privileges on *.* TO 'stay'@'172.30.0.0';
Query OK, 0 rows affected (0.48 sec)

注意:密码不能和 root 账户相同。

参考 mysql8.0 文档:https://dev.mysql.com/doc/refman/8.0/en/pr...



  • 3、在腾讯云 mysql 操作 DTS

输入源库设置,接入类型选择云主机自建,选择自建 mysql 所在的主机实例ID,所属区域,自建 mysql 的端口号,输入新建的账号,密码。

配置完成之后,测试连通性,Telnet 通过,MySQL Connect 失败。提示:MySQL Connect无法连接源实例。请检查实例账号、密码,并确认源实例是否取消对[172.30.0.0/20]的访问限制 如图:

image

创建账号的时候,对[172.30.0.0/20]的访问是授权的。

尝试设置 CVM 服务器安全组,把 172.30.0.0(即云mysql内网 ip)设置为信任访问 3306 端口。测试连接依然不行。

尝试新创建了一个对所有ip都能访问授权的账号,并测试在本地电脑远程连接自建 mysql 是没有问题的。然后把这个账号密码配置到 DTS 源库上,测试连通性,依然不行。

给腾讯云 mysql 提了工单,让腾讯云工程师协助解决。工单:

image


源库连接失败原因:


  • 数据库账号或密码不正确

  • 源数据库对来源IP进行了限制

  • 源数据库服务器设置了防火墙

  • 网络互通问题

    可以参考:https://help.aliyun.com/document_detail/52...

知道是因为版本问题导致的,自建 mysql8.0.15,而腾讯云 mysql 最高支持 5.7DTS 不支持从 8.0.15 迁移到 5.7,所以连通性测试会一直失败。


  • 4、使用 mysqldump 手动迁移数据


mysqldump 工作原理:查出需要备份的表结构 -> 生成一个 create sql语句(sql后缀名的文本文件);表中所有记录 -> 转成一条 insert 语句。


先从源数据库导出数据库表结构信息:

# 导出数据库表结构(导出的是创建表结构的sql语句)
mysqldump --opt -d[库名] -u[数据库用户名] -p[密码] > /导出的文件名字存储路径.sql

从源数据库导出数据信息:

mysqldump -t[数据库名] -u[数据库用户名] -p[数据库密码] > xxx.sql

CVM 主机上使用内网 ip 链接云 mysql,先创建同名数据库:

mysql> create DATABASE sf_factory charset=utf8;

然后,依次导入数据库表结构信息,数据库数据:

mysql> source [导出的数据库表结构.sql];
mysql> source [导出的数据库数据.sql];

参考 msyql 8.0官方文档:https://dev.mysql.com/doc/refman/8.0/en/my...



  • 5、验证数据完整性



  • 6、删除自建 mysql 多余账号信息



mysql> drop user stay@"172.30.0.0/20";

方式一:drop 不仅会将 user 表中的数据删除,还会删除对应权限表内容。

#drop user xxxx; 默认删除的是 'xxxx'@'%'
drop user xxxx;
drop user 'xxxx'@'localhost';
drop user 'xxxx'@'172.xx.x.x';

方式二:delete 只会删除 user 中的内容。所以使用 delete 删除用户后需要执行 FLUSH PRIVILEGES;刷新权限,否则下次使用 create 创建用户会报错。




mysql


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
author-avatar
好久不见.Mr
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有