Ubuntu 20.04修改MySQL的datadir

mysql默认的数据目录在根目录, 重新系统或者系统更新容易丢失数据, 数据量大时, 会占用太多系统空间, 在生产环境, 这是非常危险的.通常的作法是挂载数据盘, 用于数据存储, 定期快照备份;

修改前准备

  1. 备份数据(非常重要) /var/lib/mysql, /etc/mysql…等
  2. 挂载一块数据盘到系统, 本文是: /mnt/www, 并修改/etc/fstab自动挂载

编辑配置

  1. 先停止mysql服务
sudo systemctl stop mysql
  1. 复制mysql原数据目录的数据到新目录
# 创建目录 
sudo mkdir /mnt/www
# 授权
sudo chmod 777 /mnt/www
# 自动挂载数据盘
sudo vim fstab 
# 追加
/dev/sdb1       /mnt/www        ext4    defaults        0       0

# a: 保持所有属性, v: 表示打印一些信息, z: 在传输过程中压缩
sudo rsync -avz /var/lib/mysql/ /mnt/www/data/mysql/data
# 检查复制结果
sudo ls -la /mnt/www/data/mysql/data
  1. 修改datadir
sudo vim /etc/mysql/mysql.cnf
[mysqld]
bind-address = 0.0.0.0
datadir=/mnt/www/data/mysql/data

在这里插入图片描述

  1. 修改 AppArmor配置
sudo vim /etc/apparmor.d/tunables/alias
# 在默认目录和新位置之间创建别名来告诉AppArmor让MySQL写入新目录
alias /var/lib/mysql/ -> /mnt/www/data/mysql/,

sudo vim /etc/apparmor.d/usr.sbin.mysqld 
#追加
/www/data/mysql/ r,
/www/data/mysql/** rwk,

#  remove mysql apparmor Profile
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
#  parse mysql apparmor Profile
sudo apparmor_parser /etc/apparmor.d/usr.sbin.mysqld
# 重启apparmor
sudo systemctl restart apparmor
# 重启mysql
sudo systemctl start mysql
# 登录mysql, 验证
select @@datadir

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

异常情况

  1. mysqld: Can’t change dir to ‘/www/data/mysql’ (Errcode: 13 - Permission denied)
    检查/mnt/www, /mnt/www/data/目录是否具有写入权限, 也就是mysql数据目录的上级目录需要写入权限, 自己mkdir出的目录通常有此问题

    sudo chmod 777 /mnt/www
    sudo chmod 777 /mnt/www/data/
    
  2. Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock
    检查/var/run/mysqld/是否存在, 是否是mysql:mysql用户组

  3. apparmor DENIED , AppArmor 阻止了 MySQL 服务启动

    方法1: 检查AppArmor配置
    方法2: 改变 AppArmor 的默认工作模式,由强制模式改为抱怨模式

    sudo apt-get install apparmor-utils
    sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld 
    sudo systemctl reload apparmor
    

    方法3: 禁用AppArmor的的某个配置

    sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
    sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
    sudo systemctl reload apparmor
    
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值