MySQL数据库使用笔记

1.mysql数据库频繁访问导致连接超时

参考:druid配置 hive druid配置详解

解决办法一:

  • 优化查询:检查并优化SQL查询语句,减少不必要的数据库调用。
  • 增加连接池大小:如果应用程序使用连接池,可以考虑增加连接池的最大连接数。(注:不能大于数据的最大连接数)
  • 使用索引:确保查询中涉及的字段都有适当的索引,以减少查询时间。
  • 服务器配置:调整MySQL服务器的配置参数,如wait_timeout和interactive_timeout,以使得连接可以保持更长时间。
  • 限流:实施限流措施,如使用防火墙规则、应用层限流或者数据库层的流量控制,以防止过载。
  • 分库分表:如果并发量确实很大,考虑分库分表,把流量分散到多个数据库实例上。
  • 监控和日志:定期监控数据库性能指标,分析日志文件,找出高负载的原因并解决。
  • 在实施任何解决方案之前,请确保充分理解当前数据库负载和查询模式,以及任何更改的后果,以避免不必要的系统问题。

解决办法二:如果使用宝塔

在这里插入图片描述

2.MySQL innodb_buffer_pool_size用法

https://developer.baidu.com/article/details/3279137

3.Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

The last packet successfully received from the server was 120,101 milliseconds ago. The last packet sent successfully to the server was 120,101 milliseconds ago.

处理办法:

(1)查询:show global variables like “%timeout%”;
在这里插入图片描述
(2)解决办法
【异常】The last packet successfully received from the server was 179 milliseconds ago.
mysql net_write timeout 详解

4.MySQL数据被锁了快速,直接解决办法

强制重启数据库(注:该操作必须谨慎,重启数据库时间段内,所有业务将不能操作)

5.mysql case when 用法

(1)与sum结合使用

SELECT
	SUM( num ),
	SUM( CASE WHEN u.`status` = 0 THEN num END ) zeroCount,
	SUM( CASE WHEN u.`status` = 1 THEN num END ) oneCount,
	SUM( CASE WHEN u.`status` = 9 THEN num END ) twoCount 
FROM
	t_verification u;

(2)与count结合使用

SELECT
	COUNT(1),
	COUNT( CASE WHEN u.`status` = 0 THEN '' END ) zeroCount,
	COUNT( CASE WHEN u.`status` = 1 THEN '' END ) oneCount,
	COUNT( CASE WHEN u.`status` = 9 THEN '' END ) twoCount 
FROM
	t_verification u;

6.日期相减获取天数

SELECT DATEDIFF(date1, date2) AS days_diff FROM your_table;

7.mysql数据库 自增id从指定数字开始

https://blog.youkuaiyun.com/qq_38373150/article/details/139564566?fromshare=blogdetail&sharetype=blogdetail&sharerId=139564566&sharerefer=PC&sharesource=qq_30272167&sharefrom=from_link

8.mysql8内网安装教程

https://blog.youkuaiyun.com/m0_53563073/article/details/136370455?fromshare=blogdetail&sharetype=blogdetail&sharerId=136370455&sharerefer=PC&sharesource=qq_30272167&sharefrom=from_link

(1)如果报如下错误,直接在对应目录创建mysqld.log文件,并授权777权限

在这里插入图片描述

9.MySQL8完全卸载

在不同的操作系统中,完全卸载 MySQL 8 的步骤有所不同,以下分别介绍在 Windows 和 Linux 系统下的详细卸载方法。

Windows 系统

1. 停止 MySQL 服务
  • 按下 Win + R 组合键,打开“运行”对话框,输入 services.msc 并回车,打开“服务”窗口。
  • 在服务列表中找到 MySQL80(名称可能因安装时的设置而有所不同),右键单击该服务,选择“停止”。
2. 通过控制面板卸载 MySQL
  • 打开“控制面板”,选择“程序和功能”(或“卸载程序”)。
  • 在程序列表中找到 MySQL 相关的程序,如 MySQL Server 8.0MySQL Workbench 等,依次右键单击并选择“卸载”,按照卸载向导的提示完成卸载操作。
3. 删除 MySQL 安装目录
  • 找到 MySQL 的安装目录(默认路径可能是 C:\Program Files\MySQL),将该目录及其子目录全部删除。
4. 删除 MySQL 数据目录
  • 默认的数据目录位于 C:\ProgramData\MySQL,这是一个隐藏目录。要显示隐藏文件和文件夹,可在“文件资源管理器”中,点击“查看”选项卡,勾选“隐藏的项目”。
  • 找到并删除 MySQL 文件夹及其子目录。
5. 删除注册表信息
  • 按下 Win + R 组合键,输入 regedit 并回车,打开“注册表编辑器”。
  • 在注册表中找到以下几个位置,并删除相关的 MySQL 项:
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL
    • HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB
    • HKEY_CURRENT_USER\Software\MySQL AB

Linux 系统(以 Ubuntu 为例)

1. 停止 MySQL 服务

首先,要确保 MySQL 服务处于停止状态。打开终端,执行以下命令:

sudo systemctl stop mysqld

2. 禁用 MySQL 服务自启

为了防止 MySQL 在系统重启时自动启动,需要禁用其自启功能,执行以下命令:

sudo systemctl disable mysqld

3. 卸载 MySQL 软件包

使用 yum 包管理器来卸载 MySQL 相关的软件包。执行以下命令查看已安装的 MySQL 软件包:

yum list installed | grep mysql

根据输出结果,使用以下命令卸载这些软件包:

sudo yum remove mysql-community-server mysql-community-client mysql-community-common mysql-community-libs

你也可以使用通配符一次性卸载所有相关软件包:

sudo yum remove mysql-community-*

4. 清理残留文件和目录

删除 MySQL 数据目录

MySQL 的数据目录通常位于 /var/lib/mysql,使用以下命令删除该目录及其内容:

sudo rm -rf /var/lib/mysql
删除 MySQL 配置文件

MySQL 的配置文件一般存放在 /etc/my.cnf/etc/my.cnf.d 目录下,使用以下命令删除相关配置文件:

sudo rm -rf /etc/my.cnf /etc/my.cnf.d

5. 删除 MySQL 用户和用户组

MySQL 在安装时会创建对应的用户和用户组,使用以下命令删除:

sudo userdel -r mysql
sudo groupdel mysql

查找并删除其他残留文件:

sudo find / -name "mysql*" -exec rm -rf {} \;

6. 清理 yum 缓存

执行以下命令清理 yum 的缓存信息:

sudo yum clean all

7. 验证卸载结果

执行以下命令验证 MySQL 是否已彻底卸载:

mysql --version

如果输出显示“命令未找到”之类的提示,说明 MySQL 已成功卸载。

注意事项

  • 在执行删除操作时要格外小心,尤其是使用 rm -rf 命令,因为该命令会递归删除指定目录及其所有内容,一旦执行错误可能会导致数据丢失。
  • 如果你使用的是 MySQL 的其他版本或者安装方式不同,可能需要根据实际情况调整上述步骤。

验证卸载结果

  • Windows 系统:再次打开“服务”窗口,检查是否还有 MySQL 相关服务;同时,查看注册表中是否还有 MySQL 相关项。
  • Linux 系统:在终端中执行 mysql --version 命令,如果显示“命令未找到”,则表示 MySQL 已成功卸载。

10.修改密码

在 CentOS 系统中修改 MySQL 8 的密码,根据不同的情况有不同的修改方式,下面为你详细介绍:

情况一:知道当前密码,可正常登录 MySQL

如果你知道当前 MySQL 用户的密码,并且能够正常登录到 MySQL 服务器,可以按照以下步骤修改密码:

  1. 登录 MySQL
    打开终端,使用以下命令登录到 MySQL 服务器,将 your_username 替换为你的 MySQL 用户名,输入密码后回车登录。
mysql -u your_username -p
  1. 修改密码
    登录成功后,在 MySQL 命令行中执行以下语句来修改密码,将 new_password 替换为你要设置的新密码。
ALTER USER 'your_username'@'localhost' IDENTIFIED BY 'new_password';

如果你想修改所有主机都能连接该用户的密码,可以使用 '%' 通配符:

ALTER USER 'your_username'@'%' IDENTIFIED BY 'new_password';
  1. 刷新权限
    修改密码后,执行以下命令刷新权限,使新密码立即生效:
FLUSH PRIVILEGES;
  1. 退出 MySQL
    执行以下命令退出 MySQL 命令行:
EXIT;

情况二:忘记当前密码

如果你忘记了 MySQL 的 root 密码,可以通过以下步骤重置密码:

  1. 停止 MySQL 服务
    使用以下命令停止 MySQL 服务:
sudo systemctl stop mysqld
  1. 以跳过权限检查模式启动 MySQL
    使用以下命令以跳过权限检查的模式启动 MySQL 服务:
sudo mysqld_safe --skip-grant-tables &
  1. 登录 MySQL
    在新的终端窗口中,无需密码直接登录 MySQL:
mysql -u root
  1. 修改密码
    登录成功后,依次执行以下命令来修改 root 用户的密码,将 new_password 替换为你要设置的新密码:
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
  1. 停止并正常启动 MySQL 服务
    首先停止当前以跳过权限检查模式运行的 MySQL 服务,可以使用 ps -ef | grep mysqld 找到对应的进程 ID,然后使用 sudo kill -9 进程 ID 命令停止该进程。
    接着使用以下命令正常启动 MySQL 服务:
sudo systemctl start mysqld

之后你就可以使用新设置的密码登录 MySQL 了。

注意事项

  • 新密码应具有一定的复杂性,包含字母、数字和特殊字符,以提高安全性。
  • 如果你使用的是 MySQL 8 以上版本,密码的加密方式与之前版本有所不同,使用上述 ALTER USER 语句可确保密码以正确的方式加密存储。

11.MySQL查询隐藏手机号中间四位数

(1)方式一:使用 INSERT() 函数

INSERT() 函数的作用是将字符串中的一部分用另一个字符串替换,该函数的语法为 INSERT(str, pos, len, newstr),其中 str 是原字符串,pos 是开始替换的位置,len 是要替换的字符长度,newstr 是用来替换的新字符串。

SELECT 
    INSERT(phone, 4, 4, '****') AS hidden_phone
FROM 
    users;

(2)方式二:使用 CONCAT() 函数和 SUBSTRING() 函数

CONCAT() 函数用于连接多个字符串,SUBSTRING() 函数用于提取字符串的一部分

SELECT 
    CONCAT(SUBSTRING(phone, 1, 3), '****', SUBSTRING(phone, 8)) AS hidden_phone
FROM 
    users;
代码解释
  • SUBSTRING(phone, 1, 3):从 phone 字段的第 1 个字符开始,提取 3 个字符,即手机号的前三位。
  • SUBSTRING(phone, 8):从 phone 字段的第 8 个字符开始,提取剩余的所有字符,即手机号的后四位。
  • CONCAT(...):将提取的前三位、**** 和后四位连接起来,形成隐藏中间四位的手机号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值