Ubuntu 16.04 Linux系统下自定义MySQL数据库目录

By 大伟哥 | 2018-03-24,周六, 22:43

Ubuntu Server下安装MySQL数据库以后,默认的数据存放目录是/var/lib/mysql,正常使用是没有问题的,但是因为一些特别的原因,比如说为了方便重新安装系统,或者VPS服务器硬盘不够大需要另外购买并挂载数据盘,就需要我们修改默认的数据存放目录,比如说把数据库文件放在/home/user/data, 或者/mnt/data目录下。这里大伟哥说一下具体的步骤, 在Ubuntu Server 16.04 下测试通过。

  • 1. 停止MySQL服务。

    sudo service mysql stop

    或者

    sudo /etc/init.d/mysql stop
  • 2. 移动或复制数据库文件到新的目录,并把新的目录和文件的所有者和所属组仍旧指定为mysql:

    sudo mv /var/lib/mysql /home/daweibro/data/mysql

    或者

    sudo mkdir -p /home/daweibro/data/mysql
    sudo cp -R /var/lib/mysql/. /home/daweibro/data/mysql/
    sudo chown -R mysql:mysql /home/daweibro/data/mysql
    sudo mv /var/lib/mysql /var/lib/mysql-backup

    然后查看新的数据库目录本身以及里面所有文件/文件夹的属性,确保以上操作无误:

    sudo ll /home/david/data/mysql
    总用量 110640
    drwxrwxr-x 6 david david     4096 3月  24 12:15 ./
    drwxrwxr-x 4 david david     4096 3月  20 15:20 ../
    -rw-r----- 1 mysql mysql       56 3月  24 12:15 auto.cnf
    -rw-r--r-- 1 mysql mysql        0 3月  24 12:15 debian-5.7.flag
    -rw-r----- 1 mysql mysql      369 3月  24 12:15 ib_buffer_pool
    -rw-r----- 1 mysql mysql 12582912 3月  24 12:15 ibdata1
    -rw-r----- 1 mysql mysql 50331648 3月  24 12:15 ib_logfile0
    -rw-r----- 1 mysql mysql 50331648 3月  24 12:15 ib_logfile1
    drwxr-x--- 2 mysql mysql     4096 3月  24 12:15 mysql/
    drwxr-x--- 2 mysql mysql     4096 3月  24 12:15 performance_schema/
    drwxr-x--- 2 mysql mysql     4096 3月  24 12:15 phpmyadmin/
    drwxr-x--- 2 mysql mysql    12288 3月  24 12:15 sys/
  • 3.修改MySQL配置文件

    网上找到的很多博文帖子,都说是要修改的配置文件是/etc/mysql/my.cnf。没错,这是MySQL的配置文件,但是这个文件本身没有配置内容,还是又引用了两个目录下的其他配置文件,这两个目录分别是/etc/mysql/conf.d/和/etc/mysql/mysql.conf.d/。通过查看,大伟哥发现真正的配置内容其实是定义在/etc/mysql/mysql.conf.d/mysqld.cnf中,因此我们需要修改/etc/mysql/mysql.conf.d/mysqld.cnf文件,把里面的:

    datadir         = /var/lib/mysql

    修改成:

    datadir         = /home/daweibro/data/mysql
  • 4. 修改AppArmor安全策略,使得MySQL可以访问到新的数据库目录下的文件。

    修改文件/etc/apparmor.d/usr.sbin.mysqld,注释掉原来的文件夹,加入新的文件夹,如下面代码样式:

    # Allow data dir access
    #  /var/lib/mysql/ r,
    #  /var/lib/mysql/** rwk,
      /home/daweibro/data/mysql/ r,
      /home/daweibro/data/mysql/** rwk,
    

    修改文件/etc/apparmor.d/abstractions/mysql,注释掉原来的文件夹,加入新的文件夹,如下面代码样式:

    #   /var/lib/mysql{,d}/mysql{,d}.sock rw,
       /home/davidbro/data/mysql{,d}/mysql{,d}.sock rw,
  • 5. 重启AppArmor服务,重启MySQL服务。

    上述修改完成并保存后,需要重新启动重启AppArmor服务后才能正常启动MySQL服务:

    sudo /etc/init.d/apparmor restart
    [ ok ] Restarting apparmor (via systemctl): apparmor.service.
    sudo /etc/init.d/mysql start
    [ ok ] Starting mysql (via systemctl): mysql.service.

到这里,MySQL数据库的存放目录就由原来的/var/lib/mysql迁移到了现在的/home/daweibro/data/mysql了。如果启动过程中出现其他错误,可以查看系统日志,根据日志的提示进行相应的操作来解决问题。

添加新评论

此字段内容将保密,不会被其他人看见。
  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。
验证码
发布评论前,请通过下面的验证,以免被当作垃圾评论机器人屏蔽。
15 + 5 =
计算出这道简单的算术题并键入答案。例如、1+3,就输入 4。