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

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 ~]# 
 

 

方式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中。命令如下:

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

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

                         MySQL 5.5 版本

# 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

 

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

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

 

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]# 
时间: 2024-09-20 00:32:06

MySQL更改数据库数据存储目录的相关文章

Uber是如何使用MySQL设计可扩展性数据存储的?

在Mezzanine项目中我们描述了我们是如何将Uber的核心行程数据从单个的Postgres节点迁移到Schemaless,这是我们开发的一个容错性很高.可用的数据存储. 根据Uber工程师的习惯使用MySQL设计的数据存储,使我们可以从2014 扩容到更高.本文分成三部分对Schemaless进行阐述. 一.Schemaless的总体设计   这一部分我们将讲述Schemaless的架构它在Uber基础结构中的角色以及他是如何成为该角色的. 1.我们对新数据库的迫切需求 2014年初,由于出

qt-QSqlRecordSet 的setValue函数在执行后不能更改数据库数据

问题描述 QSqlRecordSet 的setValue函数在执行后不能更改数据库数据 void AddDialog::itemChanged(QTableWidgetItem current,QTableWidgetItem previous){ if(previous != NULL){ int index = previous->row(); int column =previous->column(); QSqlQuery query(db); QString sqlStr = &qu

mysql数据存储目录迁移小记

背景: 因刚开始安装mysql的时候没有考虑后期磁盘分区空间问题,所以mysql的数据保存目录就按安装默认的目录/usr/local/mysql/(我下载的是一个lamp一键安装包安装的mysql),现在随着服务的运行发现/usr/local/mysql所在分区空间使用快接近100%了,怎么办?不想重装mysql,我服务器大部分空间mount在/app下了,于想想到了linux下的ln -s命令 OK 下面开操作了(注:以下操作均在零晨1点操作,记住先将数据备份成sql文件): 1. servi

MySQL对数据库数据进行复制的基本过程详解_Mysql

复制      复制是从一个MySQL服务器(master)将数据拷贝到另外一台或多台MySQL服务器(slaves)的过程.复制是异步进行的--slaves服务器不需要持续地保持连接来接收master的数据.依据配置的不同,可以复制所有数据库,或指定的数据库,甚至是某一数据库指定的表.      使用复制功能的目的在于: 向外扩展的解决方案 -- 通过在多台服务器之间分散负载来提高性能.在这种环境下,所有写和更新操作都在master服务器上进行,而读操作则发生在一台或多台slaves服务器上.

ubuntu mysql更改tmp路径的方法_Linux

因为mysql经常要把文件定入tmp目录,而tmp的目录为/tmp,为了提高性能,所以考虑更改tmpdir目录为/run/shm,即使用内存来存储. 1.打开/etc/mysql/my.cnf 更改tmpdir = /tmp为 tmpdir = /run/shm 2.更改/etc/apparmor.d/usr.sbin.mysqld添加: /run/shm/* rw, 3.重启mysql和apparmor /etc/init.d/apparmor restart /etc/init.d/mysq

大话无线客户端安全之数据存储安全——Android篇

1 前言        随着无线客户端的火热发展,大家往往将所关注的重点放到了业务本身上,而忽视了安全问题.但是随着近年来各种层出不穷的与客户端相关的攻击事件以及安全漏洞的曝出,客户端安全已经不容忽视,忽视了安全必将会受到安全的惩罚.        而在各种安全之中数据安全更是重中之重,毫不夸张的说数据安全可以说是无线客户端安全的灵魂.用户的重要数据一旦损失掉,将会对应用乃至企业造成巨大的负面影响.例如去年发生的CSDN的用户名密码泄露事件:和无线客户端相关的有Skype Android版的用户

mysql-MySQL嵌套表头数据存储问题

问题描述 MySQL嵌套表头数据存储问题 如图所示,这样的表格在MySQL数据库中应该如何建立表 解决方案 直接把基本信息四个字无视,一共8个字段,即可. 解决方案二: 建立两张表,第一章表,序号,姓名,职务,主要任务,所属,另外一张表:序号,姓名,性别,民族,年龄,第一章表主键:序号,姓名,外键:序号,第二张表的主键:序号 解决方案三: 这个直接存储一张表就好了啊,基本信息不做为表字段, 这是个展示的问题,不是数据库设计的问题.

CentOS更改MySQL存储目录位置实例教程

mysql默认的数据文件存储目录为/var/lib/mysql 假如要把目录移到/home/mysqldata下需要进行下面几步: 1.home目录下建立mysqldata目录  代码如下 复制代码 cd /home mkdir mysqldata 2.停止mysql进程  代码如下 复制代码 mysql -u root -p shutdown 3.把/var/lib/mysql整个目录移到/home/mysqldata  代码如下 复制代码 mv /var/lib/mysql /home/my

如何更改MySQL数据库的默认目录位置

MySQL默认的数据文件存储目录为/var/lib/mysql.假如要把MySQL目录移到/home/data下需要进行下面几步: 1.home目录下建立data目录 cd /home mkdir data 2.把MySQL服务进程停掉: mysqladmin -u root -p shutdown 3.把/var/lib/mysql整个目录移到/home/data mv /var/lib/mysql /home/data/ 这样就把MySQL的数据文件移动到了/home/data/mysql下