CentOS中MySQL8.0迁移data数据文件

CentOS中MySQL8.0迁移data数据文件


文章目录

  • CentOS中MySQL8.0迁移data数据文件
  • 一. 准备工作
    • 1. 清理binlog日志
    • 2. 查看MySQL运行状态
    • 3. 查询和关闭SELINUX
    • 3.1 查询
      • 3.2 永久关闭
      • 3.3 重启系统
      • 3.4 验证
    • 4. 查看当前MySQL data文件位置
    • 5. 查看MySQL data占用空间
    • 6. 目录
  • 二. 迁移
    • 1. 关闭MySQL
    • 2. 转移数据
      • 2.1 理论
      • 2.2 脚本
  • 注意:执行完后一定要删除定时任务,不删除的后果很严重 +1
  • 很严重+2,很严重+3,很严重+4
    • 3. 修改新目录的权限
  • 三. 修改配置文件
    • 1. /etc/my.cnf
      • 1.1 备份
      • 1.2 编辑配置文件
    • 2. /etc/init.d/mysql
      • 2.1 备份
      • 2.1 编辑配置文件
  • 四. 启动MySQL
  • 五、可能会出现的问题


一. 准备工作

1. 清理binlog日志

PURGE binary LOGS BEFORE '2023-08-19 03:00:00'; 
  • 详细说明见:MySQL安全删除binlog日志
  • 如果没有这方面需求可忽略

2. 查看MySQL运行状态

  • 主要目的是查看当前MySQL是使用什么命令启动的
service mysql status
或
service mysqld status
或
systemctl status mysql
或
systemctl status mysqld.service

3. 查询和关闭SELINUX

  • SELINUX对文件权限和访问控制进行了更加严格的限制,这可能阻止一些应用程序的正常运行。为了避免MySQL无法读取数据导致迁移失败,选择关闭。

3.1 查询

[root@localhost log]# getenforce
Disabled

3.2 永久关闭

vim /etc/selinux/config

SELINUX=disabled
SELINUXTYPE=targeted

3.3 重启系统

[root@localhost ~]# reboot

3.4 验证

[root@localhost log]# /usr/sbin/sestatus
SELinux status:                 disabled
[root@localhost log]# getenforce
Disabled

4. 查看当前MySQL data文件位置

  • 在MySQlL中查询
SHOW VARIABLES
或
SHOW VARIABLES LIKE 'datadir';
或
SELECT @@datadir;

5. 查看MySQL data占用空间

[root@localhost data]# /home/mysqldata/data/
[root@localhost mysqldata]# du -sh ./*
269G	./data
702M	./log

6. 目录

  • 当前目录 /home/mysqldata/data/
  • 目标目录 /data/mysqldata/data/
  • 创建目标目录
    mkdir /data/mysqldata/
    chown mysql:mysql mysqldata
    

二. 迁移

1. 关闭MySQL

  • 关闭

    service mysql stop
    
  • 启动

    可以测试关闭后在不改动情况下能不能启动成功

    service mysql start
    

2. 转移数据

2.1 理论

  • 转移数据(mv或cp原始数据库数据目录文件)

  • 这里用的cp,为了安全考虑,直接复制一份,如果失败原始数据不会影响,可以快速回滚到之前的目录启动数据库

    cp -a /home/mysqldata/data /data/mysqldata/
    
    -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合;
    -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
    -p:保留源文件或目录的属性;
    -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
    可以cp命令参考CP说明。另说明mv命令能保留文件的所有属性和权限,尤其是selinux属性,但是不能快速回滚,这个自己权衡吧,看哪个合适。
    

2.2 脚本

  • 由于MySQL data文件过大为了防止SSH超时关闭和等待,通过服务端定时执行脚本

  • 执行完后一定要删除定时任务,不删除的后果很严重

    ##########################################################
    ## 建存脚本文件
    #vi cp_mysqldata.sh
    #chmod 755 cp_mysqldata.sh
    
    ## 每天01:30自动执行脚本
    #查询crontab状态 service crond start
    #crontab -e
    #30 01 * * * /root/cp_mysqldata.sh
    
    ## 建存放日志的文件
    #vi cp_mysqldata.log
    #chmod 755 cp_mysqldata.log
    ##########################################################
    
    #!/bin/sh
    echo "======== 迁移MySQL date目录开始 ========"
    
    # 创建时间变量用于记录开始时间
    time=$(date "+%Y-%m-%d %H:%M:%S")
    
    # 创建日志文件变量,用于记录执行日志
    FILE=/root/cp_mysqldata.log
    
    echo "----------------------------------- 迁移MySQL date目录开始-----------------------------------">>${FILE}
    echo $time
    echo $time>>${FILE}
    
    cp -a /home/mysqldata/data /data/mysqldata/
    	if [ $? -eq 0 ]; then
    	     echo "迁移success">>${FILE}
    	else
    	     echo "迁移fail">>${FILE}
    	fi
    
    # 重新赋值时间变量用于记录结束时间 
    time=$(date "+%Y-%m-%d %H:%M:%S")
    
    echo $time
    echo $time>>${FILE}
    echo "======== 迁移MySQL date目录结束 ========"
    echo "----------------------------------- 迁移MySQL date目录结束-----------------------------------">>${FILE}
    
  • 注意:执行完后一定要删除定时任务,不删除的后果很严重 +1

  • 很严重+2,很严重+3,很严重+4

crontab -e

3. 修改新目录的权限

chown -R mysql:mysql mysqldata/data,-R逐级修改

三. 修改配置文件

1. /etc/my.cnf

1.1 备份

cp /etc/my.cnf /etc/my.cnf_bak

1.2 编辑配置文件

  • vim /etc/my.cnf
  • 修改如下几项( #为了安全起见,把原来的注释掉,然后重新加入一行,改成现在的目录,也会为了快速回滚。)
[mysqld]
# datadir=/home/mysqldata/data
datadir=/data/mysqldata/data

# 可以选择不修改
# log-bin=/home/mysqldata/log/mysql-bin
log-bin=/data/mysqldata/log/mysql-bin

2. /etc/init.d/mysql

  • 也可能是/etc/init.d/mysqld
  • 注意:准确的位置是/etc/rc.d/init.d/mysqld,由于这里这里有一个/etc/init.d到/etc/rc.d/init.d的映射,所以用上面的命令即可。

2.1 备份

cp /etc/init.d/mysql /etc/init.d/mysql_bak

2.1 编辑配置文件

  • vim /etc/init.d/mysql
# datadir=/home/mysqldata/data
datadir=/data/mysqldata/data

四. 启动MySQL

- 启动
service mysql start
- 查看状态
service mysql status

五、可能会出现的问题

[root@dbserver data]# service mysql status
 ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists

参考:https://blog.51cto.com/u_16175478/6598286

  • 存在锁文件未能清理导致
  • 删除锁文件即可
rm /var/lock/subsys/mysql

你可能感兴趣的:(MySQL,mysql)