这个是在我写部署服务端部署nestjs的过程中发现的问题,避免那一章篇幅太长,我把中间sql升级遇到的问题及解决办法单独写出来了
1、建表
报错了,可以看到是是字符集校验规则的问题,我们看下当前版本的sql支持那些字符集校验规则,可以看到,么有我们这个ai_ci结尾的
对比下mysql版本,本地是8的版本,服务器上是5的版本,5的版本好像会有服务重启自增主键丢失的情况,所以我们直接把服务端的也升级到8吧
这个之前有讲过,不过要把那篇内容里面的数据库版本替换一下,上mysql官网找对应8的版本
2、mysql升级
wget http://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
直接装会报错,因为现有有一个了,所以需要加个参数强制覆盖之前版本,安装完之后我们全局还是使用的mysql5的版本,所以需要做个切换
先看下我们的mysql安装目录
find / -name mysql 2>/dev/null
find / -name mysqladmin 2>/dev/null
find / -name mysqldump 2>/dev/null
没找着。。。。。没错,程序猿就这个吊样,一步一个坑,遇到问题只能走一步看一步,很多时候都没有我们想的那么顺的,遇到服务端命令行问题本来能运行的突然不能运行了可以关闭远程连接重新连试试
3、重装
搞烦了,直接卸载数据库,重装,当然如果是有重要数据的数据库千万不能这么搞,至少做个数据备份,依次运行以下命令:停止服务,禁止服务启动,移除包,清除残留跟配置文件
sudo systemctl stop mysqld
sudo systemctl disable mysqld
sudo yum remove mysql mysql-server
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/mysql
卸载完检查一下
好了,没有了,重装一下mysql80,安装的时候yum命令行报找不到就用dnf命令
sudo dnf install mysql80-community-release-el7-11.noarch.rpm
他告诉我们早就安装了
但是又启动不了,查找mysql目录又是有的,所以是还需要安转mysql服务
sudo dnf install -y mysql-server
安装完成
启动服务,报openSSL的问题,然后一顿操作,最后报libcrypto.so.10的问题,按照下面一通操作
4、数据库openSSL问题解决
报错信息:/lib64/libssl.so.10: version 'libssl.so.10' not found (required by /usr/sbin/mysqld)
1. 确认 libcrypto.so.10
的位置
首先,你需要确认 libcrypto.so.10
文件的确切位置。使用 find
命令搜索整个系统:
find / -name "libcrypto.so.10"
2. 创建符号链接
如果 libcrypto.so.10
存在,但位于非标准路径,你可能需要在标准库路径中创建一个符号链接。例如,如果文件位于 /usr/local/sysak/.sysak_components/tools/dist/install/
,你可以创建一个符号链接到 /usr/lib64/
(或者链接器搜索的其他标准路径):
sudo ln -s /usr/local/sysak/.sysak_components/tools/dist/install/libcrypto.so.10 /usr/lib64/libcrypto.so.10
请根据你的系统实际情况选择合适的目标路径。
3. 更新 LD_LIBRARY_PATH
如果创建了符号链接,或者 libcrypto.so.10
已经位于某个目录下,确保该目录包含在 LD_LIBRARY_PATH
环境变量中:
export LD_LIBRARY_PATH=/usr/local/sysak/.sysak_components/tools/dist/install/:$LD_LIBRARY_PATH
4. 永久设置环境变量
要使环境变量的更改永久生效,可以将上述 export
命令添加到你的 shell 配置文件中,如 .bashrc
或 .profile
:
echo 'export LD_LIBRARY_PATH=/usr/local/sysak/.sysak_components/tools/dist/install/:$LD_LIBRARY_PATH' >> ~/.bashrc
然后,重新加载配置文件:
source ~/.bashrc
5. 重新加载动态链接器的配置
有时候,你可能还需要重新加载动态链接器的配置:
sudo ldconfig
6. 再次尝试运行 MySQL
在完成上述步骤后,再次尝试运行 MySQL 客户端:
复制
/usr/bin/mysql --version
再运行
mysql -V
确定mysql已经正确添加到全局环境变量
没问题,那我们重新启动mysql服务,再次报错,查看报错信息,好吗,新的报错出现
5、清除原有数据库数据
中间一次次重启,一次次看问题,真是一步一个坑,最后一次是init问题:--initialize specified but the data directory has files in it. Aborting.
清除原来的mysql文件夹内数据
sudo rm -rf /var/lib/mysql/*
重新启动
sudo systemctl start mysqld
查看mysql服务状态,可以看到同样的语句也会出现有时候找不到命令的情况
systemctl status mysqld.service
6、搞定
至此,mysql服务从5升级到8并且启动完成,可以继续我们后面的工作了
6、更新
后面连接数据库发现密码不对,才想起来重新安装了然后又没记初始密码,然后找按照之前的命令找初始密码也找不着,无奈,卸载,重装
7、再重装
我按照下面的命令重装
重装完之后再安装mysql服务会一直报找不到路径下的一个repodata/repomd.xml文件,怀疑是镜像地址问题
刚好在找问题过程中看到了一篇阿里云的教程【MySQL】1.在Centos 7上如何卸载/安装/配置MySQL(保姆级教程)
通过对比发现多了个这个文件,我们把这个文件删除掉,再安装sql服务
成功了
前面文章里面还会有些跳过密码,跟设置开机自启动的设置
我们这里已经可以看到密码了,所以重新设置密码即可
如果不是第一个密码可以仔细看看日志,后面可能还会有几个密码,都试试就行了,
后面改密码的流程是之前说过的,这里不再重复