CentOS下更改MySQL数据文件目录位置

本文详细介绍如何将CentOS环境下MySQL的数据文件从默认位置/var/lib/mysql迁移到/home/data目录,并提供了具体的步骤指导,包括创建目录、修改配置文件等。

我是直接在CentOS 5.5环境下安装的RPM包,mysql默认的数据文件存储目录为/var/lib/mysql
假如要把目录移到/home/data下需要进行下面几步:

1、home目录下建立data目录
cd /home
mkdir data
2、停止mysql进程
mysql -u root -p shutdown
3、把/var/lib/mysql整个目录移到/home/data


mv /var/lib/mysql /home/data/
这样MySQL的数据文件就移动到了/home/data/mysql下
4、找到my.cnf配置文件
如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/找到my-medium*.cnf文件,拷贝到/etc/并改名为my.cnf
命令如下:
[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
5、编辑/etc/my.cnf
为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock
socket=/home/data/mysql/mysql.sock
操作如下:
vi   my.cnf  (用vi工具编辑my.cnf文件,找到下列数据修改之)
# The MySQL server[mysqld] 
port = 3306
#socket  = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)
socket  = /home/data/mysql/mysql.sock (加上此行)
6、修改MySQL启动脚本/etc/init.d/mysql
把其中datadir=/var/lib/mysql一行中修改成现在的实际存放路径:home/data/mysql
[root@test1 etc]# vi /etc/init.d/mysql
#datadir=/var/lib/mysql(注释此行)www.linuxidc.com
datadir=/home/data/mysql (加上此行)


最后做一个mysql.sock 链接:
ln -s /home/data/mysql/mysql.sock /var/lib/mysql/mysql.sock(需要从/home/data/mysql下复制一份过来)
7、重新启动MySQL服务
/etc/init.d/mysqld start

或用reboot命令重启Linux

如果工作正常移动就成功了,否则对照前面的7步再检查一下。
8、最后修改下数据库的权限
[root@localhost ~]# chown -R mysql:mysql /home/data/mysql/  ← 改变数据库的归属为mysql

[root@localhost ~]# chmod 700 /home/data/mysql/test/  ← 改变数据库目录属性为700

[root@localhost ~]# chmod 660 /home/data/mysql/test/*  ← 改变数据库中数据的属性为660

 

9  如果启动不成功,查看/var/log/mysql.log,如果是出现错误:

110222 11:15:07 [Warning] Can't create test file /home/mysql/localhost.lower-test
 /usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
110222 11:15:07 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110222 11:15:07  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to

 

 

#在终端中先输入下面这一行

 

chown -R mysql:mysql /home/data/mysql

 

#在输入下面的一行就OK了

 

chcon -R -t mysqld_db_t /home/data/mysql

 

 

#重启下MYSQL试试~

 

/etc/init.d/mysqld restart

 

<think>嗯,用户想在Linux系统下迁移MySQL的数据目录,修改数据文件的路径,需要配置教程。我需要先整理一下步骤,确保每个环节都正确。首先,根据引用的资料,步骤大致包括停止MySQL服务、创建目标目录、移动数据文件、修改配置文件,可能还有权限设置和其他后续处理。 首先,用户的环境可能有不同的Linux发行版,比如CentOS、Ubuntu等,不同系统的配置文件位置可能不同。比如引用[2]提到CentOS 7的配置文件在/etc/my.cnf,而引用[3]提到Ubuntu 16.04的在/etc/mysql/mysql.conf.d/mysqld.cnf。我需要提醒用户注意区分系统版本,确认配置文件路径。 接下来,步骤应该是这样的:停止MySQL服务,创建新目录并设置权限,移动数据文件,修改配置文件中的datadir,然后重启服务。但根据引用[5],直接覆盖数据可能会有问题,特别是ibdata1文件,可能需要先备份原来的数据,再删除新目录下的ibdata1,再复制过来。这可能需要特别说明,避免用户遇到表无法打开的问题。 另外,权限设置也很重要,新目录需要让mysql用户和组有访问权限,如引用[1]中的chown和chmod操作。可能还需要检查SELinux或AppArmor的设置,如果有启用的话,可能需要调整安全上下文或配置,否则MySQL可能无法访问新目录。 迁移完成后,如何验证是否成功呢?可能需要检查MySQL的状态,或者登录后查看数据目录变量。如果启动失败,查看错误日志是关键,比如通过journalctl -xe或者查看MySQL的日志文件,常见的问题可能是权限不足或配置错误。 还要注意,不同的MySQL版本可能有细微差别,比如MySQL 8.0和5.7的配置方式是否不同。引用[5]提到的是迁移复制MySQL5.7的数据,而引用[1]使用的是MySQL 8.0,但步骤大致相同,但用户需要确认自己的版本是否需要特殊处理。 另外,用户可能还关心迁移后的数据一致性,是否需要使用mysqldump或其他工具进行备份,或者直接移动文件是否足够安全。引用[5]提到直接覆盖可能导致问题,所以推荐先备份ibdata1,然后删除再复制,这可能适用于InnoDB引擎的情况,而MyISAM可能不同。需要提醒用户根据存储引擎的不同采取不同措施吗?不过这可能比较复杂,可能用户只需要按照步骤操作即可。 最后,生成相关问题的时候,要考虑用户可能的后续疑问,比如如何处理迁移后的权限问题,或者如何迁移到远程存储,或者如何处理迁移过程中的数据同步问题,比如引用[4]提到的数据迁移工具,可能用户之后会感兴趣。</think>### 分步指南:在Linux下迁移MySQL数据目录 #### **1. 停止MySQL服务** 首先停止MySQL服务以防止数据损坏: ```bash systemctl stop mysqld # CentOS/RHEL系统 # 或 systemctl stop mysql # Ubuntu/Debian系统 ``` #### **2. 创建新目录并授权** 创建目标目录(如`/data/mysql`)并设置权限: ```bash mkdir -p /data/mysql chown mysql:mysql /data/mysql # 所有权交给mysql用户组 chmod 750 /data/mysql # 设置目录权限 ``` #### **3. 迁移数据文件** - **方法一:直接复制(推荐备份后操作)** 将原数据目录(默认`/var/lib/mysql`)内容复制到新目录: ```bash rsync -av /var/lib/mysql/ /data/mysql/ ``` 若遇到`ibdata1`文件冲突(InnoDB引擎),参考引用[5]建议: ```bash mv /data/mysql/ibdata1 /data/mysql/ibdata1.bak # 备份新目录的ibdata1 rm -f /data/mysql/ibdata1 # 删除新目录的ibdata1 cp /var/lib/mysql/ibdata1 /data/mysql/ # 复制原文件 ``` - **方法二:直接移动** ```bash mv /var/lib/mysql/* /data/mysql/ ``` #### **4. 修改MySQL配置文件** 编辑配置文件以更新`datadir`参数: - **CentOS/RHEL**:`/etc/my.cnf` [^2] - **Ubuntu/Debian**:`/etc/mysql/mysql.conf.d/mysqld.cnf` [^3] 修改内容示例: ```ini [mysqld] datadir=/data/mysql socket=/data/mysql/mysql.sock # 若需调整socket路径 ``` #### **5. 处理SELinux/AppArmor(可选)** 若系统启用SELinux(CentOS)或AppArmor(Ubuntu): ```bash # SELinux设置 semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" restorecon -Rv /data/mysql # AppArmor(Ubuntu) vim /etc/apparmor.d/usr.sbin.mysqld # 添加新目录路径 systemctl reload apparmor ``` #### **6. 重启MySQL服务** ```bash systemctl start mysqld # CentOS/RHEL # 或 systemctl start mysql # Ubuntu/Debian ``` #### **7. 验证迁移** - 检查MySQL状态: ```bash systemctl status mysqld ``` - 登录MySQL验证数据目录: ```sql SHOW VARIABLES LIKE 'datadir'; ``` #### **故障排查** - **错误日志**:查看`/var/log/mysqld.log`(CentOS)或`/var/log/mysql/error.log`(Ubuntu)。 - **权限问题**:确保新目录的属主为`mysql:mysql`。 - **配置文件语法**:使用`mysqld --verbose --help`检查配置是否生效。 --- ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值