一 问题描述
线上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 ,也是一次比较成功小小经验。 当然 可能 迁移的过程中,可能出现一些问题,这个时候就要看 错误日志,具体问题具体分析。