一、MySQL数据库的起源
MySQL 是一个开源的关系型数据库管理系统(RDBMS),其起源可以追溯到 1994 年。MySQL 最初是由瑞典公司 MySQL AB 开发的,该公司由 Michael “Monty” Widenius、Allan Larsson 和 David Axmark 于 1995 年成立。MySQL 的名字来源于 Monty 的女儿 My 的名字,加上 “SQL” 代表 “Structured Query Language”(结构化查询语言)。
MySQL 的开发最初是为了提供一种高效、可靠的数据库解决方案,并且具有较好的性能和简单的管理特性。其第一个公开发布的版本是 1.0,于 1995 年发布。随着时间的推移,MySQL 逐渐发展成为一个非常流行的数据库管理系统,广泛应用于各种类型的应用程序和网站。
2008 年,Sun Microsystems 收购了 MySQL AB,MySQL 成为了 Sun 的一部分。之后,Oracle 公司于 2010 年收购了 Sun Microsystems,因此 MySQL 也成为了 Oracle 的一部分。尽管如此,MySQL 依然以开源的方式继续发展,拥有大量的用户和开发者社区支持。
如今,尽管MySQL被甲骨文收购,但是MySQL依然迭代到了8.0.37版本,简称8.4,如果深入了解MySQL的发展历程,我们不难发现MySQL从一个小型的开源数据库项目成长为一个功能强大、被广泛使用的企业级数据库系统,得益于其持续的创新与发展,也是MySQL在今天的数据库市场占据极其重要的地位主要原因。
MySQL的官网访问
mysql官网:
MySQL :: MySQL 8.4 Reference Manual :: 2.5.2 Installing MySQL on Linux Using the MySQL APT Repository
oracle官网:
MySQL Enterprise Edition Downloads | Oracle
介绍MySQL
无论是什么程序,如果涉及到信息存储,比如耗材记录,电话信息,聊天记录,多媒体视频,电子书等数据不仅需要硬盘等这些硬件存储介质,也需要一个后台工具来管理这些数据,尤其像某宝、某东、某多多,英雄联盟、王者荣耀、逆水寒等这类大型软件都需要一个强大的数据库工具来精准高效的维护这些具有隐私性、高价值的信息,而MySQL是为数不多的免费开源的关系型数据库管理系统工具,通过SQL语言操作MySQL工具来管理数据库的日志、权限、数据备份、数据恢复、集群管理等作业。在人力不足的情况下,借助MySQL可以完成大量人工才能完成的海量工作。MySQL工具是开源的,因此在官网上我们依然获取到MySQL的源码,通过源码我们可以自定义自己的数据库工具风格和开发自己的数据库特有的功能,尽管难度很高,因为现有的数据库工具很完善,也许你想要的都有。
古希腊著名数学家和物理学家阿基米德曾说:“给我一个支点,我可以撬动整个地球”
二、安装MySQL
1. 更新软件包列表
ps:为防止权限问题,加sudo提权,也可不加
首先,确保你的软件包列表是最新的:
sudo apt update
2. 安装 MySQL
使用apt命令安装 MySQL 服务器:
sudo apt install mysql-server
3. 启动和检查 MySQL 服务
安装完成后,MySQL 服务会自动启动。你可以使用以下命令检查 MySQL 服务的状态:
sudo systemctl status mysql
如果服务没有运行,可以用以下命令启动它:
sudo systemctl start mysql
4. 运行 MySQL 安全设置
为了提高 MySQL 的安全性,你可以运行 MySQL 的安全配置脚本:
sudo mysql_secure_installation
这个脚本会询问你一些问题,例如是否设置 root 密码、是否删除匿名用户、是否禁用 root 远程登录等。按照提示进行设置。
5. 登录到 MySQL
使用以下命令登录到 MySQL:(未设置密码,默认无密码登录)
sudo mysql -u root -p
# -u root 指定root用户登录, 注意这里的root非Ubuntu的超级用户root,而是MySQL默认创建的用户
# -p [密码] 未设置密码,则默认无密码按Enter键进入MySQL
# 小提示:如果忘记了密码,/var/log/mysql/error.log记录了是否创建了密码,及其创建的密码
# 方法:grep password /var/log/mysql/error.log系统会提示你输入 MySQL的"root" 密码,输入密码后你将进入 MySQL 命令行界面。
注意:默认设置密码策略是<=8个字节
6. 基本操作
在 MySQL 命令行中,你可以执行基本的数据库操作。例如,查看现有的数据库:
show databases;# 示例:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)创建一个新数据库:
create database mydatabase;# 示例
mysql> create database mydatabase;
Query OK, 1 row affected (0.00 sec)#使用show database;查看创建成功的数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydatabase         | <---数据库创建成功
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)创建一个新用户并授权:
CREATE USER 'myuser'@'127.0.0.1' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;# 示例
# 1、创建用户myuser,设置只有本地主机可访问myuser用户,设置密码为mypasswordCREATE USER 'myuser'@'127.0.0.1' IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.01 sec)# 2、赋予mydatabase数据库的所有权限给myuser用户GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
Query OK, 0 rows affected (0.01 sec)# 3、刷新权限表,让权限生效FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)查看用户:
SELECT User,Host FROM mysql.user;# 示例
mysql> SELECT User,Host FROM mysql.user;
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| myuser           | 127.0.0.1 | <---创建成功的用户
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)退出MySQL:\q
mysql> \q7. 配置远程访问(可选)
如果你需要从远程主机访问 MySQL,即非本地计算机远程访问数据库,你可能需要修改 MySQL 配置文件/etc/mysql/mysql.conf.d,将bind-address的IP地址由127.0.0.1(默认本地访问)改为0.0.0.0(都可访问)或者你指定的服务器 IP 地址。
然后重新启动 MySQL 服务使配置生效:
sudo systemctl restart mysql
注意:还要在防火墙中开放 MySQL 的端口(默认是 3306),以允许远程访问。
三、MySQL密码策略
1. 登录到 MySQL
首先,以 root 用户或具有适当权限的用户登录到 MySQL:
sudo mysql -u root -p
2. 查看当前密码策略
在 MySQL 命令行中,执行以下命令以查看当前的密码策略设置:
SHOW VARIABLES LIKE 'validate_password%';# 示例
mysql> SHOW VARIABLES LIKE 'validate_password%';
+-------------------------------------------------+--------+
| Variable_name                                   | Value  |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0      |
| validate_password.check_user_name               | ON     |
| validate_password.dictionary_file               |        |
| validate_password.length                        | 8      |
| validate_password.mixed_case_count              | 1      |
| validate_password.number_count                  | 1      |
| validate_password.policy                        | MEDIUM |
| validate_password.special_char_count            | 1      |
+-------------------------------------------------+--------+
8 rows in set (0.01 sec)
这将显示所有validate_password相关的设置,包括密码长度、复杂性要求等。
3. 修改密码策略
你可以通过设置以下变量来调整密码策略:
-  密码长度要求: SET GLOBAL validate_password.length = 8;将数字 8 替换为你想要的最小密码长度。 
-  密码复杂性要求: SET GLOBAL validate_password.policy = LOW;validate_password.policy变量有以下几个值: - LOW:只要求密码长度。
- MEDIUM:要求密码包含字母、数字和特殊字符。
- STRONG:更严格的要求,密码中必须包含大写字母、小写字母、数字和特殊字符。
 
-  密码最小数字要求: SET GLOBAL validate_password.mixed_case_count = 1;设置密码中最少需要包含的大小写字母数量。 
-  密码最小特殊字符要求: SET GLOBAL validate_password.special_char_count = 1;设置密码中最少需要包含的特殊字符数量。 
4. 永久保存设置
需要注意的是上面的设置在 MySQL 重新启动后会丢失。如果你希望这些更改在每次 MySQL 启动时都生效,需要修改 MySQL 配置文件:
编辑 MySQL 配置文件/etc/mysql/mysql.conf.d/mysqld.cnf(具体位置取决于你的 MySQL 安装):
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf# 使用vim编译工具打开配置文件mysqld.cnf添加或修改以下行以反映你需要的设置:
[mysqld]
validate_password.length = 8
validate_password.policy = LOW
validate_password.mixed_case_count = 1
validate_password.special_char_count = 1
保存文件并退出编辑器,然后重新启动 MySQL 服务使更改生效:
sudo systemctl restart mysql
5. 测试新的密码策略
尝试设置一个新密码,以确保它符合新的策略要求。例如:
ALTER USER 'youruser'@'localhost' IDENTIFIED BY 'newpassword';
替换'youruser' 和'newpassword'为你的用户名和新密码或其他方法看看修改的策略是否生效。
四、SQL语言
SQL(Structured Query Language,结构化查询语言)由美国的IBM公司研发,SQL是一种用于与关系型数据库管理系统(RDBMS)进行交互的标准语言。它用于执行各种数据库操作,例如查询数据、插入数据、更新数据和删除数据。SQL 的基本语法和功能包括以下几个方面:
-  数据查询(SELECT)- 查询数据库中的数据。
- 示例: SELECT column1, column2 FROM table_name WHERE condition;
 
-  数据插入(INSERT)- 向表中插入新数据。
- 示例: INSERT INTO table_name (column1, column2) VALUES (value1, value2);
 
-  数据更新(UPDATE)- 修改表中现有的数据。
- 示例: UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
 
-  数据删除(DELETE)- 从表中删除数据。
- 示例: DELETE FROM table_name WHERE condition;
 
-  表和数据库管理- 创建表: CREATE TABLE table_name (column1 datatype,column2 datatype,... );
- 删除表: DROP TABLE table_name;
- 创建数据库: CREATE DATABASE database_name;
- 删除数据库: DROP DATABASE database_name;
 
- 创建表: 
-  数据定义语言(DDL)- 修改表结构(例如添加或删除列): ALTER TABLE table_name ADD column_name datatype;
 
- 修改表结构(例如添加或删除列): 
-  数据控制语言(DCL)- 授权权限: GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
- 撤销权限: REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'host';
 
- 授权权限: 
-  数据完整性- 添加约束(例如主键、外键): ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column_name);
 
- 添加约束(例如主键、外键): 
-  事务管理- 开始事务: START TRANSACTION;
- 提交事务: COMMIT;
- 回滚事务: ROLLBACK;
 
- 开始事务: 
-  索引- 创建索引: CREATE INDEX index_name ON table_name (column_name);
 
- 创建索引: 
PS:学会使用MySQL数据库工具,需要先掌握SQL语言,并在实践中运用所学的知识,尤其是想深入和熟练使用MySQL开源工具的开发者和数据库运维人员,我们一起努力。