前言
了解MySQL
什么是MySQL?
MySQL 是一个广泛使用的开源关系型数据库管理系统(RDBMS),它以其高性能、可靠性和易用性著称。MySQL 支持 SQL(Structured Query Language)语言,这是一种用于管理和处理关系数据库的标准语言。MySQL 适用于从小型个人项目到大型企业级应用程序的各种场景。
MySQL的特点
1.开源
MySQL 是一个开源数据库,这意味着它的源代码是公开的,任何人都可以免费下载和使用它。此外,社区版提供了大量的插件和扩展,增强了其功能性和灵活性。
2.跨平台
MySQL 可以运行在多种操作系统上,包括 Windows、Linux 和 macOS。
3.高性能
MySQL 以其高速度和高效率闻名。它支持多种存储引擎,如 InnoDB 和 MyISAM,可以根据应用程序的需求选择合适的存储引擎。
4.可靠性
MySQL 提供了事务支持、备份恢复机制和数据一致性保证等功能,使得它成为一个可靠的数据存储解决方案。
5.易于使用
MySQL 提供了一个直观的命令行界面和图形化工具(如 phpMyAdmin),使得管理和操作数据库变得简单。
6.支持多种编程语言
MySQL 提供了大量的驱动程序,支持 Java、Python、PHP、C# 等多种编程语言,方便开发者集成数据库功能。
7.安全性
MySQL 支持用户认证、权限控制和加密等功能,可以保护数据的安全。
8.可扩展性
MySQL 支持水平扩展(如复制和分片)和垂直扩展(如增加硬件资源),可以根据需求进行灵活扩展。
MySQL的主要组件
1.客户端工具
包括命令行工具 mysql
、图形化工具如 phpMyAdmin 和 MySQL Workbench 等。
2.服务器
MySQL 服务器负责存储和管理数据,提供 SQL 语言的支持。
3.存储引擎
MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。不同的存储引擎有不同的特性,可以根据应用场景选择合适的存储引擎。
4.复制
MySQL 支持主从复制和多主复制,可以实现高可用性和负载均衡。
5.分区
MySQL 支持数据分区,可以提高查询性能和管理大规模数据集。
MySQL的应用场景
MySQL 可以应用于各种场景,包括但不限于:
- Web 应用:许多流行的 Web 应用框架和内容管理系统(如 WordPress、Drupal 和 Joomla)都使用 MySQL 作为默认数据库。
- 企业应用:MySQL 在企业环境中用于存储关键业务数据,支持事务处理和复杂的查询。
- 物联网(IoT):MySQL 可以处理来自大量设备的数据,支持实时数据分析。
- 大数据处理:虽然 MySQL 不是专门的大数据处理工具,但它可以与其他大数据技术(如 Hadoop 和 Spark)集成,用于存储和处理数据。
MySQL的安装和配置
MySQL 可以在多种操作系统上安装和配置。安装过程通常涉及以下几个步骤:
- 下载 MySQL:从官方网站或其他可信来源下载 MySQL 安装包。
- 安装 MySQL:根据操作系统选择合适的安装方法,如使用包管理器(如
yum
、apt
)或手动解压安装包。 - 配置 MySQL:编辑配置文件(如
/etc/my.cnf
),设置必要的参数,如数据目录、日志文件、最大连接数等。 - 启动 MySQL 服务:使用系统的服务管理工具(如
systemctl
)启动 MySQL 服务。 - 安全配置:使用
mysql_secure_installation
脚本进行安全配置,如设置 root 密码、删除匿名用户等。 - 创建用户和数据库:登录 MySQL 并创建用户、数据库,授予必要的权限。
以上是安装MySQL和配置的大致步骤,下面我会详细演示和讲解MySQL的安装和配置。
上传MySQL安装包
这里的上传路径为/root/software下
上传方式可通过本地拖拽文件上传,也可通过连接xftp来拖拽至xshell命令行里实现
上传成功后,让我们进行下一步
解压MySQL安装包
解压至/root/software目录下
使用unzip命令行工具解压缩ZIP格式文件,它可以用来解压缩.zip文件,并且支持多种选项来定制解压行为。
unzip mysql-5.7.25-1.el7.x86_64.rpm.zip -d software/
常用选项
-l:列出压缩文件中的内容而不解压。
-d 目标目录:将文件解压到指定的目标目录。
-n:在遇到已存在的文件时不覆盖。
-o:在遇到已存在的文件时总是覆盖。
-v:显示压缩文件的版本信息。
解压完毕后,得到一个mysql-5.7.25的目录,cd进入
cd mysql-5.7.25/
可以看到有五个包,接下来我们需要按顺序安装这五个包
在此目录下使用rpm -ivh命令来安装
rpm -ivh是一个用于安装 RPM (Red Hat Package Manager)软件包的命令。RPM 是一种在 Linux 系统上管理软件包的方法,主要用于 Red Hat 及其衍生发行版(如 CentOS、Fedora 等)。
#基本语法
rpm -ivh [选项] 包名.rpm
选项解释
-i:安装软件包。
-v:显示详细信息(verbose)
-h:显示进度条(hash marks)
常用选项
--nodeps:忽略依赖关系,直接安装软件包。
--force:强制安装,即使软件包的文件已经存在于系统中。
--test:测试安装而不实际安装。
--replacefiles:替换冲突的文件。
--replacepkgs:替换整个软件包。
使 用 rpm -ivh 依 次 安 装 mysql-community-common、mysql-community- libs、mysql-community-libs-compat 、 mysql-community-client 和 mysql-community-server包
注:一定要按照以上顺序安装,不能颠倒!!!
第一个
没问题
第二个
第三个
第四个
最后一个
安装完成
怎么查看安装上的包
rpm -qa | grep mysql
五个包已经安装上了
MySQL用户初始化和启动数据库
切换到MySQL用户
由于MySQL的一些操作可能需要以MySQL的用户身份进行,因此首先切换到MySQL用户:
sudo su - mysql
切换成功,这将让你以MySQL用户的身份执行后续命令。
初始化MySQL数据库
初始化 MySQL 数据库通常是指创建初始的数据目录和相关文件。在大多数情况下,安装过程会自动完成这些步骤。
我们可以先检查一下MySQL有没有初始化
通过检查数据目录来判断MySQL有没有初始化
首先,检查MySQL数据目录/var/lib/mysql是否存在,并查看其中的内容:
ls -la /var/lib/mysql
分析目录内容
如果数据目录中包含以下内容,则说明 MySQL 已经进行了初始化:
ibdata1:这是 InnoDB 存储引擎的系统表空间文件。
mysql 目录:这是 MySQL 系统数据库的目录,包含一些重要的表,如用户表 mysql.user。
其他数据库目录:如果之前创建过数据库,还会有其他的数据库目录。
示例输出
以下是可能的输出示例:
total 20
drwxr-xr-x. 2 mysql mysql 4096 Oct 13 20:26 . drwxr-xr-x. 6 root root 4096 Oct 13 20:26 .. drwxr-x---. 2 mysql mysql 4096 Oct 13 20:26 auto.cnf
drwxr-x---. 2 mysql mysql 4096 Oct 13 20:26 ib_logfile0
drwxr-x---. 2 mysql mysql 4096 Oct 13 20:26 ib_logfile1
drwxr-x---. 2 mysql mysql 4096 Oct 13 20:26 ibdata1
drwxr-x---. 2 mysql mysql 4096 Oct 13 20:26 mysql
drwxr-x---. 2 mysql mysql 4096 Oct 13 20:26 performance_schema
drwxr-x---. 2 mysql mysql 4096 Oct 13 20:26 test
但是,如果需要手动初始化,可以使用以下命令:
mysqld --initialize-insecure
或是
sudo mysqld --initialize --user=mysql
这将初始化数据库,并且不设置初始的 root 密码。如果你希望设置一个初始的 root 密码,可以使用:
mysqld --initialize --console
这将输出初始的随机生成的 root 密码,你可以使用这个临时密码来登录MySQL,可以在初始化后立即修改密码。
启动MySQL服务
启动 MySQL 服务可以通过以下命令完成:
systemctl start mysqld
检查MySQL服务状态
启动服务后,检查服务状态:
systemctl status mysqld
设置MySQL自启动
如果希望 MySQL 数据库在系统启动时自动启动,可以使用以下命令启用服务的自启动:
systemctl enable mysqld
登录MySQL
尝试无密码登录
mysql -u root
如果 MySQL 允许无密码登录,你将进入 MySQL 命令行界面。
如果提示需要密码
确认是否有临时密码(查看日志文件):
grep 'temporary password' /var/log/mysqld.log
如果有临时密码,使用临时密码登录:
mysql -u root -p
输入临时密码。
密码输入时不会有显示,最好是复制临时密码,保证密码输入的准确性
修改root用户的密码
切换到MySQL数据库
USE mysql;
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin12345!';
刷新权限
确保更改生效
FLUSH PRIVILEGES;
重新登录验证
退出MySQL客户端并使用新密码重新登录,以确保密码更改成功
EXIT;
mysql -u root -pAdmin12345!
注:如何设置弱密码
在MySQL中设置弱密码(如 123456)虽然不推荐,但在某些开发或测试环境中可能有其必要性。以下是详细步骤来设置MySQL的root用户密码为 123456。
我们在设置过符合密码策略的密码的基础上,将密码更改为123456
首先照常登录mysql
mysql -u root -pAdmin12345!
切换到MySQL数据库
USE mysql;
关闭密码策略插件
UNINSTALL PLUGIN validate_password;
如若出现以上这种报错
可能的出现的原因是因为MySQL的validate_password插件尚未启用。
我们可以先检查 validate_password
插件是否启用
可以通过以下命令来查看已安装的插件
SHOW PLUGINS;
mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+---------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_TEMP_TABLE_INFO | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_BEING_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_CONFIG | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_CACHE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_TABLE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_VIRTUAL | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ngram | ACTIVE | FTPARSER | NULL | GPL |
+----------------------------+----------+--------------------+---------+---------+
44 rows in set (0.01 sec)
可以看到validate_password插件并未启用、未被列出,我们需要加载该插件
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
加载成功
接着再给他禁用掉
重置密码
在MySQL提示符下,使用 ALTER USER 命令来重置密码,我这里将设置为123456。
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
刷新权限
确保更改生效。
FLUSH PRIVILEGES;
重新登录验证
退出MySQL客户端并使用新密码重新登录,以确保密码更改成功:
EXIT;
mysql -u root -p123456
更改成功。
如果没有安装密码策略这个插件,我们也可以选择另一种方式来设置弱密码。
还是一样先使用临时密码登录mysql
更改MySQL密码策略
set global validate_password_policy=0;
set global validate_password_length=4;
设置简单的弱密码123456
set password=password("123456");
刷新权限以确保修改内容生效
flush privileges;
MySQL实现远程登录
登录MySQL
首先,使用现有的root用户或其他具有足够权限的用户登录MySQL:
mysql -u root -p123456
切换到MySQL数据库
进入MySQL数据库:
USE mysql;
修改user表中的host项
我这里将host项里的localhost改成%
update user set host = '%' where user = 'root';
刷新权限
确保更改生效
FLUSH PRIVILEGES;
验证更改
可以通过查询user表来验证更改是否成功
SELECT user, host FROM user WHERE user = 'root';
连接测试
成功!