1.mysql数据库频繁访问导致连接超时
解决办法一:
- 优化查询:检查并优化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从指定数字开始
8.mysql8内网安装教程
(1)如果报如下错误,直接在对应目录创建mysqld.log文件,并授权777权限
9.MySQL8完全卸载
在不同的操作系统中,完全卸载 MySQL 8 的步骤有所不同,以下分别介绍在 Windows 和 Linux 系统下的详细卸载方法。
Windows 系统
1. 停止 MySQL 服务
- 按下
Win + R
组合键,打开“运行”对话框,输入services.msc
并回车,打开“服务”窗口。 - 在服务列表中找到
MySQL80
(名称可能因安装时的设置而有所不同),右键单击该服务,选择“停止”。
2. 通过控制面板卸载 MySQL
- 打开“控制面板”,选择“程序和功能”(或“卸载程序”)。
- 在程序列表中找到 MySQL 相关的程序,如
MySQL Server 8.0
、MySQL 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 服务器,可以按照以下步骤修改密码:
- 登录 MySQL
打开终端,使用以下命令登录到 MySQL 服务器,将your_username
替换为你的 MySQL 用户名,输入密码后回车登录。
mysql -u your_username -p
- 修改密码
登录成功后,在 MySQL 命令行中执行以下语句来修改密码,将new_password
替换为你要设置的新密码。
ALTER USER 'your_username'@'localhost' IDENTIFIED BY 'new_password';
如果你想修改所有主机都能连接该用户的密码,可以使用 '%'
通配符:
ALTER USER 'your_username'@'%' IDENTIFIED BY 'new_password';
- 刷新权限
修改密码后,执行以下命令刷新权限,使新密码立即生效:
FLUSH PRIVILEGES;
- 退出 MySQL
执行以下命令退出 MySQL 命令行:
EXIT;
情况二:忘记当前密码
如果你忘记了 MySQL 的 root 密码,可以通过以下步骤重置密码:
- 停止 MySQL 服务
使用以下命令停止 MySQL 服务:
sudo systemctl stop mysqld
- 以跳过权限检查模式启动 MySQL
使用以下命令以跳过权限检查的模式启动 MySQL 服务:
sudo mysqld_safe --skip-grant-tables &
- 登录 MySQL
在新的终端窗口中,无需密码直接登录 MySQL:
mysql -u root
- 修改密码
登录成功后,依次执行以下命令来修改 root 用户的密码,将new_password
替换为你要设置的新密码:
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
- 停止并正常启动 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(...)
:将提取的前三位、****
和后四位连接起来,形成隐藏中间四位的手机号。