Ubuntu修改MySQL默认数据库目录

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介:

    在CentOS修改MySQL数据库目录很简单,在my.cnf更改datadir路径后,启动即可,但在Ubuntu系统初次更改,可就上火了,因为Ubuntu有个AppArmor,是一个Linux系统安全应用程序,类似于Selinux,AppArmor默认安全策略定义个别应用程序可以访问系统资源和各自的特权,如果不设置服务的执行程序,即使你改了属主属组并0777权限,也是对服务起不到作用。网上大多数资料都说是权限问题,的确目录属性必须要改的,但不能解决问题。操作很简单,留个备忘,请看步骤!

1、停掉MySQL

# sudo /etc/init.d/mysql stop

2、修改MySQL数据库默认存放位置

# vi /etc/mysql/my.cnf

将datadir         = /var/lib/mysql

修改为datadir         = /data0/mysql

3、设置新数据库目录属主属组为mysql

# sudo chown mysql:mysql /data0/mysql

4、修改Ubuntu系统安全设置

# vi /etc/apparmor.d/usr.sbin.mysqld

将/var/lib/mysql/ r,

/var/lib/mysql/** rwk,

修改为现在目录

/data0/mysql/ r,

/data0/mysql/** rwk,

然后重启AppArmor:sudo /etc/init.d/apparmor restart

注:如果不修改,就会报如下错:

1
2
3
4
5
6
7
150208 10:48:47  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.
150208 10:48:47 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

5、重新初始化数据库

# sudo mysql_install_db

6、启动MySQL

# sudo /etc/init.d/mysql start

注:如果出现以下报错,debian-sys-maint是对mysql简单维护用的,这个用户信息记录在/etc/mysql/debian.cnf,因为mysql安装完成后已经生成密码,现在这个生成的和之前的不同,自然登陆不到mysql,故此报错。

ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

解决如下,先查看原来密码,然后修改为现在的密码:

1
2
3
4
5
6
7
8
9
# vi /etc/mysql/debian.cnf 
[client]
host     = localhost
user     = debian-sys-maint
password = mTHbclKSNuiyoifR
socket   =  /var/run/mysqld/mysqld .sock
......
mysql> grant all on *.* to  'debian-sys-maint' @ 'localhost'  identified by  'mTHbclKSNuiyoifR' ;
# sudo /etc/init.d/mysql restart  #再重新启动就没有报错了

7、设置数据库ROOT登陆密码

# mysqladmin -uroot password '123456'

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
Java 关系型数据库 MySQL
HikariPool-1 - Exception during pool initialization. Springboot 默认选择的mysql
HikariPool-1 - Exception during pool initialization. Springboot 默认选择的mysql
1375 1
MySQL 日志之 binlog 格式 → 关于 MySQL 默认隔离级别的探讨
背景问题 再讲 binlog 之前,我们先来回顾下主流关系型数据库的默认隔离级别,是默认隔离级别,不是事务有哪几种隔离级别,别会错题意了 1、Oracle、SQL Server 的默认隔离级别是什么,MySQL 的呢 ? 2、为什么 MySQL 的默认隔离级别是 RR ?
|
SQL 缓存 关系型数据库
mysql 的预编译功能默认是关闭的| 学习笔记
快速学习 mysql 的预编译功能默认是关闭的。
309 0
mysql 的预编译功能默认是关闭的| 学习笔记
|
存储 Ubuntu 关系型数据库
Ubuntu 18.04 修改Mysql默认数据存储路径
Ubuntu 18.04 修改Mysql默认数据存储路径
482 0
Ubuntu 18.04 修改Mysql默认数据存储路径
|
关系型数据库 MySQL 数据库
mysql中如何将默认用户名root改成其他?
mysql中如何将默认用户名root改成其他?
523 0
mysql中如何将默认用户名root改成其他?
|
关系型数据库 MySQL 数据库连接
使用MySqL替代Freeswitch默认的SQLite数据库 以提高性能
使用MySqL替代Freeswitch默认的SQLite数据库 以提高性能
|
关系型数据库 MySQL 数据库
MySQL约束-默认约束(default)、零填充约束(zerofill)
MySQL约束-默认约束(default)、零填充约束(zerofill)
283 0
MySQL约束-默认约束(default)、零填充约束(zerofill)
|
Ubuntu 安全 关系型数据库
Ubuntu安装MySQL 8.0.21更改默认用户密码
Ubuntu安装MySQL 8.0.21更改默认用户密码
1446 0
Ubuntu安装MySQL 8.0.21更改默认用户密码
|
关系型数据库 MySQL 数据库
MySQL - GROUP BY 默认查询第几条数据?
MySQL - GROUP BY 默认查询第几条数据?
699 0
|
存储 关系型数据库 MySQL
为什么Mysql的常用引擎都默认使用B+树作为索引?
为了讲清楚这个问题,阿粉先带大家了解一下什么是索引。
为什么Mysql的常用引擎都默认使用B+树作为索引?