DukeDuke
主页
文档转换
关于我们
主页
文档转换
关于我们
  • Redis

    • Redis简介
    • Redis(单机)安装
    • Redis配置
    • Redis数据结构
    • RDB、AOF 和混合持久化机制
    • Redis内存管理
    • Redis缓存一致性
    • Redis缓存穿透
    • Redis缓存击穿
    • Redis缓存雪崩
    • Redis Lua脚本
    • Redis主从复制
    • Redis哨兵模式
    • Redis集群
    • Redis数据分片
    • Redis CPU使用率过高
    • Redis面试题
  • MySQL

    • MySQL简介
    • MySQL安装
    • MySQL配置
    • MYSQL日常维护
    • MYSQL优化-慢查询
    • MYSQL优化-索引
    • MYSQL数据库设计规范

MySQL 日常维护

用户管理

查看所有用户

-- 查看所有用户及其主机信息
SELECT User, Host FROM mysql.user;

-- 查看用户详细信息
SELECT User, Host, authentication_string FROM mysql.user;

-- 查看用户权限信息
SELECT User, Host, Select_priv, Insert_priv, Update_priv, Delete_priv
FROM mysql.user;

-- 查看特定主机的用户
SELECT User, Host FROM mysql.user WHERE Host = 'localhost';

-- 查看远程用户
SELECT User, Host FROM mysql.user WHERE Host != 'localhost';

-- 查看用户创建时间(MySQL 5.7+)
SELECT User, Host, Create_time FROM mysql.user;

-- 查看用户最后修改密码时间
SELECT User, Host, password_last_changed FROM mysql.user;

创建用户

-- 创建用户并设置密码
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

-- 示例:创建本地用户
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'password123';

-- 示例:创建远程用户
CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'password123';

删除用户

-- 删除用户
DROP USER 'username'@'host';

-- 示例
DROP USER 'testuser'@'localhost';

修改用户密码

-- 修改用户密码
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';

-- 示例
ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'newpassword123';

权限管理

授予权限

-- 授予所有权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';

-- 授予特定权限
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'username'@'host';

-- 授予所有数据库的所有权限(超级用户)
GRANT ALL PRIVILEGES ON *.* TO 'username'@'host';

-- 刷新权限
FLUSH PRIVILEGES;

撤销权限

-- 撤销所有权限
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'host';

-- 撤销特定权限
REVOKE DELETE ON database_name.* FROM 'username'@'host';

-- 刷新权限
FLUSH PRIVILEGES;

查看用户权限

-- 查看当前用户权限
SHOW GRANTS;

-- 查看指定用户权限
SHOW GRANTS FOR 'username'@'host';

数据库维护

备份数据库

# 备份单个数据库
mysqldump -u username -p database_name > backup.sql

# 备份所有数据库
mysqldump -u username -p --all-databases > all_databases_backup.sql

# 备份特定表
mysqldump -u username -p database_name table_name > table_backup.sql

# 压缩备份
mysqldump -u username -p database_name | gzip > backup.sql.gz

恢复数据库

# 恢复数据库
mysql -u username -p database_name < backup.sql

# 恢复压缩的备份
gunzip < backup.sql.gz | mysql -u username -p database_name

数据库优化

-- 分析表
ANALYZE TABLE table_name;

-- 优化表
OPTIMIZE TABLE table_name;

-- 检查表
CHECK TABLE table_name;

-- 修复表
REPAIR TABLE table_name;

性能监控

查看系统状态

-- 查看系统变量
SHOW VARIABLES;

-- 查看系统状态
SHOW STATUS;

-- 查看进程列表
SHOW PROCESSLIST;

-- 查看引擎状态
SHOW ENGINE INNODB STATUS;

查看慢查询

-- 启用慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

-- 查看慢查询日志位置
SHOW VARIABLES LIKE 'slow_query_log_file';

性能调优

-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';

-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';

-- 查看缓存命中率
SHOW STATUS LIKE 'Qcache_hits';
SHOW STATUS LIKE 'Qcache_inserts';

日志管理

查看日志文件

-- 查看错误日志位置
SHOW VARIABLES LIKE 'log_error';

-- 查看二进制日志
SHOW BINARY LOGS;

-- 查看当前二进制日志
SHOW MASTER STATUS;

清理日志

-- 清理二进制日志
PURGE BINARY LOGS TO 'mysql-bin.000010';

-- 清理所有二进制日志
PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 7 DAY);

安全维护

安全配置

-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';

-- 删除测试数据库
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';

-- 刷新权限
FLUSH PRIVILEGES;

定期维护任务

-- 更新统计信息
ANALYZE TABLE table_name;

-- 清理临时表
DROP TEMPORARY TABLE IF EXISTS temp_table_name;

-- 检查表完整性
CHECK TABLE table_name;

监控脚本示例

连接数监控

#!/bin/bash
# 监控MySQL连接数
mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"

磁盘空间监控

#!/bin/bash
# 监控MySQL数据目录大小
du -sh /var/lib/mysql/

备份脚本

#!/bin/bash
# 自动备份脚本
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u username -p database_name > backup_$DATE.sql
gzip backup_$DATE.sql

常见问题排查

连接问题

-- 查看连接超时设置
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';

-- 查看当前连接
SHOW PROCESSLIST;

锁问题

-- 查看当前锁
SHOW ENGINE INNODB STATUS;

-- 查看锁等待
SELECT * FROM information_schema.INNODB_LOCK_WAITS;

内存问题

-- 查看内存使用情况
SHOW STATUS LIKE 'Created_tmp%';
SHOW VARIABLES LIKE 'tmp_table_size';
SHOW VARIABLES LIKE 'max_heap_table_size';

最佳实践

  1. 定期备份:建议每日进行完整备份,每小时进行增量备份
  2. 监控性能:定期检查慢查询日志和性能指标
  3. 权限最小化:只授予用户必要的权限
  4. 定期维护:定期执行 OPTIMIZE TABLE 和 ANALYZE TABLE
  5. 日志轮转:定期清理和轮转日志文件
  6. 安全更新:及时更新 MySQL 版本和安全补丁
最近更新:: 2026/4/17 13:21
Contributors: Duke
Prev
MySQL配置
Next
MYSQL优化-慢查询