生产环境踩坑记(一)---Mysql8.0 & Nginx

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 最近某项目第一个版本进入了生产环境部署阶段,在这次生产环境部署的过程中遇到了大家都会经常踩的坑,下面通过后端部署、前端部署两个方面跟大家分享一下,希望对大家有帮助!

解决Mysql 8.0大小写敏感配置问题

问题描述

Mysql数据库是我们自己部署的,默认是区分大小写,由于这个问题后端代码运行时报错,我们第一反应是修改lower_case_table_names = 1来设置不区分大小写,然后重启mysql,但是这个操作并没有生效,经过排查才知道是mysql版本的问题,那应该如何解决呢?

解决方案

通过查看资料发现,mysql8.0安装初始化之后是不能更改lower_case_table_names的,官方文档的原话:

In MySQL 8.0, the lower_case_table_names variable can only be configured when the MySQL server is initialized.

那只能在Mysql安装的时候初始化这个参数配置,像我们这种情况,就只能重新初始化数据库,步骤如下:

(1)在初始化之前,必须将数据库备份,备份,备份!!!

mysqldump --all-databases -h127.0.0.1 -uroot -ppass > allbackupfile.sql

(2)删除数据目录datadir=/usr/local/mysql/data

rm -rf /usr/local/mysql/data

(3)在配置文件中[mysqld]下添加lower_case_table_names = 1

vim /etc/my.cnf

[mysqld]

lower_case_table_names = 1

(4)执行初始化命令

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lower-case-table-names=1

(5)查看配置信息

show global variables like '%lower_case%'



解决Mysql账号问题导致无法连接的问题

问题描述

后端服务启动时报了本地IP无法连接数据,报错信息如下:

经过排查发现网络是通的,那就往账号方面去排查,执行select host,user from mysql.user;查看账号信息,结果如下:

发现fxcity的host是localhost,由于后端服务与mysql服务不在同一台机器,因此导致mysql连接失败。

解决方案

修改mysql账号的配置信息,步骤如下:

(1)修改fxcity账号的host信息

create user fxcity@'%' identified by 'password';

(2)修改fxcity账号的权限信息

grant all privileges on fx_city2.* to fxcity@'%' with grant option;

(3)重新加载权限表

flush privileges;

(4)查看账号信息

select host,user from mysql.user;

解决docker镜像查看所有挂载路径问题

问题描述

前端使用nginx的docker镜像部署,1期部署文档没有明确nginx镜像的挂载路径,这个时候部署的同学可以如何查看该镜像的所有挂在路径呢?

解决方案

可以通过docker inspect nginx | grep Mounts -A 20 命令查看所有挂载信息:

"Mounts": [

{

"Type": "bind",

"Source": "/etc/nginx",

"Destination": "/etc/nginx",

"Mode": "ro",

"RW": false,

"Propagation": "rprivate"

},

{

"Type": "bind",

"Source": "/var/www",

"Destination": "/usr/share/nginx/html",

"Mode": "ro",

"RW": false,

"Propagation": "rprivate"

}

以上信息可以清楚看到Source(宿主)和Destination(镜像)的挂在路径。

解决nginx报错:failed (13: Permission denied)

问题描述

每次替换前端dist包之后,重启nginx,浏览器访问都会报500错误,查看nginx日志(docker logs -f --tail=10 nginx)报错failed (13: Permission denied),经过排查是文件修改权限问题。

解决方案

使用以下命令给挂载目录添加权限:chmod -R 777 /var/www

给各位同学建议,当nginx报错的时候,不要瞎猜原因,赶紧去看日志,看日志,看日志。

总结

1、部署文档一定要写详细,包括每一步操作,细至堡垒机访问方式、生产环境所有资源的汇总、每一步部署操作、每一个遇到的问题等等,因为项目时间隔太久,下一位接手的人有可能因为堡垒机访问的问题也会耗费一天时间。

2、生产环境部署,遇到报错马上看日志,浪费时间瞎猜还不如根据日志信息去分析。

3、生产环境有客户提供的数据库尽量使用,研发人员自己安装可能会遇到很多坑,特别是新版本的数据库。

4、在对数据库做任何操作之前,都要记得提前备份,记住备份是不用花钱的,不备份把数据搞没了就麻烦了。

5、现场部署人员在部署过程中遇到问题不要慌,在项目紧急的时候越慌张越容易犯错,就算最终部署失败,也要相信TM和PD会有Plan B去处理的。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
47 1
|
2月前
|
NoSQL 关系型数据库 应用服务中间件
jdk1.8、mysql、redis、nginx centos云服务器安装配置
jdk1.8、mysql、redis、nginx centos云服务器安装配置
|
3月前
|
Java 关系型数据库 Docker
docker打包部署spring boot应用(mysql+jar+Nginx)
docker打包部署spring boot应用(mysql+jar+Nginx)
|
2月前
|
关系型数据库 应用服务中间件 nginx
docker基础,docker安装mysql,docker安装Nginx,docker安装mq,docker基础命令
docker基础,docker安装mysql,docker安装Nginx,docker安装mq,docker基础命令
|
3月前
|
关系型数据库 MySQL 应用服务中间件
centos7在线安装jdk1.8+tomcat+mysql8+nginx+docker
现在,你已经成功在CentOS 7上安装了JDK 1.8、Tomcat、MySQL 8、Nginx和Docker。你可以根据需要配置和使用这些服务。请注意,安装和配置这些服务的详细设置取决于你的具体需求。
351 2
|
3月前
|
消息中间件 Java 关系型数据库
JAVA云HIS医院管理系统源码、基于Angular+Nginx+ Java+Spring,SpringBoot+ MySQL + MyCat
JAVA云HIS医院管理系统 常规模版包括门诊管理、住院管理、药房管理、药库管理、院长查询、电子处方、物资管理、媒体管理等,为医院管理提供更有力的保障。 HIS系统以财务信息、病人信息和物资信息为主线,通过对信息的收集、存储、传递、统计、分析、综合查询、报表输出和信息共享,及时为医院领导及各部门管理人员提供全面、准确的各种数据。
87 1
|
8天前
|
负载均衡 应用服务中间件 API
Nginx:location配置模块的用法(一)
Nginx:location配置模块的用法(一)
53 2
|
1天前
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)