IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

ubuntu下移动mysql数据库位置

Linux|系统管理|WEB开发 2010-04-14 09:12:27 累计浏览 3,930 次
本机暂存

本来呢,这是一挺简单的活。停止数据库。把数据库文件移动到你指定的位置,设置好目录权限。修改my.cnf文件。主要是修改datadir的参数。基本上就OK了。

但是,Ubuntu下偏偏多了一个Apparmor的工具,据说是作为SELinux的一种替代方案。最开始我还不知道有这玩意儿存在。按照原来在RHEL上迁移默认数据库路径的方法在Ubuntu上做了以便。启动数据库的时候,无论你怎么设置目录的权限,属主和属组,都是会error -13的错误。就是说权限不够。但是我切换到mysql帐号下,mkdir,touch都很正常呀了。Google了半天,其中有人提到了Apparmor这东西。果然在/etc/apparmor.d/目录下看到usr.sbin.mysqld的配置文件,里面记录了mysqld可以对哪些路径进行操作的定义。按照规则修改,重启Apparmor服务。再重启mysql服务就正常了。

这里记录下我的搬迁过程,无过程无真相:

1)设置你的位置,我这里设定在/home/websites/database下面。数据文件放在/home/websites/database/mysql目录下,pid文件,错误日志放在/home/websites/database/var目录下。

cp -a /var/lib/mysql /home/websites/database

至于/var/run/mysqld这些就不要了。

2)设置权限,其中/home/websites/database这些只要有rx权限。/home/websites/database/mysql目录属主和属组都是mysql.而/home/websites/database/var 目录属主是mysql,组是root。

3)修改/etc/apparmor.d/usr.sbin.mysqld根据上面的描述,文件修改成下面这个样子:

01 # vim:syntax=apparmor
02 # Last Modified: Tue Jun 19 17:37:30 2007
03 #include <TUNABLES global>
04   
05 /usr/sbin/mysqld {
06   #include <ABSTRACTIONS base>
07   #include </ABSTRACTIONS><ABSTRACTIONS nameservice>
08   #include </ABSTRACTIONS><ABSTRACTIONS user-tmp>
09   #include </ABSTRACTIONS><ABSTRACTIONS mysql>
10   #include </ABSTRACTIONS><ABSTRACTIONS winbind>
11   
12   capability dac_override,
13   capability sys_resource,
14   capability setgid,
15   capability setuid,
16   
17   network tcp,
18   
19   /etc/hosts.allow r,
20   /etc/hosts.deny r,
21   
22   /etc/mysql/*.pem r,
23   /etc/mysql/conf.d/ r,
24   /etc/mysql/conf.d/* r,
25   /etc/mysql/my.cnf r,
26   /usr/sbin/mysqld mr,
27   /usr/share/mysql/** r,
28   /home/websites/database/var/mysqld_error.log rw,
29   /home/websites/database/mysql/ r,
30   /home/websites/database/mysql/** rwk,
31   /home/websites/var/ r,
32   /home/websites/var/* rw,
33   /home/websites/var/mysqld.pid w,
34   /home/websites/var/mysqld.sock w,
35 }
36 </ABSTRACTIONS></TUNABLES>

4)重启Apparmor服务,启动MySQL服务。查看/home/webistes/database/var目录下的mysqld_error.log文件,看看有什么报错没有,看看该目录下有没有mysql.sock和mysqld.pid,如果有的话,表示成功了。如果有包权限的问题。你可以su到mysql帐号,尝试在/home/websites/database/mysql目录下建立文件,创建目录看看。

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,251)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,399)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  4. Mysql监控指南 (累计阅读 21,351)
  5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  6. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,057)
  7. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  8. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,908)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,708)
  10. 检查nginx配置,重载配置以及重启的方法 (累计阅读 10,897)