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

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

解决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去处理的。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
1
0
1
分享
相关文章
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
193 90
MySQL原理简介—3.生产环境的部署压测
本文介绍了Java系统和数据库在高并发场景下的压测要点: 1. 普通系统在4核8G机器上每秒能处理几百个请求 2. 高并发下数据库建议使用8核16G或更高配置的机器 3. 数据库部署后需进行基准压测,以评估其最大承载能力 4. QPS和TPS的区别及重要性 5. 压测时需关注IOPS、吞吐量、延迟 6. 除了QPS和TPS,还需监控CPU、内存、磁盘IO、网络带宽 7. 影响每秒可处理并发请求数的因素包括线程数、CPU、内存、磁盘IO和网络带宽 8. Sysbench是数据库压测工具,可构造测试数据并模拟高并发场景 9. 在增加线程数量的同时,必须观察机器的性能,确保各硬件负载在合理范围
148 72
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
332 0
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
164 1