线上迁移mysql 的datadir

一 问题描述

线上mysql  用的版本是 5.7  由于 之前 安装 datadir 是默认安装, datadir  /var/lib/mysql     ,但是随着 mysql 的数据量的增大, /var 目录 磁盘有点比较紧张,已经用到了80%,因此 更改datadir  可以说是 迫在眉睫。 

二 迁移步骤 

1先看看 之前的配置

root     292354  0.0  0.0 106224  1080 ?        S    Feb15   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql    292615 17.8  0.2 1757264 281552 ?      Sl   Feb15 41493:50 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306

2 首先进入 mysql 数据库,开启只读模式,防止在迁移数据的时候,数据又被写入, 把 read_only  设置成1  

show global variables like "%read_only%";
flush tables with read lock;
set global read_only=1;
show global variables like "%read_only%";
3 移动,或者拷贝 datadir 的内容,到一个大的磁盘分区下面,赋予mysql 的权限

 cp  -rf /var/lib/mysql   /mnt/diskc/data/
 chown -R mysql.mysql   /mnt/diskc/data/mysql  
4 修改 启动脚本和  配置文件 的 datadir ,  为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。 修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/mnt/diskc/data/mysql/mysql.sock   操作如下:

同时 在  my.cnf  中 添加 如下配置段:

[client]
socket = /mnt/diskc/data/mysql/mysql.sock
default-character-set=utf8
[mysqld]
datadir=/mnt/diskc/data/mysql
socket=/mnt/diskc/data/mysql/mysql.sock
character-set-server=utf8

5 重启 mysqld  服务 

/etc/init.d/mysqld restart 
6进入数据库 查看   datadir 

mysql> show  variables like '%datadir%';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| datadir       | /mnt/diskc/data/mysql/ |
+---------------+------------------------+

7 查看 进程 
ps aux |grep mysql
root     245222  0.0  0.0 106324  1488 ?        S    Jul27   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/mnt/diskc/data/mysql --socket=/mnt/diskc/data/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql    245533 12.4  0.6 13216988 817496 ?     Sl   Jul27 108:05 /usr/sbin/mysqld --basedir=/usr --datadir=/mnt/diskc/data/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/mnt/diskc/data/mysql/mysql.sock --port=3306

可以看出 迁移 已经成功。 

8  mysql 将MySQL从只读设置为读写状态

进入mysql  数据库

unlock tables;
set global read_only=0;

三 总结: 

 这样就算是 更改了 mysql 的datadir  ,也是一次比较成功小小经验。 当然 可能 迁移的过程中,可能出现一些问题,这个时候就要看 错误日志,具体问题具体分析。






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值