MySQL数据库管理

1. 安装与配置

  • 安装:MySQL可以安装在多种操作系统上,包括Linux、Windows和macOS。可以通过官方的安装包、操作系统的包管理器或Docker进行安装。
  • 配置 :安装后,需要进行一些基本配置,如设置root用户密码、配置网络访问、调整缓存和内存设置等。这些配置可以通过修改my.cnf(Linux)或my.ini(Windows)文件来完成。

2. 数据库与表的管理

  • 创建与删除数据库 :使用CREATE DATABASEDROP DATABASE命令来创建和删除数据库。
  • 创建与删除表 :使用CREATE TABLEDROP TABLE命令来创建和删除表,同时需要定义表的结构(字段、数据类型、约束等)。

3. 数据操作

  • 插入数据 :使用INSERT INTO语句插入数据。
  • 查询数据 :使用SELECT语句进行数据查询,支持复杂的查询操作,如JOIN、子查询、聚合函数等。
  • 更新数据 :使用UPDATE语句更新数据。
  • 删除数据 :使用DELETE语句删除数据。

4. 索引与性能优化

  • 索引 :通过创建索引(CREATE INDEX)来加速查询操作。常用的索引类型有BTREE和HASH。
  • 查询优化 :通过分析查询计划(使用EXPLAIN)和调整查询语句来优化性能。
  • 缓存:配置查询缓存、调整缓冲池大小以提高性能。

5. 安全管理

  • 用户管理 :使用CREATE USERGRANTREVOKE命令管理数据库用户及其权限。
  • 密码管理:设置强密码策略,定期更新密码。
  • 访问控制:通过配置防火墙、网络设置和SSL/TLS加密来确保数据传输的安全。

6. 备份与恢复

  • 备份 :使用mysqldump工具进行逻辑备份,或通过MySQL Enterprise Backup进行物理备份。
  • 恢复 :通过备份文件进行数据恢复,可以使用mysql命令行工具导入备份数据。

7. 高可用性与扩展

  • 主从复制:配置主从复制实现数据的同步备份,提高数据的可用性和读性能。
  • 集群:使用MySQL Cluster或Galera Cluster实现高可用性和负载均衡。
  • 分片:通过数据库分片技术实现数据水平扩展。

8. 监控与日志

  • 监控 :使用MySQL自带的performance_schema或第三方工具(如Prometheus、Grafana)进行数据库性能监控。
  • 日志:配置查询日志、错误日志和慢查询日志,帮助诊断和解决问题。

查看数据库结构

root@localhost \~\]# mysql -u root -ppwd123 mysql\> show databases; mysql\> use mysql mysql\> show tables; mysql\> describe user; mysql\> select \* from user\\G; 备注: * information_schema数据库:保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等 * performance_schema:用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况 * mysql:是 MySQL 服务正常运行所需的数据库,其中包含了用户认证相关的表 ### 创建及删除数据库和表 ##### (1)创建新库 mysql\> create database auth; ##### (2)创建新表 mysql\> use auth; mysql\> CREATE TABLE users (user_name CHAR(16) NOT NULL, user_passwd CHAR(48) DEFAULT '', PRIMARY KEY (user_name)); 备注: DEFAULT '' 密码默认为空 注意: 5.7以前的版本的password()加密函数可以生成16位密文,5.7后的password()函数可以生成41位的密文,其算法为mysql_native_password;设置密码字段的时候要考虑加密,提供的字符长度要够用。,否则在添加记录时,如果使用了password()加密函数保存密码字段,会提示字符长度错误。 8.0的mysql已经弃用password() ##### (3)删除一个数据表 mysql\> DROP TABLE auth.users; ##### (4)删除一个数据库 mysql\>**DROP DATABASE auth;** ### SQL语言 DDL:数据定义语言(create、drop、alter) DML:数据操纵语言(insert、update、delete) DQL:数据查询语言(select) DCL:数据控制语言(grant、revoke、commit、rollback) ### 管理表中的数据记录 ##### (1)插入数据记录 mysql\>**use auth;** mysql\>INSERT INTO users(user_name,user_passwd) VALUES('zhangsan', PASSWORD ('123456')); mysql\>**INSERT INTO users VALUES('lisi', PASSWORD('654321'));** ##### (2)查询数据记录 mysql\>**select \* from auth.users;** mysql\>**SELECT user_name,user_passwd FROM auth.users WHERE user_name='zhangsan';** ##### (3)修改数据记录 mysql\>**UPDATE auth.users SET user_passwd=PASSWORD('') WHERE user_name= 'lisi';** mysql\>**SELECT \* FROM auth.users;** mysql\>**UPDATE mysql.user SET authentication_string=PASSWORD('123457') WHERE user='root';** mysql\>**FLUSH PRIVILEGES;**/ \[root@www \~\]# **mysqladmin -u root -p'123457' password '123456'** ##### (4)删除数据记录 mysql\>**DELETE FROM auth.users WHERE user_name='lisi';** mysql\>**SELECT \* FROM auth.users;** ### 数据库表高级操作 ##### (1)克隆表 mysql\>**create table user01 like auth.users;**//通过 LIKE 方法,复制 users 表生成 tmp 表,注意,此表为空 mysql\>**insert into user01 select \* from auth.users;**//通过 player 表生成 tmp 表内数据记录 ##### (2)删除表 mysql\> delete from user01 where user_name='zhangsan'; mysql\>**delete from user01;** mysql\>**insert into user01 select \* from auth.users;** mysql\>**truncate table user01;** mysql\>**select count(\*) from user01;** 备注: truncate和delete的区别: truncate删除表中的内容,不删除表结构,释放空间; delete删除表中的内容,不删除表结构,但不释放空间 truncate删除数据后重新写数据会从1开始, delete删除数据后只会从删除前的最后一行续写;内存空间上,truncate省空间 delete属于DML语句,而truncate和drop都属于DDL语句 delete可以在后续加上where进行针对行的删除 truncate和drop后面只能加上表名,直接删除表,无法where drop table 表名 删除表,内容连带结构一起删除; ##### (2)临时表 mysql\>**select \* from mytmp;**//查看 mytmp 表是否存在 mysql\>**CREATE TEMPORARY TABLE \`mytmp\` (** **\`id\` int(10) NOT NULL AUTO_INCREMENT,** **\`NAME\` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,** **\`level\` int(10) NOT NULL,** **PRIMARY KEY (id)** ) **ENGINE=InnoDB DEFAULT CHARSET=utf8; //**创建临时表 mysql\> **insert into mytmp(name,level) values('aa',10);**//插入数据 Query OK, 1 row affected (0.01 sec) mysql\>**select \* from mytmp;** mysql\>**quit**//退出当前连接 Bye mysql\>**select \* from mytmp;**//重新连接 MySQL 之后查看临时表状态 ### 数据库用户授权 #### 1:授予权限 mysql\>**GRANT select ON auth.\* TO 'zhangsan'@'localhost' IDENTIFIED BY '123456';** #### 2:查看权限 mysql\> SHOW GRANTS FOR 'zhangsan'@'localhost'; #### 3:验证权限 \[root@localhost \~\]# mysql -u zhangsan -p123456 mysql\> select \* from auth.users; mysql\> select \* from mysql.user; 备注: zhangsan用户可以查看auth数据库的表,但不能查看mysql数据库的表。 #### 4:撤销权限 mysql\> revoke all on auth.\* from zhangsan@'localhost'; \[root@localhost \~\]# mysql -u zhangsan -p123456 mysql\> select \* from mysql.user; 撤销权限后,已经无法查看auth中的表

相关推荐
r i c k21 分钟前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦35 分钟前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL1 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·2 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德2 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫2 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i2 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn2 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露3 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot