MySQL更改数据库数据存储目录

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

MySQL数据库默认的数据库文件位于/var/lib/mysql下,有时候由于存储规划等原因,需要更改MySQL数据库的数据存储目录。下文总结整理了实践过程的操作步骤。

 

1:确认MySQL数据库存储目录

[root@DB-Server tmp]# mysqladmin -u root -p variables | grep datadir
 
Enter password: 
 
| datadir | /var/lib/mysql/
 

 

2:关闭MySQL服务

在更改MySQL的数据目录前,必须关闭MySQL服务。

方式1

[root@DB-Server ~]# service mysql status
 
MySQL running (9411)[ OK ]
 
[root@DB-Server ~]# service mysql stop
 
Shutting down MySQL..[ OK ]
 
[root@DB-Server ~]# 
 

clip_image001

 

方式2

[root@DB-Server ~]# /etc/rc.d/init.d/mysql status
 
MySQL running (8900)[ OK ]
 
[root@DB-Server ~]# /etc/rc.d/init.d/mysql stop
 
Shutting down MySQL..[ OK ]
 
[root@DB-Server ~]# 
 
 
 

 

3:创建新的数据库存储目录

 

[root@DB-Server ~]# cd /u01

[root@DB-Server u01]# mkdir mysqldata

 

4:移动MySQL数据目录到新位置

[root@DB-Server ~]# mv /var/lib/mysql /u01/mysqldata/

 

5修改配置文件my.cnf

并不是所有版本都包含有my.cnf这个配置文件,在MySQL 5.5版本,我就找不到my.cnf这个配置文件, 而有些MySQL版本该文件位于/usr/my.cnf,如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找 到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf中。命令如下:

clip_image003

[root@DB-Server mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

编辑/etc/my.cnf文件,修改参数socket

                         MySQL 5.5 版本

clip_image004

# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /u01/mysqldata/mysql/mysql.sock
 
# Here follows entries for some specific programs
 
# The MySQL server
[mysqld]
port            = 3306
socket          = /u01/mysqldata/mysql/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

clip_image005

 

6:修改启动脚本/etc/init.d/mysql

将参数datadir修改为datadir=/u01/mysqldata/mysql/

clip_image006

 

7:启动MySQL服务并验证MySQL数据库路径

[root@DB-Server ~]# service mysql start
Starting MySQL..[  OK  ]
[root@DB-Server ~]# mysqladmin -u root -p variables | grep datadir
Enter password: 
| datadir        | /u01/mysqldata/mysql/ 

 

我的疑问:

1: 在修改数据库的存储目录前,/var/lib/mysql/目录下根本没有mysql.sock文件,安装上面配置后,就会生成mysql.sock文件。

关于mysql.sock文件,搜索了一下资料:mysql.sock 是用于socket连接的文件。也就是只有你的守护进程启动起来这个文件才存在。但是你的mysql程序(这个程序是客户端,服务器端是mysqld)可 以选择是否使用mysql.sock文件来连接(因为这个方法只适合在Unix主机上面连接本地的mysqld),对于非本地的任何类型的主机。那么这个文件是否一定需要的呢? 这个需要进一步了解清楚。

 

2:我在网上看有些网友总结的修改MySQL数据路径,有些需要给新建的目录的权限做一些处理,而有些有不用对目录权限进行授权,我没有处理,也没有什么问题。到底要不要对新的数据库目录授权呢?

 

3:我在MySQL_5.6.20这个版本测试时,不修改my.cnf,只修改启动脚本/etc/init.d/mysql,也完全没有啥问题。也没有myssql.sock文件生成。

 

4: 注意如果没有禁用selinux, 修改MySQL的数据路径后启动MySQL服务会遇到一些错误。关于这个的解释是后台服务都需要有对相应目录的对应权限,而 mysql 的默认路径/var/lib/mysql 已经添加了相应的策略,修改路径后由于没有相应的策略,导致后台进程读取文件被selinux阻止,从而出现权限错误。 所以要么关闭Selinux或修改文件安全上下文。

[root@DB-Server mysql]# /etc/init.d/mysql start
 
Starting MySQL....The server quit without updating PID file (/u01/mysqldata/mysql//DB-Server.localdomain.pid).[FAILED]
 
[root@DB-Server mysql]# 
 
[root@DB-Server mysql]# chcon -R -t mysqld_db_t /u01/mysqldata/mysql/
 
[root@DB-Server mysql]# /etc/init.d/mysql start
 
Starting MySQL.[ OK ]
 
[root@DB-Server mysql]# 
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 关系型数据库 MySQL
8.4 【MySQL】文件系统对数据库的影响
8.4 【MySQL】文件系统对数据库的影响
62 0
|
11月前
|
存储 关系型数据库 MySQL
MySQL新建数据库详细说明
MySQL新建数据库详细说明
55 0
|
存储 SQL 数据可视化
[MySQL]数据库的创建、修改与删除
[MySQL]数据库的创建、修改与删除
|
SQL 存储 JavaScript
Mysql在项目中相关使用(简单操作数据库)
Mysql在项目中相关使用(简单操作数据库)
Mysql在项目中相关使用(简单操作数据库)
|
存储 SQL 关系型数据库
【MySQL学习笔记】数据库/数据表的创建、查看、选择与修改
MySQL服务器中的数据库可以有多个,分别存储不同的数据。要想将数据存储到数据库中,首先需要创建一个数据库。创建数据库就是在数据库系统中划分一块存储数据的空间。
|
关系型数据库 MySQL 数据库
|
SQL 关系型数据库 MySQL
Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题
Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题
470 0
Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题
|
SQL 运维 关系型数据库
MySQL设置数据库为只读
默认情况下,我们的 MySQL 实例是可读写的。但有些情况下,我们可以将整个实例设置为只读状态,比如做迁移维护的时候或者将从库设为只读。本篇文章我们来看下 MySQL 设置只读相关知识。
970 0
|
关系型数据库 MySQL 数据库
MySql操作(一):数据库的全部基础详细操作与命令
MySql操作(一):数据库的全部基础详细操作与命令
105 0
MySql操作(一):数据库的全部基础详细操作与命令