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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
6月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
510 17
|
6月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
159 18
|
6月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
460 11
|
6月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
218 10
|
2月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
420 1
二、Linux文本处理与文件操作核心命令
|
2月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
290 137
|
2月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
677 57
|
5月前
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
502 143
linux命令—tree
|
1月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
402 2
|
2月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
274 0
Linux内存问题排查命令详解