如何在MySQL 8中实现数据迁移?这里有一个简单易用的方案

news2024/11/17 10:35:48

文章目录

  • 前言
  • 一. 致敬IT领域的那些女性
  • 二. 进制方式安装MySQL
    • 2.1 下载软件包
    • 2.2 配置环境:
      • 2.2.1 配置yum环境
      • 2.2.2 配置安全前的系统环境
    • 2.3 开始安装
    • 2.4 初始化MySQL
    • 2.5 修改配置文件
    • 2.6 将MySQL设为服务并启动测试
  • 三. MySQL数据迁移
  • 总结

前言

正好赶上IT女神节,本文也是为致敬女神节而做的文章,参加了csdn 【IT女神勋章】挑战赛,关于挑战赛的内容可以参考:https://activity.csdn.net/creatActivity?id=10305&utm_source=1518487446

在这里插入图片描述
在这里插入图片描述

另外本文首发于csdn,收录到【我是沐风晓月】博客的【数据库入门与精通】专栏:

在这里插入图片描述

更多内容,请关注csdn博主: 我是沐风晓月

一. 致敬IT领域的那些女性

世界上第一位电脑程序设计师是名女性:Ada Lovelace(1815-1852)是一位英国数学家兼作家,她是第一位主张计算机不只可以用来算数的人,也发表了第一段分析机用的演算法。因此,Ada 被公认为史上第一位认识电脑完全潜能的人,也是史上第一位电脑程序设计师。

Grace Hopper (1906-1992)是最早的计算机之一哈佛Mark I的第一批程序员,并为第一个程序设计语言设计了编译器。她是 COBOL 语言的设计者,常被称为 COBOL 之母。除了语言设计之外,她在语言标准化方面也做出了奠基性的贡献。

而云原生领域,也有很多杰出的女性:

-Liz Rice是一位云安全专家,也是Aqua Security的技术副总裁。她是Kubernetes安全性工作组的成员之一,也是Kubernetes Handbook的合著者之一。她在云安全和Kubernetes方面做出了重要贡献

  • Michelle Noorali是一位云原生软件开发者,也是Microsoft的云原生计算团队成员之一。她是Helm Chart的创建者之一,也是CNCF的Ambassador之一。她在云原生软件开发和社区建设方面做出了重要贡献。

-Priyanka Sharma是CNCF的总经理,也是Kubernetes Community Days的创始人之一。她在云原生社区建设和管理方面做出了重要贡献,并推动了Kubernetes和其他云原生项目的发展。

-Priyanka Sharma是CNCF的总经理,也是Kubernetes Community Days的创始人之一。她在云原生社区建设和管理方面做出了重要贡献,并推动了Kubernetes和其他云原生项目的发展。

她们通过她们的才智、勇气和贡献,为云原生技术和开源社区的发展做出了不可替代的贡献,值得我们纪念和敬仰。

在这里插入图片描述

二. 进制方式安装MySQL

2.1 下载软件包

官网: https://dev.mysql.com/downloads/mysql/

在这里插入图片描述
在这里插入图片描述

我们选择其中一个下载:

 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz

2.2 配置环境:

2.2.1 配置yum环境

  1. 备份 CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 

2,下载新Centos-7.repo,命名为CentOS-Base.repo

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 

3,清除缓存

yum clean all # 清除系统所有的yum缓存 
yum makecache # 生成yum缓存 
yum update (可以不更新)
yum install vim -y

2.2.2 配置安全前的系统环境

centos7中安装MySQL,很容易因为系统环境的原因导致安装失败,所以提前删掉系统中可能存在的其他的包。

[root@mufeng21 ~]# rpm -qa |grep mysql
[root@mufeng21 ~]# rpm -qa |grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
[root@mufeng21 ~]# rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps
[root@mufeng21 ~]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/usr/lib64/mysql
[root@mufeng21 ~]# rm -rf  /etc/selinux/targeted/active/modules/100/mysql /usr/lib64/mysql

2.3 开始安装

  1. 解压软件包
    解压后把解压好的包,放入/usr/local/mysql下:
[root@mufeng21 ~]# tar xf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz 
[root@mufeng21 ~]# mv mysql-8.0.31-linux-glibc2.12-x86_64 mysql
[root@mufeng21 ~]# mv mysql /usr/local/mysql

  1. 创建MySQL用户和用户组
[root@mufeng ~]# groupadd mysql 
[root@mufeng ~]# useradd -r -g mysql -s /bin/false mysql
[root@mufeng ~]# 

注释:
– r :系统用户 g: 组 s:登录的shell

  1. 授权:
[root@mufeng ~]# chown -R mysql:mysql /usr/local/mysql
  1. 设置环境变量
vim /etc/profile

export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH

设置远程后,在设置生效

使变量生效:
source /etc/profile

2.4 初始化MySQL

为什么要初始化MySQL?

在MySQL中,初始化是指创建并配置数据目录、配置文件和系统表等操作。这是在第一次安装MySQL或升级MySQL版本时必须执行的步骤。

创建初始化可以达成几个目标:

  • 创建数据目录:MySQL使用数据目录来存储所有数据库、表、索引、日志等数据。初始化过程中,MySQL会自动创建这些目录,确保数据库能够正常工作。

  • 配置文件:MySQL的配置文件包含了各种设置,如端口号、字符集、缓冲池大小等等。初始化过程中,MySQL会生成默认的配置文件,并且在后续的运行中,会使用这个配置文件来启动和配置MySQL。

  • 系统表:MySQL中的系统表是存储MySQL系统信息的表。初始化过程中,MySQL会创建这些系统表,并把一些重要的信息插入到这些表中,这些信息包括用户信息、权限信息、配置信息等。

总之,初始化MySQL是确保数据库能够正常工作的关键步骤,也是保障数据库安全和可靠性的重要措施。

[root@mufeng21 ~]# cd /usr/local/mysql/
[root@mufeng21 bin]# mkdir  /usr/local/mysql/data

[root@mufeng21 mysql]# cd bin/

[root@mufeng21 bin]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2022-11-11T23:28:54.622732Z 0 [System] [MY-013169] [Server] /mydbs/app/mysql-8.0.31-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.31) initializing of server in progress as process 78892
2022-11-11T23:28:54.839401Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-11-11T23:28:57.561283Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-11-11T23:29:02.228029Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: S26!Nx/tit8)

初始化结束后,最后那个S26!Nx/tit8)就是数据库的密码;

2.5 修改配置文件

这里我们使用一个配置文件的模板, 直接复制到 /etc/my.cnf上即可:

vim /etc/my.cnf

[client]

port = 3306
socket = /tmp/mysql.sock
[mysqld]

#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id = 1

#服务端口号 默认3306
port = 3306

#mysql安装根目录
basedir = /usr/local/mysql

#mysql数据文件所在位置
datadir = /usr/local/mysql/data

#临时目录
tmpdir  = /tmp

#设置socke文件所在目录
socket = /tmp/mysql.sock

#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
skip-external-locking

#只能用IP地址检查客户端的登录,不用主机名
skip_name_resolve = 1

#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
transaction_isolation = READ-COMMITTED

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci

#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'

#是否对sql语句大小写敏感,1表示不敏感
#lower_case_table_names = 1

#最大连接数
max_connections = 400

#最大错误连接数
max_connect_errors = 1000

#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp = true

#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet = 128M


#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800

#内部内存临时表的最大值 ,设置成128M。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 134217728
max_heap_table_size = 134217728


#数据库错误日志文件
log_error = error.log

#慢查询sql日志设置
slow_query_log = 1
slow_query_log_file = slow.log
#开启binlog
log_bin=on

#检查未使用到索引的sql
log_queries_not_using_indexes = 1

#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
log_throttle_queries_not_using_indexes = 5

#作为从库时生效,从库复制中如何有慢sql也将被记录
log_slow_slave_statements = 1

#慢查询执行的秒数,必须达到此值可被记录
long_query_time = 8

#检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit = 100

#mysql binlog日志文件保存的过期时间,过期后自动删除
expire_logs_days = 5


2.6 将MySQL设为服务并启动测试

  • 先将MySQL设置为使用service 命令启动的服务:
cd /usr/local/mysql/support-files/
cp mysql.server /etc/init.d/mysql.server

  • 启动并测试:
oot@mufeng support-files]# service mysql.server start
Starting MySQL.Logging to '/usr/local/mysql/data/error.log'.
... SUCCESS! 

  • 修改密码
[root@itlaoxin21 support-files]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> 
  • 查看是否正常启动
[root@mufeng support-files]# lsof -i:3306
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  79678 mysql   33u  IPv6 244969      0t0  TCP *:mysql (LISTEN)


[root@itmufeng support-files]# netstat -antup |grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      79678/mysqld        
tcp6       0      0 :::33060                :::*                    LISTEN      79678/mysqld        

可以看到已经正常启动了。

三. MySQL数据迁移

  1. 先从数据库中查找配置文件的默认目录
mysql> show variables like 'datadir';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| datadir       | /usr/local/mysql/data/ |
+---------------+------------------------+
1 row in set (0.04 sec)

2 . 登录目录查看是否存在

[root@mufeng ~]# cd /usr/local/mysql/data/
[root@mufeng data]# ls
auto.cnf         error.log          ibtmp1        mysql.ibd           public_key.pem   undo_001
ca-key.pem       #ib_16384_0.dblwr  #innodb_redo  on.000001           server-cert.pem  undo_002
ca.pem           #ib_16384_1.dblwr  #innodb_temp  on.index            server-key.pem
client-cert.pem  ib_buffer_pool     mufeng.pid    performance_schema  slow.log
client-key.pem   ibdata1            mysql         private_key.pem     sys
[root@mufeng data]# 

    • 创建需要迁移到的目录
[root@mufeng data]# mkdir -p /data/mysql001
  1. 停止数据库迁移数据
  • 停止数据库
[root@mufeng data]# service mysql.server stop
Shutting down MySQL. SUCCESS! 
  • 拷贝数据库
root@mufeng data]# pwd
/usr/local/mysql/data
[root@mufeng data]# cp -a mysql /data/mysql001/
  • 授权
[root@mufeng data]# chown mysql:mysql -R !$
chown mysql:mysql -R /data/mysql001/
[root@mufeng data]# 
  1. 修改配置文件

vim /etc/my.cnf 中设置 datadir = /data/mysql001/mysql/data

在这里插入图片描述
6. 重新初始化

[root@mufeng data]# pwd
/usr/local/mysql/data
[root@mufeng data]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql001/mysql/data
  1. 重启数据库并测试
[root@mufeng data]# service mysql.server start 
Starting MySQL.. SUCCESS! 


[root@mufeng data]# lsof -i :3306
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  23359 mysql   24u  IPv6 172326      0t0  TCP *:mysql (LISTEN)
[root@mufeng data]# 

mysql -uroot -p123456

如果你这里遇到: 数据迁移结束,重启数据库成功但无法登录的问题,如下:

启动后,数据库可以用,但无法登录:
[root@mufeng data]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

此时最大的可能性是selinux没有关闭,直接关闭就可以进入。

  1. 查看修改后的目录
mysql> show variables like 'datadir';
+---------------+----------------------------+
| Variable_name | Value                      |
+---------------+----------------------------+
| datadir       | /data/mysql001/mysql/data/ |
+---------------+----------------------------+
1 row in set (0.00 sec)

mysql> 

到此数据迁移就做完了,这只是数据迁移的其中一种方法,而非唯一方法。

总结

  • 💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
  • 💕 博客主页:mufeng.blog.csdn.net
  • 💕 本文由沐风晓月原创,首发于CSDN博客
  • 💕 全力以赴,持续学习,不负如来不负卿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/398869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Linux运维实战:ansible中的变量定义及以及变量的优先级》

一、配置文件优先级 Ansible配置以ini格式存储配置数据,在Ansible中⼏乎所有配置都可以通过Ansible的Playbook或环境变量来重新赋值。在运⾏Ansible命令时,命令将会按照以下顺序查找配置⽂件。 # ⾸先,Ansible命令会检查环境变量&#xff0c…

【node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 最全面有效的解决方案】

执行nodejs文件错误: 这个错误提示通常是由于你的系统无法识别 "node" 命令,可能是由于你没有正确地安装或配置 Node.js 环境变量。 问题描述 ​​​​​​​​​​​​​​ 原因分析: 可能原因包括: 1.Node.js未正确安…

JVM堆与堆调优以及出现OOM如何排查

调优的位置——堆 Heap,一个JVM只有一个堆内存,堆内存的大小是可以调节的。 类加载器读取了类文件后,一般会把什么东西放到堆中?类,方法,常量,变量~,保存我们所有引用类型的真实对象; 堆内存中…

【Linux修炼】15.进程间通信

每一个不曾起舞的日子,都是对生命的辜负。 进程间通信进程间通信一.理解进程间通信1.1 什么是通信1.2 为什么要有通信1.3 如何进行进程间通信二.管道2.1 匿名管道2.2 匿名管道编码部分2.3 管道的特点2.4 如何理解命令行中的管道2.5 进程控制多个子进程三.命名管道3.…

openEuler用户软件仓(EUR)介绍

什么是 EUR EUR(openEuler User Repo)是openEuler社区针对开发者推出的个人软件包托管平台,目的在于为开发者提供一个易用的软件包分发平台。 链接:https://eur.openeuler.openatom.cn/ 为什么我们需要 EUR 在操作系统的世界,软件包是一等…

数据库基本功之复杂查询-多表连接

1. 简单查询的解析方法 全表扫描:指针从第一条记录开始,依次逐行处理,直到最后一条记录结束;横向选择纵向投影结果集 2. 多表连接 交叉连接(笛卡尔积) 非等值连接 等值连接 内连 外连接(内连的扩展,左外,右外,全连接) 自连接 自然连接(内连,隐含连接条件,自动匹配连接字段) …

以创作之名致敬女性开发者

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 前言 在昨天的2023年3月8日,是咱们女性朋友的节日妇女节,本章将会…

腾讯云GPU游戏服务器/云主机租用配置价格表

用于游戏业务的服务器和普通云服务器和主机空间是不同的,游戏服务器对于硬件的配置、网络带宽有更大的要求,一般游戏服务器根据不同的配置和适用场景会有十几元一小时到几十元一小时,而且可以根据不同的按量计费。而普通的云服务器可能需要几…

Linux程序替换

Linux程序替换创建子进程的目的?程序替换如何实现程序替换?什么是程序替换?先见一见单进程版本的程序替换程序替换原理多进程版本的程序替换execl函数组简易版Shell创建子进程的目的? 目的:为了帮助父进程完成一些特定的任务&…

网络实时变更监控

网络变更监控 未经授权的配置变更会严重破坏业务连续性,这就是为什么检测和跟踪变更是网络管理员的一项关键任务。虽然可以手动跟踪变更,但此方法往往很耗时,并且经常会导致人为错误,例如在跟踪时遗漏了关键网络设备的配置。 要解…

JavaEE简单示例——Spring的控制反转

简单介绍: 在之前的入门程序中,我们简单的介绍了关于Spring框架中的控制反转的概念,这次我们就来详细的介绍和体验一下Spring中的控制反转的理论和实操。 使用方法: 控制反转(IoC)是面向对象编程中的一个…

HTML5 和 CSS3 的新特性

目标能够说出 3~5 个 HTML5 新增布局和表单标签能够说出 CSS3 的新增特性有哪些HTML5新特性概述HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持&…

CentOS 部署rocketmq集群

一、rocketmq 概览 1.rocketmq简介 rocketmq是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。能够保证严格的消息顺序,提供丰富的消息拉取模式,高效的订阅者水平扩展能力,实时的消息订阅机制。 2.rocketmq结…

项目四:使用路由交换机构建园区网-任务三:配置路由交换机并进行通信测试

配置路由交换机并通信测试1、在RS-1上创建VLAN并配置Trunk接口2、测试通信结果3、配置RS-1的三层路由接口(SVI)1、在RS-1上创建VLAN并配置Trunk接口 进入系统视图,关闭信息中心,重命名为RS-1 system-view undo info-center enab…

day48第九章动态规划(二刷)

今日任务 198.打家劫舍213.打家劫舍II337.打家劫舍III 今天就是打家劫舍的一天,这个系列不算难,大家可以一口气拿下。 198.打家劫舍 题目链接: https://leetcode.cn/problems/house-robber/description/ 题目描述: 你是一个…

synchronized轻量级锁优化

synchronized优化轻量级锁 使用场景 如果一个对象虽然有多个线程访问,但多线程访问时间是错开的,也就是没有竞争,那么可以使用轻量级锁优化; 原理 1、每个线程的栈帧中有锁记录 包括:记录锁对象的地址Object refer…

一次有效沟通的组成

犹记得之前看过一篇文章当中写道 『Tech Lead 作为开发团队的技术负责人,对内对外都起到至关重要的作用。Tech Lead 对外是团队技术能力的展现窗口,需要将团队的技术能力呈现给客户或业务团队。对内他需要和各个角色紧密协作,给非技术角色技术…

50年前的程序员女神,用代码把人类送上月球

1969年7月20日,经过4天飞行的阿波罗11号终于来到了最关键的时刻:降落到月球表面。就在这个时候,飞船计算机突然开始闪烁报警。全球6亿人在观看电视直播,NASA飞行控制中心的气氛让人窒息。人类的首次登月计划面临着艰难的抉择&…

d3绘图笔记

D3绘图笔记 安装与引用 npm install d3 --save-dev import * as d3 from d3; 选择器 d3.select() 可直接接元素名,也可以接属性与类 添加svg标签 this.d3 d3.select(.myd3) let svg this.d3.append("svg") // 添加svg并设置好高宽 .attr("wid…

<Linux>system v通信

前言😃😃😃进程间通信的方式管道 - Linux原生提供SystemV - 多线程单机通信posix - 多线程网络通信这里我们主要是介绍一下SystemV通信方式一、SystemV原理首先我们需要知道通信的本质:多个进程能看到同一个资源,即内存…