mysql 更改数据目录

用show variables like 'datadir',可查看真正的data目录

1、首先我们需要关闭MySQL,命令如下:

   service mysqld stop

2、然后是转移数据,为了安全期间,我们采用复制的命令cp,先找到mysql的原目录

   cd /var/lib
   ls

   运行这个命令之后就会看到mysql的目录了,然后执行cp命令

   cp -a mysql /home/mysql_data/

   这样就把数据库复制到/home/mysql_data下面去了

   注意:(-a这个参数一定要带着,否则复制过去的权限就不对了。)
   如果数据库比较大的话,时间会比较长,可能会超时,具体怎么设置ssh不超时的办法,请大家自己找相关资料。

3、然后我们修改配置文件,一共有三个,下面我一一说明:

   修改第一个文件:修改之前先备份cp  /etc/my.cnf /etc/my.cnfbak

   vi /etc/my.cnf

   打开之后修改datadir的目录为/home/mysql_data/mysql,

   把socket改成/home/mysql_data/mysql/mysql.sock,为了安全起见,你可以把原来的注释掉,然后重新加入一行,改成现在的目录。

   修改第二个文件:修改之前先备份 cp /etc/init.d/mysqld /etc/init.d/mysqldbak

   vi /etc/init.d/mysqld

   注意:准确的位置是/etc/rc.d/init.d/mysqld,由于这里这里有一个/etc/init.d到/etc/rc.d/init.d的映射,所以用上面的命令即可,也简单。

   把其中datadir/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:/home/mysql_data/mysql

   修改第三个文件:修改之前先备份 cp /usr/bin/mysqld_safe /usr/bin/mysqld_safebak

   vi /usr/bin/mysqld_safe

   这里也是修改datadir的目录为/home/mysql_data/mysql

4、下面需要建立一个mysql.sock的链接:

   ln -s /home/mysql_data/mysql/mysql.sock /var/lib/mysql/mysql.sock

   至此所有的修改都完成了,下面启动mysql

   service mysqld start

   或者重启linux

   reboot

 

<think>好的,用户想在Linux系统中更改MySQL数据目录。我需要根据提供的引用资料整理步骤。首先,要确定用户的需求是正确修改数据目录,避免启动错误。 根据引用[1],默认数据目录在/var/lib/mysql,用户需要将整个目录结构迁移到新位置。可能需要停止MySQL服务,复制数据,然后修改配置文件。引用[3]提到创建目录并授权,确保权限正确,否则可能导致启动问题。这里要注意目录的所有者和组设置为mysql:mysql,避免权限不足。 接下来,引用[5]提到配置文件权限问题,如果设置成777会导致MySQL忽略配置文件,应该改为644。所以在修改my.cnf时,不仅内容要正确,文件权限也要检查。 然后,用户可能需要处理符号链接的问题,如引用[2]中使用软连接解决路径问题。如果直接修改数据目录遇到问题,可以尝试使用软链接,但直接修改配置是更推荐的方法。 另外,引用[4]指出如果MySQL用户的家目录不存在,启动时会报错。所以需要确保/home/mysql存在,或者调整用户的家目录设置,避免此类问题。 综合这些步骤,正确的流程应该是:停止服务→备份数据→创建新目录并授权→修改配置文件→复制数据→重启服务→验证。同时,需要注意配置文件的权限和目录所有权,避免常见的错误如Errcode:2或无法切换目录的问题。 可能用户会遇到的问题包括目录权限不正确、配置文件被忽略、数据未完全迁移等。需要提醒用户检查日志文件,确认错误信息,并根据情况调整权限或路径设置。此外,SELinux或AppArmor也可能影响目录访问,如有必要需调整安全策略。</think>### Linux系统中更改MySQL数据目录的步骤 #### 1. 停止MySQL服务 首先确保MySQL服务已停止: ```bash sudo systemctl stop mysql ``` #### 2. 创建新数据目录并授权 假设新目录为`/mnt/data/mysql`: ```bash sudo mkdir -p /mnt/data/mysql sudo chown -R mysql:mysql /mnt/data/mysql # 关键权限设置[^3] ``` #### 3. 迁移原有数据 复制原数据目录内容到新位置: ```bash sudo rsync -av /var/lib/mysql/ /mnt/data/mysql/ ``` #### 4. 修改MySQL配置文件 编辑`/etc/mysql/mysql.conf.d/mysqld.cnf`(路径可能因版本而异): ```ini [mysqld] datadir = /mnt/data/mysql # 修改此项[^1] socket = /mnt/data/mysql/mysql.sock ``` #### 5. 处理配置文件权限 确保配置文件权限为644: ```bash sudo chmod 644 /etc/mysql/mysql.conf.d/mysqld.cnf # 避免被忽略[^5] ``` #### 6. 更新AppArmor/SELinux策略(如需要) Ubuntu系统需修改AppArmor配置: ```bash sudo vim /etc/apparmor.d/usr.sbin.mysqld # 添加新目录路径到文件权限规则 sudo systemctl reload apparmor ``` #### 7. 重启MySQL服务 ```bash sudo systemctl start mysql ``` #### 8. 验证数据目录 登录MySQL执行: ```sql SHOW VARIABLES LIKE 'datadir'; ``` ### 常见问题排查 1. **启动报错**`Can't change dir to '/new/path'` - 检查目录权限是否为`mysql:mysql`[^3] - 确认目录路径拼写正确 2. **配置文件被忽略** 错误提示`World-writable config file`时,需执行: ```bash sudo chmod 644 /path/to/my.cnf # 修改权限[^5] ``` 3. **软链接替代方案** 若直接修改失败,可使用符号链接(临时方案): ```bash sudo ln -s /mnt/data/mysql /var/lib/mysql # 强制关联[^2] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值