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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 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


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
22 3
|
9天前
|
存储 Linux Windows
linux常用目录
/sbin s就是super User的意思,这里存放的是系统管理员使用的系统管理程序。 /home 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一版该目录名是以用户的账号命名的。 /root 该目录为系统管理员,也称为超级权限者的用户主目录。 /lib 系统开机所需要最基本的动态连接共享库,其作用类似于windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 /etc 所有的系统管理所需要的配置文件和子目录。 /usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program fies目录。 /bo
24 2
|
8天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
114 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
8天前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
在项目中,为了解决Redis与Mysql的数据一致性问题,我们采用了多种策略:对于低一致性要求的数据,不做特别处理;时效性数据通过设置缓存过期时间来减少不一致风险;高一致性但时效性要求不高的数据,利用MQ异步同步确保最终一致性;而对一致性和时效性都有高要求的数据,则采用分布式事务(如Seata TCC模式)来保障。
42 14
|
11天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
43 9
|
8天前
|
Linux Python
Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
在 Linux 系统中,了解目录下的文件数量是常见的需求。本文介绍了多种方法,包括使用 `ls` 和 `wc` 命令组合、`find` 命令、`tree` 命令以及编程方式(如 Python)。无论你是新手还是有经验的用户,都能找到适合自己的方法。掌握这些技巧将提高你在 Linux 系统中的操作效率。
21 4
|
8天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
27 3
|
8天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
22 3
|
14天前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
39 2
|
18天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
64 3