2、Linux 坏境MySQL数据目录和字符集修改

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Linux 坏境MySQL数据目录和字符集修改

1、查询MySQL数据目录

使用show variables命令查询数据目录


mysql>  show variables like '%datadir%';

+---------------+-----------------+

| Variable_name | Value           |

+---------------+-----------------+

| datadir       | /var/lib/mysql/ |

+---------------+-----------------+

1 row in set (0.00 sec)

可以看出我们的数据目录在/var/lib/mysql/目录下


2、创建MySQL的数据目录

[root@test1 ~]# mkdir -p /data/mysql/data


3、关闭MySQL服务

缺认是否关闭MySQL服务


[root@test1 ~]# systemctl stop mysqld

[root@test1 ~]# systemctl status mysqld


4、复制数据文件

复制数据文件到我们新创建的数据位置,并将原有的目录改名,确保数据库目录修改成功后在删除


[root@test1 ~]# cp -R /var/lib/mysql/* /data/mysql/data/

[root@test1 ~]# mv /var/lib/mysql /var/lib/mysqlback


5、修改数据目录的属主和属组

[root@test1 ~]# chown -R mysql:mysql /data/mysql/


6、修改配置文件

修改配置文件datadir和socket的值


[root@test1 ~]# vi /etc/my.cnf

[root@test1 data]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql/data

socket=/data/mysql/data/mysql.scok

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

微信图片_20230527162448.png

7、重启MySQL登陆数据库查看

[root@test1 data]# systemctl start mysqld

Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

数据库服务启动的时候报错,查看日志,大致如下


[root@test1 data]# cat /var/log/mysqld.log  

2023-03-12T05:47:21.956736Z 0 [ERROR] InnoDB: Operating system error number 13 in a file operation.

2023-03-12T05:47:21.956767Z 0 [ERROR] InnoDB: The error means mysqld does not have the access rights to the directory.

2023-03-12T05:47:21.956781Z 0 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions

2023-03-12T05:47:21.956789Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error

这是因为selinux开启导致的,我们关闭selinux和防火墙


#关闭防火墙

[root@test1 data]# systemctl stop firewalld.service

#开机不启动防火墙

[root@test1 data]# systemctl disable firewalld.service

#查询防火墙状态

[root@test1 data]# systemctl status firewalld.service

#永久关闭SELINUX

[root@test1 data]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#临时关闭SELINUX

[root@test1 data]# setenforce 0

#查看SELINUX状态

[root@test1 data]# getenforce

重新启动MySQL,一切OK

[root@test1 data]# systemctl start mysqld

[root@test1 data]# systemctl status mysqld

#查询MySQL端口

[root@test1 data]# ss -tnl | grep 3306

LISTEN     0      80        [::]:3306                  [::]:*  

登陆MySQL,发现报错

[root@test1 data]# mysql -uroot -p

Enter password:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

解决方法:


方法1:既然找不到/var/lib/mysql/mysql.sock,那我直接做个软连接将/data/mysql/data/mysql.sock直接连接过去就可以了,实测实可以用的。


方法2:修改my.cnf配置文件


[mysql]

socket=/home/mysql/data/mysql.sock

[client]

socket=/data/mysql/data/mysql.scok

微信图片_20230527162454.png

测试,MySQL可以正常登陆


[root@test1 data]# mysql -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.7.39 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


8、修改MySQL字符集

我们可以使用show variables like '%char%'命令查询MySQL的字符集


mysql>  show variables like '%char%';

+--------------------------------------+----------------------------+

| Variable_name                        | Value                      |

+--------------------------------------+----------------------------+

| character_set_client                 | utf8                       |

| character_set_connection             | utf8                       |

| character_set_database               | latin1                     |

| character_set_filesystem             | binary                     |

| character_set_results                | utf8                       |

| character_set_server                 | latin1                     |

| character_set_system                 | utf8                       |

| character_sets_dir                   | /usr/share/mysql/charsets/ |

| validate_password_special_char_count | 1                          |

+--------------------------------------+----------------------------+

9 rows in set (0.00 sec)


生产过程中,大多数系统默认字符集是utf8,所以我们需要对MySQL字符集进行修改,我们修改my.cnf配置文件


[mysqld]

character-set-client-handshake = FALSE

character-set-server = utf8

collation-server = utf8_unicode_ci

init_connect='SET NAMES utf8'

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

修改完成后配置文件如下


[root@test1 data]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql/data

socket=/data/mysql/data/mysql.scok

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

character-set-client-handshake = FALSE

character-set-server = utf8

collation-server = utf8_unicode_ci

init_connect='SET NAMES utf8'

[client]

socket=/data/mysql/data/mysql.scok

default-character-set=utf8

[mysql]

socket=/data/mysql/data/mysql.scok

default-character-set=utf8

我们现在查询MySQL字符集


mysql>  show variables like '%char%';

+--------------------------------------+----------------------------+

| Variable_name                        | Value                      |

+--------------------------------------+----------------------------+

| character_set_client                 | utf8                       |

| character_set_connection             | utf8                       |

| character_set_database               | utf8                       |

| character_set_filesystem             | binary                     |

| character_set_results                | utf8                       |

| character_set_server                 | utf8                       |

| character_set_system                 | utf8                       |

| character_sets_dir                   | /usr/share/mysql/charsets/ |

| validate_password_special_char_count | 1                          |

+--------------------------------------+----------------------------+

9 rows in set (0.00 sec)

9、忽略大小写

生产过程中,有时候数据库的表名为大写,而我们使用小写导致报错,我们修改my.cnf配置文件


[mysqld]

lower_case_table_names = 1

修改完成后配置文件如下

[root@test1 data]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql/data

socket=/data/mysql/data/mysql.scok

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

character-set-client-handshake = FALSE

character-set-server = utf8

collation-server = utf8_unicode_ci

init_connect='SET NAMES utf8'

[client]

socket=/data/mysql/data/mysql.scok

default-character-set=utf8

lower_case_table_names = 1

[mysql]

socket=/data/mysql/data/mysql.scok

default-character-set=utf8


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
Multis
+关注
目录
打赏
0
0
0
0
147
分享
相关文章
|
3天前
|
Linux目录删除指南:彻底解决“Is a directory”错误
在 Linux 系统中遇到 `cannot remove 'xxx': Is a directory` 错误,是因为删除目录时未使用正确参数。解决方法包括:1) 使用 `rmdir` 删除空目录或 `rm -r` 删除非空目录;2) 检查并调整目录权限(如通过 `sudo` 提权);3) 处理特殊场景,例如文件属性异常、特殊字符或进程占用;4) 替代方法如 `find -delete` 或文件系统修复。操作前建议备份数据,并启用防误删功能(如 `alias rm='rm -i'`)。掌握 `rm` 和 `rmdir` 的区别是关键。
14 1
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
231 43
MySQL底层概述—4.InnoDB数据文件
本文介绍了InnoDB表空间文件结构及其组成部分,包括表空间、段、区、页和行。表空间是最高逻辑层,包含多个段;段由若干个区组成,每个区包含64个连续的页,页用于存储多条行记录。文章还详细解析了Page结构,分为通用部分(文件头与文件尾)、数据记录部分和页目录部分。此外,文中探讨了行记录格式,包括四种行格式(Redundant、Compact、Dynamic和Compressed),重点介绍了Compact行记录格式及其溢出机制。最后,文章解释了不同行格式的特点及应用场景,帮助理解InnoDB存储引擎的工作原理。
MySQL底层概述—4.InnoDB数据文件
|
1月前
|
linux中的目录操作函数
本文详细介绍了Linux系统编程中常用的目录操作函数,包括创建目录、删除目录、读取目录内容、遍历目录树以及获取和修改目录属性。这些函数是进行文件系统操作的基础,通过示例代码展示了其具体用法。希望本文能帮助您更好地理解和应用这些目录操作函数,提高系统编程的效率和能力。
124 26
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
35 9
|
24天前
|
Linux文件与目录的日常
目录的切换 一般使用(”pwd“)显示当前所在的目录 比如:当前目录是在home下面的,与用户名相同的文件夹,可以使用(”cd“)命令来切换目录; 进入下载目录(”cd home/a/下载“)这种从给目录开头的一长串路经”叫做绝对路径“; 进入图片目录(”cd .. /图片/“)".."代表当前路径的上级路径,相对于当前的目录而言的”叫做相对路径“,(”.“)代表当前路径; 如果,想快速切换,上一个所在目录可以(”cd - / cd..“); 如果,想快速切换,追原始的目录可以(”cd --“); 查看目录及文件
38 14
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
78 9
MySQL进阶突击系列(09)数据磁盘存储模型 | 一行数据怎么存?
文中详细介绍了MySQL数据库中一行数据在磁盘上的存储机制,包括表空间、段、区、页和行的具体结构,以及如何设计和优化行数据存储以提高性能。
【YashanDB 知识库】MySQL 迁移至崖山 char 类型数据自动补空格问题
问题分类】功能使用 【关键字】char,char(1) 【问题描述】MySQL 迁移至崖山环境,字段类型源端和目标端都为 char(2),但应用存储的数据为'0'、'1',此时崖山查询该表字段时会自动补充空格 【问题原因分析】mysql 有 sql_mode 控制,检查是否启用了 PAD_CHAR_TO_FULL_LENGTH SQL 模式。如果启用了这个模式,MySQL 才会保留 CHAR 类型字段的尾随空格,默认没有启动。 #查看sql_mode mysql> SHOW VARIABLES LIKE 'sql_mode'; 【解决/规避方法】与应用确认存储的数据,正确定义数据
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
166 8
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等