1. 安装与配置
- 安装:MySQL可以安装在多种操作系统上,包括Linux、Windows和macOS。可以通过官方的安装包、操作系统的包管理器或Docker进行安装。
- 配置 :安装后,需要进行一些基本配置,如设置root用户密码、配置网络访问、调整缓存和内存设置等。这些配置可以通过修改
my.cnf
(Linux)或my.ini
(Windows)文件来完成。
2. 数据库与表的管理
- 创建与删除数据库 :使用
CREATE DATABASE
和DROP DATABASE
命令来创建和删除数据库。 - 创建与删除表 :使用
CREATE TABLE
和DROP TABLE
命令来创建和删除表,同时需要定义表的结构(字段、数据类型、约束等)。
3. 数据操作
- 插入数据 :使用
INSERT INTO
语句插入数据。 - 查询数据 :使用
SELECT
语句进行数据查询,支持复杂的查询操作,如JOIN、子查询、聚合函数等。 - 更新数据 :使用
UPDATE
语句更新数据。 - 删除数据 :使用
DELETE
语句删除数据。
4. 索引与性能优化
- 索引 :通过创建索引(
CREATE INDEX
)来加速查询操作。常用的索引类型有BTREE和HASH。 - 查询优化 :通过分析查询计划(使用
EXPLAIN
)和调整查询语句来优化性能。 - 缓存:配置查询缓存、调整缓冲池大小以提高性能。
5. 安全管理
- 用户管理 :使用
CREATE USER
、GRANT
和REVOKE
命令管理数据库用户及其权限。 - 密码管理:设置强密码策略,定期更新密码。
- 访问控制:通过配置防火墙、网络设置和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中的表