统计
  • 建站日期:2021-03-10
  • 文章总数:12 篇
  • 评论总数:2 条
  • 分类总数:8 个
  • 最后更新:10月21日
文章 未分类

openEuler离线安装mysql的详细步骤

小小港湾
首页 未分类 正文

本文应用于使用rpm的方式在openEuler系统上离线安装mysql:

一、下载并安装openSSL

1.下载openssl。设备上是有安装openssl的(可以通过命令行whereis openssl,或者openssl version 进行检测),版本是1.1.1,但是在初始化mysql的时候总是提示:

error while loading shared libraries: libssl.so.3: cannot open shared object file: No Such File

翻遍了也搜不到libssl.so.3这个库文件。于是决定重装(升级)openssl。

https://www.openssl.org/source/

先到这个地址,下载最新版的openssl,在服务器的/usr下创建一个openssl文件夹,并且将文件上传到这个文件夹,解压文件

tar -xzf openssl-3.2.0.tar.gz

解压后有一个openssl-3.2.0的文件夹,进入文件夹。

2.分别执行以下命令进行安装,特别是第二条命令耗时非常长,耐心等待。

./config shared zlib --prefix=/usr/local/openssl

make

make install

./config -t

make depend

cd /usr/local

ln -s openssl ssl

3.修改配置文件,执行:

vim /etc/ld.so.conf

在文末加上一行/usr/local/openssl/lib

执行

echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

ldconfig

执行

vim /etc/profile

在打开的配置文件中的末端添加

export OPENSSL=/usr/local/openssl/bin
export PATH=$OPENSSL:$PATH:$HOME/bin

至此,openssl安装完毕。但是!reboot后执行

ldconfig -p | grep libssl.so.3

还是没有任何输出。查了一下在/usr/local/openssl/lib64下有libssl.so.3这个文件。

执行

vim /etc/ld.so.conf

在文末添加一行

/usr/local/openssl/lib64

保存后执行ldconfig,即可。

二、下载并安装mysql

下载地址:

https://dev.mysql.com/downloads/mysql/

最新版的是8.0.35。朋友们,听我一劝,千万不要用8.0.32,踩过大坑想哭,此为后话不展开。


openEuler离线安装mysql的详细步骤
-独行者的笔记
-第1
张图片

下载这个版本的mysql

在服务器的/usr下创建一个mysql目录,把安装包扔上去并解压

tar -xvf mysql-8.0.35-1.el8.x86_64.rpm-bundle.tar

然后依次执行以下命令进行安装

rpm -ivh mysql-community-common-8.0.35-1.el9.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-client-plugins-8.0.35-1.el9.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-8.0.35-1.el9.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-client-8.0.35-1.el9.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-icu-data-files-8.0.35-1.el9.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-server-8.0.35-1.el9.x86_64.rpm --nodeps --force

安装完毕后配置

vim /etc/my.cnf

在这个文件中添加以下内容

# Mysql8 配置文件
# 客户端设置
[client]
socket=/data/mysql-data/mysql.sock

# 主服务器设置
[mysqld]
# 数据目录
datadir=/data/mysql-data
# 服务端套接字位置
socket=/data/mysql-data/mysql.sock
#服务端端口号,默认为 3306
port = 3306

##
[mysqld]
# 默认字符集
character-set-server=utf8mb4
# 默认排序规则
collation-server=utf8mb4_general_ci

##
[mysqld]
# 启用 InnoDB 存储引擎
default-storage-engine=InnoDB
# InnoDB 缓冲池大小,根据服务器内存大小进行调整
innodb_buffer_pool_size=2G
# InnoDB 日志文件大小,根据服务器磁盘空间进行调整
#innodb_log_file_size=512M
innodb_redo_log_capacity=512M

##
[mysqld]
# 慢查询日志,记录执行时间超过 1 秒的 SQL 语句
slow_query_log=1
slow_query_log_file=/data/mysql-logs/slowlog/mysql-slow.log
long_query_time=1
# error日志
log-error=/data/mysql-logs/mysql.log
# 二进制日志binlog
log-bin=/data/mysql-logs/binlog/mysql-bin
## binlog日志保留时间
#expire_logs_days=30
binlog_expire_logs_seconds=30
## 每个二进制日志文件的最大大小为 1G
max_binlog_size= 1024M
## binlog格式
binlog_format=ROW
#binlog缓冲大小 既减少磁盘I/O,满足性能要求;又保证Cache无残留,及时持久化,满足安全要求。
binlog_cache_size = 4m
#为每个session 最大可分配的内存,在事务过程中用来存储二进制日志的缓存。
max_binlog_cache_size = 512m

##
[mysqld]
# 超时时间:MySQL服务器在空闲一段时间后自动关闭连接的时间
## 等待用户输入的时间后自动关闭连接的时间
interactive_timeout=28800000
## 等待客户端发送请求的时间后自动关闭连接的时间
wait_timeout=28800000
# 网络超时:MySQL服务器在读取和写入数据时所等待的时间
net_read_timeout=3600
net_write_timeout=3600

##
[mysqld]
# 最大连接数,根据服务器负载进行调整
max_connections=500
# 最大并发连接数,根据服务器负载进行调整
max_user_connections=100

# 临时表大小限制,根据应用需要进行调整
tmp_table_size=512M
max_heap_table_size=512M
# MySQL的缓存参数
## 定义MySQL服务器在内存中打开表的数量 根据实际情况调整
table_open_cache=500
## 定义MySQL服务器缓存表定义的数量 根据实际情况调整
table_definition_cache=500
# 优化网络设置
skip_name_resolve=1
# 表名大小写不敏感
lower_case_table_names=1
# 最大上传大小
max_allowed_packet=1024M
# 最大打开文件数
open_files_limit=65535

##
[mysqld]
# 主从复制设置
## 服务器标识
server_id=1
## 不需要同步得表
replicate-ignore-db=information_schema,mysql,performance_schema

以上是网上找到的,仅供参考。我自己的设置是这样的:

[mysqld]

#这里有很多东西,都是打了井号的,都是注释,不必理会

datadir=/data/mysql-data
socket=/data/mysql-data/mysql.sock

log-error=/data/mysql-logs/mysqld.log
#pid-file=/var/run/mysqld/mysqld.pid
lower_case_table_names=1
default_authentication_plugin=mysql_native_password
max_allowed_packet=64M
max_connections=1000

创建mysql的数据目录

mkdir -p /data/{mysql-data,mysql-logs}
mkdir -p /data/mysql-logs/{slowlog,binlog}

运行命令

mysqld --initialize --user=mysql 芜湖,不行,提示

mysqld: /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.29' not found (required by mysqld) mysqld: /usr/lib64/libstdc++.so.6: versionCXXABI_1.3.13' not found (required by mysqld) mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/lib64/mysql/private/libprotobuf-lite.so.3.19.4)

这是由于8.0.35版本的原因,需要更高版本的libstdc++.so.6支持。

通过执行

ls /usr/lib64/libstdc++.so.*

可知本机版本是6.0.28

执行

strings /usr/lib64/libstdc++.so.6 |grep GLIBC

可看出最大版本号是GLIBCXX_3.4.28,而我们报错的提示是找不到3.4.29的,高了一个版本,所以要下载更高版本的,文件从网上收集好并上传:

https://download.csdn.net/download/tizi666666/88622750

下载完成后,把它上传到/usr/lib64/目录下,然后执行以下命令:

#切换到工作目录
cd  /usr/lib64/
#把原有的备份一下
mv ./libstdc++.so.6 ./libstdc++.so.6_bak  
#重新建立软连接
sudo ln -s libstdc++.so.6.0.29 libstdc++.so.6
#查看
ls -l libstdc++.so.6

库文件重新进行软连接后可以查看到已经有了最新的GLIBCXX_3.4.29了

再次执行

mysqld --initialize --user=mysql

成功,没有异常提示

接着就开始运行了,执行一下代码

systemctl start mysqld

芜湖,又来报错了~报了好多的错误,这些错误都可以在/data/mysql-logs/mysqld.log中查看,逐条过逐条排故,警告类的可以不用管了解一下就好。

总结一下主要的错误有:

①提示某个文件夹没有权限,这个就很简单了,chmod命令,直接给个777!提示哪个路径有问题就盘它:1.检查一下目录/路径/文件是否存在,不存在就创建它;2.直接给它个777的权限,文件夹也给,文件也给,全都给给给!

②另一个折腾了我很久的问题,报告了一个这样的错误:

2023-12-12T13:48:03.188102Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.

思前想后,一整个下午配了那么多东西,data文件里面乱七八糟的(主要是my.cnf修改了好几次),干脆删掉先前配置的/data下的mysql-data这个目录!然后重新再来一次mysqld --initialize --user=mysql进行初始化,初始化后再启动,好了!没报错误了!说明mysql已经顺利跑起来,尝试mysql -u root -p登录一下。如果配置是正确的话,此时应提示密码错误问题,如果配置不正确,就会提示其他别的原因。

接下来就是配置账号密码了。网上有很多的mysql的获取密码的说法,说是会在log文件中有记录一个随机码,可是我一直都找不到。

于是尝试绕开密码验证环节:

1.reboot重启了一下服务器

2.执行

vim /etc/my.cnf

再一次进入到配置

在最后一行添加一句:

skip-grant-tables

然后保存退出

3.重启一下mysql服务

systemctl restart mysqld

执行完之后,直接输入mysql,什么都不用带,直接能进去了,这时候就可以“为所欲为”了!

首先是要修改root的密码。

如果直接输入

ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';

是不行的,会提示说

The MySQL server is running with the --skip-grant-tables option so it cannot

这时候可以尝试

①退出数据库再进入数据

②然后执行

flush privileges;

刷新权限表

③再一次执行上述提到的修改密码命令。

PS:网上有些人用

ALTER USER 'root'@'local' IDENTIFIED BY '密码';

我试过不行,得用localhost才行,库里的访问地址host设置的是“localhost”

④再退出数据库,把原本添加上去的skip-grant-tables注释掉(切记,一定要注释掉,否则端口号会为0,无论怎么配置,这样的后果就是,远程无法登录)

⑤测试一下新设置的账号密码是否能够正常登录。

致此,整个sql的安装工作就完成了!大功告成,掌声!~~~

补充:

由于在整个安装的过程中出了很多问题,所以一直在频繁地看日志。发现日志中有一个问题,就是日志的时间是不对的,相差了8个小时,所以配置成功mysql后第一件事就是执行

SELECT @@global.time_zone AS '全局时区', @@session.time_zone AS '会话时区';

额,一切正常,是跟随system的。

执行select now();

显示的也是正常的时间。

退出系统,查看系统时间

timedatectl status

也是正常的。后来查过才知道,有个参数log_timestamps是用来配置日志的时间的,默认是UTC,所以时间打印会有问题。于是到etc/my.cnf去配置一下log_timestamps=system

让日志时间跟随系统就好了,接着重启数据库,再打开日志看,日志变了:


openEuler离线安装mysql的详细步骤
-独行者的笔记
-第2
张图片

原本的Z变成了+8,这样时间就对得上了~虽然对数据库的运行影响不大,但是出了问题的时候看着日志也好判别。

20231213补充:

今天服务器的DNS有点问题,工程师帮我重新配置之后重启了一下,居然发现,mysql启动失败了。查日志显示,找不到GLIBCXX_3.4.29????奇怪了我昨天都更新了libstdc++.so.6的版本了啊!一怒之下,不使用软连接了,直接把/usr/lib64/下面的libstdc++.so.6删掉,然后吧下载好的libstdc++.so.6.0.29改名为libstdc++.so.6。然后运行正常。百思不得其解,到处翻也找不出原因。关键是,我配置完数据库也不是第一次重启了的,为什么之前的时候都不会,这次重启就会导致软连接失效了呢~~~

20231214补充:

这两天一直发现一个问题,每天第一次远程连接数据,或者是,吃了个饭回来再读数据库,只是一个简单的select语句,表里只有一条记录,大概需要7-15秒的时间,系统显示获取时间是1ms。再之后再读写就不存在问题了。网上搜了一下问题,有一个解决方法,先试试再说吧:

在数据库里执行

show variables like 'innodb_buffer_pool_size';

显示数值是134217728。

134217728/1024/1024=128M,这个缓存有点小。网上建议设置成内存的50%-75%这样子。

所以我直接干个24G吧!

24G*1024*1024*1024=25769803776

所以执行

set global innodb_buffer_pool_size =25769803776

再重启数据库?那不行,重启之后就失效了的、、、、所以修改my.cnf文件才是硬道理。

vim /etc/my.cnf

在最后一行加上

innodb_buffer_pool_size =25769803776

#懒得计算也可以使用innodb_buffer_pool_size =24G

再看看效果咋样吧哈!~

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

Linux 600条最强命令
« 上一篇
openEuler离线安装docker
下一篇 »
为了防止灌水评论,登录后即可评论!

HI ! 请登录
注册会员,享受下载全站资源特权。

最新评论

帅哥管理员
8个月前 (2024-03-14)

CentOS8离线安装docker

热门文章

1
免费域名申请
2
Mac Node管理
3
CentOS8离线安装docker
4
cpolar端口映射