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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
16天前
|
关系型数据库 MySQL Unix
linux优化空间&完全卸载mysql——centos7.9
linux优化空间&完全卸载mysql——centos7.9
52 7
|
19天前
|
监控 关系型数据库 MySQL
Linux MySQL相关启动命令
【4月更文挑战第22天】
|
23天前
|
数据可视化 关系型数据库 MySQL
MySQL的安装(Linux版)
MySQL的安装(Linux版)
45 1
|
21小时前
|
关系型数据库 MySQL Linux
服务器Linux系统配置mysql数据库主从自动备份
这是一个基本的配置主从复制和设置自动备份的指南。具体的配置细节和命令可能因您的环境和需求而有所不同,因此建议在操作前详细阅读MySQL文档和相关资源,并谨慎操作以避免数据丢失或不一致。
8 3
|
6天前
|
关系型数据库 MySQL Linux
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
|
13天前
|
存储 关系型数据库 MySQL
linux安装MySQL8.0,密码修改权限配置等常规操作详解
linux安装MySQL8.0,密码修改权限配置等常规操作详解
|
16天前
|
监控 关系型数据库 MySQL
|
17天前
|
关系型数据库 MySQL Java
Linux 安装 JDK、MySQL、Tomcat(图文并茂)
Linux 安装 JDK、MySQL、Tomcat(图文并茂)
32 2
|
18天前
|
关系型数据库 MySQL Linux
【Linux】安装Mysql(附加service mysql启动失败 提示unit not found 解决办法)
【Linux】安装Mysql(附加service mysql启动失败 提示unit not found 解决办法)
70 0
|
25天前
|
人工智能 关系型数据库 MySQL
Linux | MySQL安装Workbench图形化
Linux | MySQL安装Workbench图形化