ubuntu-16.04更改mysql默认数据存储目录

本文详细介绍如何安全地将MySQL的数据从默认存储位置转移到自定义的位置,包括步骤如查询数据目录、停止服务、转移文件、配置更新及权限调整等关键操作。

登录mysql查看当前数据存储目录

mysql -uroot -p

mysql> select @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

关闭mysql-server

sudo systemctl stop mysql

确认的确关闭mysql-server

sudo systemctl status mysql
  • 关闭无误,输出类似 "Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server."

转移数据目录

sudo rsync -av /var/lib/mysql /data/

备份源数据

sudo mv /var/lib/mysql /var/lib/mysql.bak
sudo mkdir /var/lib/mysql/mysql -p
  • sudo mkdir /var/lib/mysql/mysql -p 是为了保证 /usr/share/mysql/mysql-systemd-start 中验证目录正确

修改mysql-server配置 /etc/mysql/mysql.conf.d/mysqld.cnf

datadir=/data/mysql

AppArmor权限修改 追加以下内容到 /etc/apparmor.d/tunables/alias

alias /var/lib/mysql/ -> /data/mysql/,

重启AppArmor

sudo systemctl restart apparmor
  • 没有追加alias内容,可能导致

<pre>
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" 
and "journalctl -xe" for details.
</pre>

启动mysql-server

sudo systemctl start mysql
sudo systemctl status mysql

原文链接
https://www.digitalocean.com/...

中文部分转载于https://segmentfault.com/a/1190000008645395


<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、付费专栏及课程。

余额充值