前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL更改数据库数据存储索引--Java学习网

MySQL更改数据库数据存储索引--Java学习网

作者头像
用户1289394
发布2021-07-09 15:19:37
1.5K0
发布2021-07-09 15:19:37
举报
文章被收录于专栏:Java学习网

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

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

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

代码语言:javascript
复制
[root@DB-Server tmp]# mysqladmin -u root -p variables | grep datadir
代码语言:javascript
复制
代码语言:javascript
复制
Enter password:
代码语言:javascript
复制
代码语言:javascript
复制
| datadir | /var/lib/mysql/
代码语言:javascript
复制

2:关闭MySQL服务

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

方式1:

代码语言:javascript
复制
[root@DB-Server ~]# service mysql status
代码语言:javascript
复制
代码语言:javascript
复制
MySQL running (9411)[ OK ]
代码语言:javascript
复制
代码语言:javascript
复制
[root@DB-Server ~]# service mysql stop
代码语言:javascript
复制
代码语言:javascript
复制
Shutting down MySQL..[ OK ]
代码语言:javascript
复制
代码语言:javascript
复制
[root@DB-Server ~]#
代码语言:javascript
复制

方式2:

代码语言:javascript
复制
[root@DB-Server ~]# /etc/rc.d/init.d/mysql status
代码语言:javascript
复制
代码语言:javascript
复制
MySQL running (8900)[ OK ]
代码语言:javascript
复制
代码语言:javascript
复制
[root@DB-Server ~]# /etc/rc.d/init.d/mysql stop
代码语言:javascript
复制
代码语言:javascript
复制
Shutting down MySQL..[ OK ]
代码语言:javascript
复制
代码语言:javascript
复制
[root@DB-Server ~]#
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制

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 版本

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

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

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

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

代码语言:javascript
复制
[root@DB-Server ~]# service mysql start
代码语言:javascript
复制
Starting MySQL..[  OK  ]
代码语言:javascript
复制
[root@DB-Server ~]# mysqladmin -u root -p variables | grep datadir
代码语言:javascript
复制
Enter password:
代码语言:javascript
复制
| 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或修改文件安全上下文。

代码语言:javascript
复制
[root@DB-Server mysql]# /etc/init.d/mysql start
代码语言:javascript
复制
代码语言:javascript
复制
Starting MySQL....The server quit without updating PID file (/u01/mysqldata/mysql//DB-Server.localdomain.pid).[FAILED]
代码语言:javascript
复制
代码语言:javascript
复制
[root@DB-Server mysql]#
代码语言:javascript
复制
代码语言:javascript
复制
[root@DB-Server mysql]# chcon -R -t mysqld_db_t /u01/mysqldata/mysql/
代码语言:javascript
复制
代码语言:javascript
复制
[root@DB-Server mysql]# /etc/init.d/mysql start
代码语言:javascript
复制
代码语言:javascript
复制
Starting MySQL.[ OK ]
代码语言:javascript
复制
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档