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

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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8.0生产环境二进制标准安装
MySQL8.0生产环境二进制标准安装
|
6月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
501 90
|
6月前
|
SQL 关系型数据库 MySQL
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
|
11月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
NoSQL 关系型数据库 Redis
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
|
11月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
691 0
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL5.7生产环境二进制标准安装
MySQL5.7生产环境二进制标准安装
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
242 1
|
23天前
|
安全 关系型数据库 MySQL
MySQL安全最佳实践:保护你的数据库
本文深入探讨了MySQL数据库的安全防护体系,涵盖认证安全、访问控制、网络安全、数据加密、审计监控、备份恢复、操作系统安全、应急响应等多个方面。通过具体配置示例,为企业提供了一套全面的安全实践方案,帮助强化数据库安全,防止数据泄露和未授权访问,保障企业数据资产安全。

推荐镜像

更多