如何更改在Ubuntu下的MySQL的默认数据库存储位置

Ubuntu下MySQL数据迁移
本文介绍如何在Ubuntu系统中更改MySQL数据库的存储位置,并详细解释了数据库文件结构、停止数据库进程的方法、转移数据库文件的步骤及修改配置文件等内容。

在Ubuntu下安装的MySQL默认配置下的数据库文件存储位置是在/var/lib/mysql,

MySQL数据库的文件结构是怎么样的呢,对于这样子创建的数据库命令:
  CREATE DATABASE mysqldb
  在默认的数据库存储位置下就会有个文件夹mysqldb。要操作数据库首先得停止数据库进程:
  $sudo /etc/init.d/mysql stop

 

本文以转移到/home/mysql这个位置为例,下面命令将原有数据库转移到新位置:
  $sudo cp –R –p /var/lib/mysql /home/mysql
  编辑MySQL配置文件:
  $gksu gedit /etc/mysql/my.cnf
  在 gedit中找到datadir这一行,将后面等于号之后的内容更改为/home/mysql然后保存退出。自Ubuntu 7.10开始,
  Ubuntu就开始使用一种安全软件叫做AppArmor,这个安全软件会在你的文件系统中创建一个允许应用程序访问的区域(专业术语:应 用程序访问控制)。如果不为MySQL修改AppArmor配置文件,永远也无法为新设置的数据库存储位置启动
  数据库服务。配置AppArmor:
  $sudo nano /etc/apparmor.d/usr.sbin.mysqld
  在gedit中找到/var/lib/mysql/这两行,注释掉这两行,在这两行前分别添加一个符号“#”即可注释,在这两行之前或
  之后加上下面内容:
  /home/mysql/ r, 
  /home/mysql/** rwk,
  保存后退出,执行命令:
  $sudo /etc/init.d/apparmor reload
  返回Reloading AppArmor profiles : done.即可以重启MySQL服务:
  $sudo /etc/init.d/mysql start
  至此MySQL数据库存储位置就更改完毕了。
  FAQ:
  Q:当我运行$sudo /etc/init.d/apparmor reload却返回信息
  Skipping profile /etc/apparmor.d/usr.sbin.mysqld~ 
  : Warning.
  并且也无法启动MySQL服务,怎么办呢?
   A:出 现这个问题可能是因为你使用了$sudo gedit或$gksu gedit这样子的命令来编辑usr.sbin.mysqld这个配置文件的,这两个图形界面文本编辑器会在相同位置生成一个 usr.sbin.mysqld~的文件,从而影响了AppArmor读取配置文件,出现这个问题先删除这个usr.sbin.mysqld~文件:
  $sudo rm /etc/apparmor.d/usr.sbin.mysqld~
  然后使用$sudo nano这个终端文本编辑器来编辑配置文件即可。

 

       本文 转载自:  http://www.examda.com/ncre/three/db/fudao/20090531/083919323.html

 

<think>嗯,用户想要在Ubuntu系统下修改MySQL存储位置。这个问题看起来涉及到数据库的迁移和配置,需要注意的步骤可能不少。首先,我需要回忆一下MySQLUbuntu上的默认数据目录在哪里。通常,MySQL的数据目录是/var/lib/mysql,对吧?所以用户可能想把这个目录换到其他地方,比如另一个硬盘分区或者更大的存储空间。 接下来,我得考虑整个流程。首先,用户需要停止MySQL服务,这样才能安全地移动数据文件。否则,正在运行的服务可能会造成数据损坏。停止服务的命令应该是sudo systemctl stop mysql,或者如果是MariaDB的话,可能是sudo systemctl stop mariadb,不过用户问的是MySQL,所以应该用mysql服务。 然后,确认MySQL确实已经停止了,使用systemctl status mysql检查状态。这一步很重要,确保没有进程还在使用旧的数据目录。 接下来是复制现有的数据到新的位置。用户需要使用rsync或者cp命令来复制文件,保留权限。比如,rsync -av /var/lib/mysql/ /新目录的路径。这里需要注意,新目录的权限和所有权必须设置正确,否则MySQL可能无法访问。通常,MySQL的运行用户是mysql,所以新目录的所有者和组应该是mysql:mysql,权限设为750或者755,可能需要调整。 然后,修改MySQL的配置文件。主配置文件一般是/etc/mysql/mysql.conf.d/mysqld.cnf或者/etc/mysql/my.cnf,需要找到datadir这一项,将其改为新的路径。记得备份原文件,避免出错后无法恢复。 此外,可能需要更新AppArmor的配置,因为Ubuntu的AppArmor可能会限制MySQL访问新目录。编辑/etc/apparmor.d/tunables/alias,添加别名,然后重启AppArmor服务。否则,MySQL可能因为权限问题无法启动。 完成这些后,启动MySQL服务,检查是否正常。如果启动失败,需要查看日志,通常是/var/log/mysql/error.log,根据错误信息排查问题,比如权限问题或者配置错误。 可能用户会遇到的问题包括:忘记修改AppArmor配置导致权限被拒绝,或者新目录的所有权没有正确设置。这时候需要提醒用户检查这些点。另外,如果使用的是SELinux(虽然Ubuntu默认不是),可能需要调整安全上下文,不过Ubuntu一般用AppArmor,所以重点在那边。 还有,数据迁移后,可能需要测试数据库是否正常,比如连接数据库,执行一些查询,确保数据完整。如果之前有应用依赖MySQL,也需要确保应用的配置文件中的数据库路径是否受到影响,不过通常应用不需要改,因为连接是通过socket或者网络,而不是直接访问数据目录。 最后,建议用户在整个过程中备份重要数据,避免操作失误导致数据丢失。可能还需要处理原数据目录,比如重命名或者保留一段时间,确认迁移成功后再删除。 总结一下,步骤大概是:停止服务→复制数据→修改配置→处理权限和AppArmor→启动服务→验证。每个步骤都可能需要具体命令和检查,确保用户能一步步跟着操作,避免出错。</think>在 Ubuntu 系统中修改 MySQL 存储位置需要以下步骤,过程涉及**数据迁移、配置修改和权限调整**,请严格按照顺序操作: --- ### 一、准备工作 1. **备份数据** ```bash sudo mysqldump --all-databases > /path/to/backup.sql ``` 2. **确认新存储路径** 假设新目录为 `/new/data/dir`,需提前创建并记录绝对路径。 --- ### 二、停止 MySQL 服务 ```bash sudo systemctl stop mysql # 停止服务 sudo systemctl status mysql # 确认状态为 "inactive" ``` --- ### 三、迁移数据文件 1. **复制原数据目录** ```bash sudo rsync -av /var/lib/mysql/ /new/data/dir/ ``` 2. **重命名原目录(备份)** ```bash sudo mv /var/lib/mysql /var/lib/mysql.bak ``` --- ### 四、修改 MySQL 配置 1. **编辑配置文件** ```bash sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf ``` 2. **找到 `datadir` 项并修改** ```ini datadir = /new/data/dir ``` --- ### 五、处理权限问题 1. **设置目录所有权** ```bash sudo chown -R mysql:mysql /new/data/dir sudo chmod -R 750 /new/data/dir ``` 2. **更新 AppArmor 配置** ```bash sudo nano /etc/apparmor.d/tunables/alias ``` 添加以下内容后保存: ```conf alias /var/lib/mysql/ -> /new/data/dir/, ``` 重启 AppArmor: ```bash sudo systemctl restart apparmor ``` --- ### 六、启动 MySQL 服务 ```bash sudo systemctl start mysql sudo systemctl status mysql # 确认状态为 "active (running)" ``` --- ### 七、验证操作 1. **登录 MySQL 检查路径** ```sql SHOW VARIABLES LIKE 'datadir'; ``` 2. **测试数据库读写** 执行简单的查询操作,例如 `SELECT 1;` 或检查表数据。 --- ### 八、清理旧数据(可选) 确认新位置运行正常后: ```bash sudo rm -rf /var/lib/mysql.bak ``` --- ### 常见问题排查 1. **启动失败** - 检查 `/var/log/mysql/error.log` 中的错误日志 - 确认目录权限:`ls -ld /new/data/dir` - 确保 AppArmor 规则已生效 2. **表不存在或数据丢失** 从备份恢复: ```bash sudo mysql < /path/to/backup.sql ``` --- 通过以上步骤,您已安全完成 MySQL 数据存储位置的迁移。建议操作前在测试环境演练一次。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值